From a90525635377d22da20a12dbcc89f85b02b2370b Mon Sep 17 00:00:00 2001 From: Dwindi Ramadhana Date: Thu, 12 Feb 2026 00:52:40 +0700 Subject: [PATCH] Update pricing UX, billing flows, and API rules --- admin-dashboard-plan.md | 61 + api-how-it-works.md | 355 ++ app/.env.example | 29 +- .../Api/V1/AdminAnalyticsController.php | 56 + .../Api/V1/AdminPricingController.php | 141 + .../Api/V1/AdminSettingsController.php | 61 + .../Api/V1/AdminSubscriptionController.php | 158 + .../Api/V1/AdminUserController.php | 123 + .../Api/V1/AdminWebhookController.php | 92 + .../Controllers/Api/V1/EmojiApiController.php | 394 +- .../Api/V1/ExtensionController.php | 207 + .../Api/V1/PaypalWebhookController.php | 83 + .../Controllers/Api/V1/PricingController.php | 22 + .../Controllers/Api/V1/UserController.php | 171 + .../Api/V1/UserKeywordController.php | 210 + .../Auth/AuthenticatedSessionController.php | 47 + .../Auth/ConfirmablePasswordController.php | 40 + ...mailVerificationNotificationController.php | 24 + .../EmailVerificationPromptController.php | 21 + .../Auth/NewPasswordController.php | 62 + .../Controllers/Auth/PasswordController.php | 29 + .../Auth/PasswordResetLinkController.php | 44 + .../Auth/RegisteredUserController.php | 54 + .../Auth/VerifyEmailController.php | 27 + .../Controllers/Billing/PakasirController.php | 240 ++ .../Controllers/Billing/PayPalController.php | 336 ++ .../Dashboard/AdminDashboardController.php | 688 ++++ .../Dashboard/UserDashboardController.php | 452 +++ .../Http/Controllers/ProfileController.php | 66 + .../Http/Controllers/Web/SiteController.php | 143 +- app/app/Http/Requests/Auth/LoginRequest.php | 85 + .../Http/Requests/ProfileUpdateRequest.php | 30 + app/app/Mail/MailketingTransport.php | 88 + app/app/Mail/TestMailketing.php | 23 + app/app/Models/AdminAuditLog.php | 20 + app/app/Models/Order.php | 31 + app/app/Models/Payment.php | 36 + app/app/Models/PricingChange.php | 19 + app/app/Models/PricingPlan.php | 23 + app/app/Models/Setting.php | 18 + app/app/Models/Subscription.php | 33 + app/app/Models/User.php | 26 +- app/app/Models/UserApiKey.php | 28 + app/app/Models/UserKeyword.php | 21 + app/app/Models/WebhookEvent.php | 27 + .../ResetPasswordNotification.php | 20 + .../Notifications/VerifyEmailNotification.php | 20 + app/app/Providers/AppServiceProvider.php | 17 +- app/app/Services/Auth/ApiKeyService.php | 76 + .../Billing/PayPalPlanSyncService.php | 319 ++ .../Billing/PaypalWebhookProcessor.php | 78 + .../ExtensionVerificationService.php | 60 + app/app/Services/System/SettingsService.php | 46 + app/app/View/Components/AppLayout.php | 17 + app/app/View/Components/GuestLayout.php | 17 + app/bootstrap/app.php | 5 +- app/composer.json | 1 + app/composer.lock | 63 +- app/config/dewemoji.php | 92 +- app/config/mail.php | 7 + .../2026_02_08_000100_add_tier_to_users.php | 22 + ...2_08_000200_create_user_api_keys_table.php | 27 + ...2_08_000300_create_user_keywords_table.php | 28 + ...2_08_000400_create_subscriptions_table.php | 32 + ...2_08_000500_create_pricing_plans_table.php | 28 + ...08_000600_create_pricing_changes_table.php | 24 + ...026_02_08_000700_create_settings_table.php | 24 + ..._08_000800_create_webhook_events_table.php | 28 + ...0_add_event_id_to_webhook_events_table.php | 26 + ...6_02_09_000300_add_role_to_users_table.php | 30 + ...9_000400_create_admin_audit_logs_table.php | 25 + .../2026_02_10_000100_create_orders_table.php | 32 + ...026_02_10_000200_create_payments_table.php | 34 + app/database/seeders/DatabaseSeeder.php | 7 +- app/database/seeders/PricingPlanSeeder.php | 27 + app/dewemoji-billing-integration-plan.md | 195 + ...moji-user-dashboard-implementation-plan.md | 143 + app/package-lock.json | 3581 +++++++++++++++++ app/package.json | 10 +- app/postcss.config.js | 6 + .../assets/fonts/PlusJakartaSans-Bold.ttf | Bin 0 -> 94772 bytes .../fonts/PlusJakartaSans-BoldItalic.ttf | Bin 0 -> 97000 bytes .../fonts/PlusJakartaSans-ExtraBold.ttf | Bin 0 -> 94780 bytes .../fonts/PlusJakartaSans-ExtraBoldItalic.ttf | Bin 0 -> 97032 bytes .../fonts/PlusJakartaSans-ExtraLight.ttf | Bin 0 -> 94760 bytes .../PlusJakartaSans-ExtraLightItalic.ttf | Bin 0 -> 97152 bytes .../assets/fonts/PlusJakartaSans-Italic.ttf | Bin 0 -> 96916 bytes .../assets/fonts/PlusJakartaSans-Light.ttf | Bin 0 -> 94788 bytes .../fonts/PlusJakartaSans-LightItalic.ttf | Bin 0 -> 97148 bytes .../assets/fonts/PlusJakartaSans-Medium.ttf | Bin 0 -> 94808 bytes .../fonts/PlusJakartaSans-MediumItalic.ttf | Bin 0 -> 97116 bytes .../assets/fonts/PlusJakartaSans-Regular.ttf | Bin 0 -> 94756 bytes .../assets/fonts/PlusJakartaSans-SemiBold.ttf | Bin 0 -> 94836 bytes .../fonts/PlusJakartaSans-SemiBoldItalic.ttf | Bin 0 -> 97080 bytes .../admin-invite-role-change.html | 102 + .../api-key-created.html | 102 + .../api-key-rotated.html | 102 + .../email-verification.html | 98 + .../license-key-issued.html | 103 + .../license-key-updated.html | 103 + .../new-login-alert.html | 104 + .../email-branded-designs/password-reset.html | 98 + .../payment-failed-action-required.html | 103 + .../qris-payment-confirmed.html | 103 + .../qris-payment-pending.html | 103 + .../subscription-activated-paypal.html | 104 + .../subscription-canceled.html | 102 + .../welcome-onboarding.html | 110 + .../email-verification-light.html | 89 + .../email-designs/email-verification-v2.html | 89 + .../email-designs/password-reset-brand.html | 98 + .../email-designs/password-reset-light.html | 89 + .../password-reset-no-wrapper.html | 98 + .../welcome-onboarding-light.html | 101 + app/resources/css/app.css | 14 +- app/resources/js/app.js | 8 + .../views/auth/confirm-password.blade.php | 27 + .../views/auth/forgot-password.blade.php | 25 + app/resources/views/auth/login.blade.php | 53 + app/resources/views/auth/register.blade.php | 53 + .../views/auth/reset-password.blade.php | 39 + .../views/auth/verify-email.blade.php | 31 + .../components/application-logo.blade.php | 3 + .../components/auth-session-status.blade.php | 7 + .../views/components/danger-button.blade.php | 3 + .../views/components/dropdown-link.blade.php | 1 + .../views/components/dropdown.blade.php | 35 + .../views/components/input-error.blade.php | 9 + .../views/components/input-label.blade.php | 5 + .../views/components/modal.blade.php | 78 + .../views/components/nav-link.blade.php | 11 + .../views/components/primary-button.blade.php | 3 + .../components/responsive-nav-link.blade.php | 11 + .../components/secondary-button.blade.php | 3 + .../views/components/text-input.blade.php | 3 + app/resources/views/dashboard.blade.php | 26 + .../dashboard/admin/audit-logs.blade.php | 64 + .../views/dashboard/admin/pricing.blade.php | 145 + .../views/dashboard/admin/settings.blade.php | 93 + .../admin/subscription-show.blade.php | 65 + .../dashboard/admin/subscriptions.blade.php | 196 + .../views/dashboard/admin/user-show.blade.php | 88 + .../views/dashboard/admin/users.blade.php | 207 + .../dashboard/admin/webhook-show.blade.php | 57 + .../views/dashboard/admin/webhooks.blade.php | 139 + app/resources/views/dashboard/app.blade.php | 286 ++ app/resources/views/dashboard/index.blade.php | 182 + .../views/dashboard/layout.blade.php | 164 + app/resources/views/dashboard/page.blade.php | 42 + .../views/dashboard/user/api-keys.blade.php | 117 + .../views/dashboard/user/billing.blade.php | 127 + .../views/dashboard/user/keywords.blade.php | 251 ++ .../views/dashboard/user/overview.blade.php | 93 + .../dashboard/user/preferences.blade.php | 122 + .../views/dashboard/user/profile.blade.php | 25 + .../views/emails/reset-password.blade.php | 101 + app/resources/views/emails/test.blade.php | 40 + .../views/emails/verify-email.blade.php | 101 + app/resources/views/layouts/app.blade.php | 36 + app/resources/views/layouts/guest.blade.php | 144 + .../views/layouts/navigation.blade.php | 100 + app/resources/views/profile/edit.blade.php | 29 + .../partials/delete-user-form.blade.php | 55 + .../partials/update-password-form.blade.php | 48 + .../update-profile-information-form.blade.php | 64 + app/resources/views/site/api-docs.blade.php | 88 +- .../views/site/emoji-detail.blade.php | 186 +- app/resources/views/site/home.blade.php | 191 +- app/resources/views/site/layout.blade.php | 499 ++- app/resources/views/site/pricing.blade.php | 629 ++- app/resources/views/site/privacy.blade.php | 27 +- app/resources/views/site/support.blade.php | 19 +- app/resources/views/site/terms.blade.php | 25 +- .../vendor/pagination/dashboard.blade.php | 43 + app/resources/views/welcome.blade.php | 2 +- app/routes/api.php | 57 +- app/routes/auth.php | 59 + app/routes/console.php | 83 + app/routes/dashboard.php | 56 + app/routes/web.php | 28 +- app/tailwind.config.js | 22 + app/tests/Feature/ApiV1EndpointsTest.php | 3 + app/tests/Feature/Auth/AuthenticationTest.php | 54 + .../Feature/Auth/EmailVerificationTest.php | 58 + .../Feature/Auth/PasswordConfirmationTest.php | 44 + app/tests/Feature/Auth/PasswordResetTest.php | 73 + app/tests/Feature/Auth/PasswordUpdateTest.php | 51 + app/tests/Feature/Auth/RegistrationTest.php | 31 + app/tests/Feature/ProfileTest.php | 99 + app/vite.config.js | 7 - community-plan.md | 124 + ...g4ccww8oc4s8w0soog-2026-02-04-14-34-56.txt | 2087 ++++++++++ dewemoji-admin-walkthrough.md | 115 + dewemoji-direction-2026.md | 641 +++ dewemoji-extension-notes.md | 64 + dewemoji-ux-flow-brief.md | 873 ++++ env-migration-checklist.md | 117 + rebuild-progress.md | 40 +- redirection-dewemoji-plan.md | 188 + .../email-designs/email-verification.html | 141 + staging-sync-checklist.md | 14 +- tableplus-ssh-tunnel-guide.md | 70 + 202 files changed, 22348 insertions(+), 301 deletions(-) create mode 100644 admin-dashboard-plan.md create mode 100644 api-how-it-works.md create mode 100644 app/app/Http/Controllers/Api/V1/AdminAnalyticsController.php create mode 100644 app/app/Http/Controllers/Api/V1/AdminPricingController.php create mode 100644 app/app/Http/Controllers/Api/V1/AdminSettingsController.php create mode 100644 app/app/Http/Controllers/Api/V1/AdminSubscriptionController.php create mode 100644 app/app/Http/Controllers/Api/V1/AdminUserController.php create mode 100644 app/app/Http/Controllers/Api/V1/AdminWebhookController.php create mode 100644 app/app/Http/Controllers/Api/V1/ExtensionController.php create mode 100644 app/app/Http/Controllers/Api/V1/PaypalWebhookController.php create mode 100644 app/app/Http/Controllers/Api/V1/PricingController.php create mode 100644 app/app/Http/Controllers/Api/V1/UserController.php create mode 100644 app/app/Http/Controllers/Api/V1/UserKeywordController.php create mode 100644 app/app/Http/Controllers/Auth/AuthenticatedSessionController.php create mode 100644 app/app/Http/Controllers/Auth/ConfirmablePasswordController.php create mode 100644 app/app/Http/Controllers/Auth/EmailVerificationNotificationController.php create mode 100644 app/app/Http/Controllers/Auth/EmailVerificationPromptController.php create mode 100644 app/app/Http/Controllers/Auth/NewPasswordController.php create mode 100644 app/app/Http/Controllers/Auth/PasswordController.php create mode 100644 app/app/Http/Controllers/Auth/PasswordResetLinkController.php create mode 100644 app/app/Http/Controllers/Auth/RegisteredUserController.php create mode 100644 app/app/Http/Controllers/Auth/VerifyEmailController.php create mode 100644 app/app/Http/Controllers/Billing/PakasirController.php create mode 100644 app/app/Http/Controllers/Billing/PayPalController.php create mode 100644 app/app/Http/Controllers/Dashboard/AdminDashboardController.php create mode 100644 app/app/Http/Controllers/Dashboard/UserDashboardController.php create mode 100644 app/app/Http/Controllers/ProfileController.php create mode 100644 app/app/Http/Requests/Auth/LoginRequest.php create mode 100644 app/app/Http/Requests/ProfileUpdateRequest.php create mode 100644 app/app/Mail/MailketingTransport.php create mode 100644 app/app/Mail/TestMailketing.php create mode 100644 app/app/Models/AdminAuditLog.php create mode 100644 app/app/Models/Order.php create mode 100644 app/app/Models/Payment.php create mode 100644 app/app/Models/PricingChange.php create mode 100644 app/app/Models/PricingPlan.php create mode 100644 app/app/Models/Setting.php create mode 100644 app/app/Models/Subscription.php create mode 100644 app/app/Models/UserApiKey.php create mode 100644 app/app/Models/UserKeyword.php create mode 100644 app/app/Models/WebhookEvent.php create mode 100644 app/app/Notifications/ResetPasswordNotification.php create mode 100644 app/app/Notifications/VerifyEmailNotification.php create mode 100644 app/app/Services/Auth/ApiKeyService.php create mode 100644 app/app/Services/Billing/PayPalPlanSyncService.php create mode 100644 app/app/Services/Billing/PaypalWebhookProcessor.php create mode 100644 app/app/Services/Extension/ExtensionVerificationService.php create mode 100644 app/app/Services/System/SettingsService.php create mode 100644 app/app/View/Components/AppLayout.php create mode 100644 app/app/View/Components/GuestLayout.php create mode 100644 app/database/migrations/2026_02_08_000100_add_tier_to_users.php create mode 100644 app/database/migrations/2026_02_08_000200_create_user_api_keys_table.php create mode 100644 app/database/migrations/2026_02_08_000300_create_user_keywords_table.php create mode 100644 app/database/migrations/2026_02_08_000400_create_subscriptions_table.php create mode 100644 app/database/migrations/2026_02_08_000500_create_pricing_plans_table.php create mode 100644 app/database/migrations/2026_02_08_000600_create_pricing_changes_table.php create mode 100644 app/database/migrations/2026_02_08_000700_create_settings_table.php create mode 100644 app/database/migrations/2026_02_08_000800_create_webhook_events_table.php create mode 100644 app/database/migrations/2026_02_08_000900_add_event_id_to_webhook_events_table.php create mode 100644 app/database/migrations/2026_02_09_000300_add_role_to_users_table.php create mode 100644 app/database/migrations/2026_02_09_000400_create_admin_audit_logs_table.php create mode 100644 app/database/migrations/2026_02_10_000100_create_orders_table.php create mode 100644 app/database/migrations/2026_02_10_000200_create_payments_table.php create mode 100644 app/database/seeders/PricingPlanSeeder.php create mode 100644 app/dewemoji-billing-integration-plan.md create mode 100644 app/dewemoji-user-dashboard-implementation-plan.md create mode 100644 app/package-lock.json create mode 100644 app/postcss.config.js create mode 100644 app/public/assets/fonts/PlusJakartaSans-Bold.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-BoldItalic.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-ExtraBold.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-ExtraBoldItalic.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-ExtraLight.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-ExtraLightItalic.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-Italic.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-Light.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-LightItalic.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-Medium.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-MediumItalic.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-Regular.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-SemiBold.ttf create mode 100644 app/public/assets/fonts/PlusJakartaSans-SemiBoldItalic.ttf create mode 100644 app/references/email-branded-designs/admin-invite-role-change.html create mode 100644 app/references/email-branded-designs/api-key-created.html create mode 100644 app/references/email-branded-designs/api-key-rotated.html create mode 100644 app/references/email-branded-designs/email-verification.html create mode 100644 app/references/email-branded-designs/license-key-issued.html create mode 100644 app/references/email-branded-designs/license-key-updated.html create mode 100644 app/references/email-branded-designs/new-login-alert.html create mode 100644 app/references/email-branded-designs/password-reset.html create mode 100644 app/references/email-branded-designs/payment-failed-action-required.html create mode 100644 app/references/email-branded-designs/qris-payment-confirmed.html create mode 100644 app/references/email-branded-designs/qris-payment-pending.html create mode 100644 app/references/email-branded-designs/subscription-activated-paypal.html create mode 100644 app/references/email-branded-designs/subscription-canceled.html create mode 100644 app/references/email-branded-designs/welcome-onboarding.html create mode 100644 app/references/email-designs/email-verification-light.html create mode 100644 app/references/email-designs/email-verification-v2.html create mode 100644 app/references/email-designs/password-reset-brand.html create mode 100644 app/references/email-designs/password-reset-light.html create mode 100644 app/references/email-designs/password-reset-no-wrapper.html create mode 100644 app/references/email-designs/welcome-onboarding-light.html create mode 100644 app/resources/views/auth/confirm-password.blade.php create mode 100644 app/resources/views/auth/forgot-password.blade.php create mode 100644 app/resources/views/auth/login.blade.php create mode 100644 app/resources/views/auth/register.blade.php create mode 100644 app/resources/views/auth/reset-password.blade.php create mode 100644 app/resources/views/auth/verify-email.blade.php create mode 100644 app/resources/views/components/application-logo.blade.php create mode 100644 app/resources/views/components/auth-session-status.blade.php create mode 100644 app/resources/views/components/danger-button.blade.php create mode 100644 app/resources/views/components/dropdown-link.blade.php create mode 100644 app/resources/views/components/dropdown.blade.php create mode 100644 app/resources/views/components/input-error.blade.php create mode 100644 app/resources/views/components/input-label.blade.php create mode 100644 app/resources/views/components/modal.blade.php create mode 100644 app/resources/views/components/nav-link.blade.php create mode 100644 app/resources/views/components/primary-button.blade.php create mode 100644 app/resources/views/components/responsive-nav-link.blade.php create mode 100644 app/resources/views/components/secondary-button.blade.php create mode 100644 app/resources/views/components/text-input.blade.php create mode 100644 app/resources/views/dashboard.blade.php create mode 100644 app/resources/views/dashboard/admin/audit-logs.blade.php create mode 100644 app/resources/views/dashboard/admin/pricing.blade.php create mode 100644 app/resources/views/dashboard/admin/settings.blade.php create mode 100644 app/resources/views/dashboard/admin/subscription-show.blade.php create mode 100644 app/resources/views/dashboard/admin/subscriptions.blade.php create mode 100644 app/resources/views/dashboard/admin/user-show.blade.php create mode 100644 app/resources/views/dashboard/admin/users.blade.php create mode 100644 app/resources/views/dashboard/admin/webhook-show.blade.php create mode 100644 app/resources/views/dashboard/admin/webhooks.blade.php create mode 100644 app/resources/views/dashboard/app.blade.php create mode 100644 app/resources/views/dashboard/index.blade.php create mode 100644 app/resources/views/dashboard/layout.blade.php create mode 100644 app/resources/views/dashboard/page.blade.php create mode 100644 app/resources/views/dashboard/user/api-keys.blade.php create mode 100644 app/resources/views/dashboard/user/billing.blade.php create mode 100644 app/resources/views/dashboard/user/keywords.blade.php create mode 100644 app/resources/views/dashboard/user/overview.blade.php create mode 100644 app/resources/views/dashboard/user/preferences.blade.php create mode 100644 app/resources/views/dashboard/user/profile.blade.php create mode 100644 app/resources/views/emails/reset-password.blade.php create mode 100644 app/resources/views/emails/test.blade.php create mode 100644 app/resources/views/emails/verify-email.blade.php create mode 100644 app/resources/views/layouts/app.blade.php create mode 100644 app/resources/views/layouts/guest.blade.php create mode 100644 app/resources/views/layouts/navigation.blade.php create mode 100644 app/resources/views/profile/edit.blade.php create mode 100644 app/resources/views/profile/partials/delete-user-form.blade.php create mode 100644 app/resources/views/profile/partials/update-password-form.blade.php create mode 100644 app/resources/views/profile/partials/update-profile-information-form.blade.php create mode 100644 app/resources/views/vendor/pagination/dashboard.blade.php create mode 100644 app/routes/auth.php create mode 100644 app/routes/dashboard.php create mode 100644 app/tailwind.config.js create mode 100644 app/tests/Feature/Auth/AuthenticationTest.php create mode 100644 app/tests/Feature/Auth/EmailVerificationTest.php create mode 100644 app/tests/Feature/Auth/PasswordConfirmationTest.php create mode 100644 app/tests/Feature/Auth/PasswordResetTest.php create mode 100644 app/tests/Feature/Auth/PasswordUpdateTest.php create mode 100644 app/tests/Feature/Auth/RegistrationTest.php create mode 100644 app/tests/Feature/ProfileTest.php create mode 100644 community-plan.md create mode 100644 deployment-notes/deployment-w4gkwgg4ccww8oc4s8w0soog-2026-02-04-14-34-56.txt create mode 100644 dewemoji-admin-walkthrough.md create mode 100755 dewemoji-direction-2026.md create mode 100644 dewemoji-extension-notes.md create mode 100755 dewemoji-ux-flow-brief.md create mode 100644 env-migration-checklist.md create mode 100644 redirection-dewemoji-plan.md create mode 100644 references/email-designs/email-verification.html create mode 100644 tableplus-ssh-tunnel-guide.md diff --git a/admin-dashboard-plan.md b/admin-dashboard-plan.md new file mode 100644 index 0000000..2a6da9a --- /dev/null +++ b/admin-dashboard-plan.md @@ -0,0 +1,61 @@ +# Admin Dashboard Plan (Power Control) + +This is the internal control panel used to keep Dewemoji **safe, clean, and reliable**. + +## Purpose + +- Moderate public keywords and votes. +- Manage licenses and activations. +- Monitor system health and data pipelines. + +## Phase 1 (MVP — must‑have) + +### 1) Public keyword moderation +- View **public_pending** keyword queue. +- Approve / reject / block keyword. +- See emoji, language, proposer, vote counts. + +### 2) Abuse controls +- Blocklist terms. +- Quick “hide” keyword from public search. +- Soft‑ban repeated abusive accounts. + +### 3) License management +- Lookup by license key. +- See activations (device_id, product). +- Revoke activation or whole license. + +### 4) System health +- Last JSON rebuild time. +- Dataset counts (emojis, keywords). +- API usage summary (daily). + +### 5) Price control (Personal plan) +- Set IDR pricing for Monthly / Annual / Lifetime. +- Optional USD display override (approx only). +- Toggle payment rails (PayPal / QRIS). +- Effective date + change log (who changed, when). + +## Phase 2 (Nice‑to‑have) + +- AI moderation log viewer. +- Turnstile failure analytics. +- Contributor leaderboard. +- Email queue status. +- Scheduled job history. +- Pricing experiment history. + +## Suggested navigation + +- **Dashboard** (health, quick stats) +- **Keywords** (pending + public) +- **Licenses** +- **Users** +- **System** (jobs, JSON rebuild, logs) + +## Access control + +- Admin login uses **magic‑link/OTP session** + **role=admin** check. +- `X-Admin-Token` is **dev/internal only** (disable in prod). +- No IP allowlist required (dynamic ISP friendly). +- Log all actions (who approved / rejected / revoked). diff --git a/api-how-it-works.md b/api-how-it-works.md new file mode 100644 index 0000000..e66dd02 --- /dev/null +++ b/api-how-it-works.md @@ -0,0 +1,355 @@ +# Dewemoji API — How It Works + +This document explains the current API surface in the rebuild app, including filters, headers, and request/response shapes. + +## Base URLs + +- Local: `http://127.0.0.1:8000/v1` +- Staging: `https://dewemoji.backoffice.biz.id/v1` + +## Auth & headers + +### License key (optional for free, required for Pro) +You can send a license key in either header: + +- `Authorization: Bearer YOUR_LICENSE_KEY` (recommended) +- `X-License-Key: YOUR_LICENSE_KEY` (also supported) + +### Optional headers +- `X-Account-Id`: Optional usage association. +- `X-Dewemoji-Frontend`: Optional frontend identifier (string). + +### Response headers you’ll see +- `X-Dewemoji-Tier`: `free` or `pro` +- `X-Dewemoji-Plan`: `free` or `pro` +- Rate‑limit headers on free tier (page=1 only): + - `X-RateLimit-Limit` + - `X-RateLimit-Remaining` + - `X-RateLimit-Reset` +- Caching: + - `ETag` + - `Cache-Control` + +## Endpoints + +### GET `/emojis` +Search emojis with filters. + +Query params: +- `q` (string): search query (also accepts `query`) +- `category` (string): category name (e.g. `Smileys & Emotion`) +- `subcategory` (string): subcategory name (will be slugified internally) +- `page` (int, default 1) +- `limit` (int): + - Free tier: max 20 + - Pro tier: max 50 + +Behavior: +- If `q` is empty, it returns all emojis (subject to pagination). +- If `q` has multiple terms, all terms must match. +- `category` must match the exact category label in the dataset. +- `subcategory` is matched by slugifying both the request and dataset. +- `plan` field in response will be `free` or `pro`. + +Example: +```bash +curl -s "http://127.0.0.1:8000/v1/emojis?q=love&limit=5" | jq . +``` + +Response (shape): +```json +{ + "items": [ + { + "emoji": "😍", + "name": "smiling face with heart-eyes", + "slug": "smiling-face-with-heart-eyes", + "category": "Smileys & Emotion", + "subcategory": "face-affection", + "supports_skin_tone": false, + "summary": "...", + "unified": "U+1F60D", + "codepoints": ["1F60D"], + "shortcodes": [":smiling-face-with-heart-eyes:", "..."], + "aliases": [], + "keywords_en": ["love", "heart", "..."], + "keywords_id": ["cinta", "..."], + "related": ["🥰", "🤩", "😘"], + "intent_tags": ["love", "affection"] + } + ], + "total": 2131, + "page": 1, + "limit": 20, + "plan": "free" +} +``` + +### GET `/emoji/{slug}` or `/emoji?slug=...` +Fetch detail for a specific emoji. + +Example: +```bash +curl -s "http://127.0.0.1:8000/v1/emoji/grinning-face" | jq . +``` + +Errors: +- `400` if slug is missing (`error: missing_slug`) +- `404` if slug is not found (`error: not_found`) + +### GET `/categories` +Returns a map of category → list of subcategories. + +Example: +```bash +curl -s "http://127.0.0.1:8000/v1/categories" | jq . +``` + +Response: +```json +{ + "Smileys & Emotion": ["face-smiling", "face-affection", "..."], + "People & Body": ["hand-fingers-open", "..."] +} +``` + +### POST `/license/verify` +Validate a license key. + +Headers: +- `Authorization: Bearer YOUR_LICENSE_KEY` (or `X-License-Key`) + +Example: +```bash +curl -s -X POST "http://127.0.0.1:8000/v1/license/verify" \ + -H "Authorization: Bearer YOUR_LICENSE_KEY" | jq . +``` + +Success response: +```json +{ + "ok": true, + "tier": "pro", + "source": "gumroad|mayar|sandbox|...", + "plan": "pro", + "product_id": "…", + "expires_at": null, + "error": null +} +``` + +Errors: +- `400` `missing_key` +- `401` `invalid_license` + +### POST `/license/activate` +Activate a device or site session. + +Body (JSON): +```json +{ + "email": "you@example.com", + "product": "extension|site", + "device_id": "device-123" +} +``` + +Notes: +- `product=site` does not require `device_id`. +- Other products require `device_id`. + +### POST `/license/deactivate` +Deactivate a device. + +Body (JSON): +```json +{ + "product": "extension|site", + "device_id": "device-123" +} +``` + +### GET `/health` +Basic health check. + +Response: +```json +{ "ok": true, "time": "...", "app": "Dewemoji" } +``` + +### GET `/metrics-lite` +Lightweight metrics (if enabled). + +### GET `/metrics` +Full metrics (requires token or allowed IP). + +## Extension verification (public, no login) + +These endpoints allow **verified extension installs** to access public search without login. + +Fallback (temporary): +- If Verified Access token is not available, the server can accept `X-Extension-Id` + as a **soft allowlist** signal. This is **spoofable** and should not be treated as + a strong security boundary. + +### POST `/extension/verify` +Verifies `X-Extension-Token` by calling Google Instance ID API. + +Headers: +- `X-Extension-Token: ` + +Response: +```json +{ "ok": true, "verified": true } +``` + +### GET `/extension/search` +Public search for verified extension installs only. + +Headers: +- `X-Extension-Token: ` + +Example: +```bash +curl -s "http://127.0.0.1:8000/v1/extension/search?q=snail" \ + -H "X-Extension-Token: $EXT_TOKEN" | jq . +``` + +Errors: +- `403 extension_unverified` + +## Caching + +The API uses `ETag` and returns `304 Not Modified` if the client sends: +``` +If-None-Match: "etag-value" +``` + +Example: +```bash +ETAG=$(curl -i "http://127.0.0.1:8000/v1/emojis?q=love&limit=5" | awk -F': ' '/^ETag:/ {print $2}' | tr -d '\r') +curl -i -H "If-None-Match: $ETAG" "http://127.0.0.1:8000/v1/emojis?q=love&limit=5" | head -n 1 +``` + +## Public access guard (whitelist + soft throttle) + +Public endpoints (`/v1/emojis`, `/v1/categories`, `/v1/emoji`) are protected by a **whitelist + hourly throttle**. + +Behavior: +- If the request is **whitelisted**, it passes without throttling. +- If not whitelisted: + - If `DEWEMOJI_PUBLIC_ENFORCE=true` → `403 public_access_denied` + - Else → **soft throttle** with `DEWEMOJI_PUBLIC_HOURLY_LIMIT` (HTTP `429 public_rate_limited`) + +Whitelist rules: +- `Origin` is in `DEWEMOJI_PUBLIC_ORIGINS` +- Or `X-Dewemoji-Frontend` / `User-Agent` contains a configured extension ID + +Key env vars: +``` +DEWEMOJI_PUBLIC_ENFORCE=true|false +DEWEMOJI_PUBLIC_ORIGINS=https://dewemoji.com,https://www.dewemoji.com +DEWEMOJI_PUBLIC_HOURLY_LIMIT=5000 +DEWEMOJI_EXTENSION_IDS=chrome-extension://... +``` + +Rate limit response example: +```json +{ + "ok": false, + "error": "public_rate_limited", + "usage": { + "used": 3, + "limit": 3, + "remaining": 0, + "window": "hourly", + "window_ends_at": "2026-02-08T14:00:00+00:00", + "window_ends_at_unix": 1770559200 + } +} +``` + +## Admin endpoints (token required) + +All admin endpoints require: +``` +X-Admin-Token: +``` + +### Settings (feature flags / public access) +- `GET /v1/admin/settings` +- `POST /v1/admin/settings` + +Example: +```bash +curl -s -X POST "http://127.0.0.1:8000/v1/admin/settings" \ + -H "X-Admin-Token: $DEWEMOJI_ADMIN_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "settings": { + "maintenance_enabled": false, + "public_enforce": true, + "public_hourly_limit": 5000, + "public_origins": ["https://dewemoji.com","https://www.dewemoji.com"], + "public_extension_ids": ["chrome-extension://yourid"] + } + }' | jq . +``` + +### Subscriptions (admin grant/revoke) +- `GET /v1/admin/subscriptions` +- `POST /v1/admin/subscription/grant` +- `POST /v1/admin/subscription/revoke` + +Grant example: +```bash +curl -s -X POST "http://127.0.0.1:8000/v1/admin/subscription/grant" \ + -H "X-Admin-Token: $DEWEMOJI_ADMIN_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"email":"test@example.com","plan":"personal","status":"active","provider":"admin"}' | jq . +``` + +### Webhooks (PayPal) +- `POST /v1/paypal/webhook` (logs + processes) +- `GET /v1/admin/webhooks` +- `GET /v1/admin/webhooks/{id}` +- `POST /v1/admin/webhooks/{id}/replay` + +Deduping: +- PayPal `id` is stored as `event_id`. Duplicate events return `{ "ok": true, "duplicate": true }`. + +Note: +- PayPal **signature verification is not implemented yet** (TODO before production). + +### Analytics +- `GET /v1/admin/analytics` (counts for users/keywords/subscriptions/webhooks) + +## Security note: Origin/Referer are spoofable + +The `Origin` / `Referer` headers are **not** a strong security boundary. They are used to reduce casual abuse only. + +Options to harden public access: +- **Require API keys** for unlimited access (personal users). +- **Rate limit at the edge** (Cloudflare / Nginx). +- **Signed requests** for extension (HMAC or short‑lived tokens). +- **Shared secret header** for internal services. +- **WAF rules** for `/v1/*` endpoints. + +## Error payloads (common) + +```json +{ "ok": false, "error": "not_found" } +``` + +Other possible errors: +- `missing_slug` +- `missing_key` +- `invalid_license` +- `daily_limit_reached` +- `data_load_failed` + +## Notes + +- Current dataset contains **EN + ID** keywords. +- API reads from `app/data/emojis.json` (cache-first strategy). +- Free tier limit is enforced on **page=1** requests. diff --git a/app/.env.example b/app/.env.example index aaf9998..2e2d64d 100644 --- a/app/.env.example +++ b/app/.env.example @@ -47,7 +47,7 @@ REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 -MAIL_MAILER=log +MAIL_MAILER=mailketing MAIL_SCHEME=null MAIL_HOST=127.0.0.1 MAIL_PORT=2525 @@ -55,6 +55,9 @@ MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" +MAILKETING_API_URL=https://api.mailketing.co.id/api/v1/send +MAILKETING_API_TOKEN= +MAILKETING_TIMEOUT=10 AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= @@ -95,3 +98,27 @@ DEWEMOJI_FRONTEND_HEADER=web-v1 DEWEMOJI_METRICS_ENABLED=true DEWEMOJI_METRICS_TOKEN= DEWEMOJI_METRICS_ALLOW_IPS=127.0.0.1,::1 +DEWEMOJI_USD_RATE=15000 +DEWEMOJI_QRIS_URL= +DEWEMOJI_PAYPAL_URL= +DEWEMOJI_PAYPAL_ENABLED=false +DEWEMOJI_PAYPAL_TIMEOUT=10 +DEWEMOJI_PAYPAL_SANDBOX_CLIENT_ID= +DEWEMOJI_PAYPAL_SANDBOX_CLIENT_SECRET= +DEWEMOJI_PAYPAL_SANDBOX_WEBHOOK_ID= +DEWEMOJI_PAYPAL_SANDBOX_PLAN_PERSONAL_MONTHLY= +DEWEMOJI_PAYPAL_SANDBOX_PLAN_PERSONAL_ANNUAL= +DEWEMOJI_PAYPAL_LIVE_CLIENT_ID= +DEWEMOJI_PAYPAL_LIVE_CLIENT_SECRET= +DEWEMOJI_PAYPAL_LIVE_WEBHOOK_ID= +DEWEMOJI_PAYPAL_LIVE_PLAN_PERSONAL_MONTHLY= +DEWEMOJI_PAYPAL_LIVE_PLAN_PERSONAL_ANNUAL= +DEWEMOJI_PAYPAL_SANDBOX_API_BASE=https://api-m.sandbox.paypal.com +DEWEMOJI_PAYPAL_SANDBOX_WEB_BASE=https://www.sandbox.paypal.com +DEWEMOJI_PAYPAL_LIVE_API_BASE=https://api-m.paypal.com +DEWEMOJI_PAYPAL_LIVE_WEB_BASE=https://www.paypal.com +DEWEMOJI_PAKASIR_ENABLED=false +DEWEMOJI_PAKASIR_API_BASE=https://app.pakasir.com +DEWEMOJI_PAKASIR_API_KEY= +DEWEMOJI_PAKASIR_PROJECT= +DEWEMOJI_PAKASIR_TIMEOUT=10 diff --git a/app/app/Http/Controllers/Api/V1/AdminAnalyticsController.php b/app/app/Http/Controllers/Api/V1/AdminAnalyticsController.php new file mode 100644 index 0000000..669d9d7 --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/AdminAnalyticsController.php @@ -0,0 +1,56 @@ +header('X-Admin-Token', '')); + if ($token === '' || $provided === '' || !hash_equals($token, $provided)) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + return null; + } + + public function overview(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $totalUsers = User::count(); + $personalUsers = User::where('tier', 'personal')->count(); + $apiKeys = UserApiKey::count(); + $keywords = UserKeyword::count(); + $subscriptions = Subscription::count(); + $activeSubscriptions = Subscription::where('status', 'active')->count(); + $pricingPlans = PricingPlan::count(); + $webhooks = WebhookEvent::count(); + + return response()->json([ + 'ok' => true, + 'metrics' => [ + 'users_total' => $totalUsers, + 'users_personal' => $personalUsers, + 'api_keys_total' => $apiKeys, + 'keywords_total' => $keywords, + 'subscriptions_total' => $subscriptions, + 'subscriptions_active' => $activeSubscriptions, + 'pricing_plans_total' => $pricingPlans, + 'webhook_events_total' => $webhooks, + ], + ]); + } +} diff --git a/app/app/Http/Controllers/Api/V1/AdminPricingController.php b/app/app/Http/Controllers/Api/V1/AdminPricingController.php new file mode 100644 index 0000000..2f613d6 --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/AdminPricingController.php @@ -0,0 +1,141 @@ +header('X-Admin-Token', '')); + if ($adminToken === '' || $provided === '' || !hash_equals($adminToken, $provided)) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + + return null; + } + + public function index(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $plans = PricingPlan::orderBy('id')->get(); + + return response()->json([ + 'ok' => true, + 'plans' => $plans, + ]); + } + + public function changes(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $limit = max((int) $request->query('limit', 20), 1); + $items = PricingChange::orderByDesc('id') + ->limit($limit) + ->get(); + + return response()->json([ + 'ok' => true, + 'items' => $items, + ]); + } + + public function update(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $data = $request->validate([ + 'admin_ref' => 'nullable|string|max:120', + 'plans' => 'required|array|min:1', + 'plans.*.code' => 'required|string|max:30', + 'plans.*.name' => 'required|string|max:50', + 'plans.*.currency' => 'required|string|max:10', + 'plans.*.amount' => 'required|integer|min:0', + 'plans.*.period' => 'nullable|string|max:20', + 'plans.*.status' => 'nullable|string|max:20', + 'plans.*.meta' => 'nullable|array', + ]); + + $before = PricingPlan::orderBy('id')->get()->toArray(); + + DB::transaction(function () use ($data): void { + foreach ($data['plans'] as $plan) { + PricingPlan::updateOrCreate( + ['code' => $plan['code']], + [ + 'name' => $plan['name'], + 'currency' => $plan['currency'], + 'amount' => $plan['amount'], + 'period' => $plan['period'] ?? null, + 'status' => $plan['status'] ?? 'active', + 'meta' => $plan['meta'] ?? null, + ] + ); + } + }); + + $after = PricingPlan::orderBy('id')->get()->toArray(); + PricingChange::create([ + 'admin_ref' => $data['admin_ref'] ?? null, + 'before' => $before, + 'after' => $after, + ]); + + return response()->json([ + 'ok' => true, + 'plans' => $after, + ]); + } + + public function reset(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $defaults = config('dewemoji.pricing.defaults', []); + $before = PricingPlan::orderBy('id')->get()->toArray(); + + DB::transaction(function () use ($defaults): void { + PricingPlan::query()->delete(); + foreach ($defaults as $plan) { + PricingPlan::create([ + 'code' => $plan['code'], + 'name' => $plan['name'], + 'currency' => $plan['currency'], + 'amount' => $plan['amount'], + 'period' => $plan['period'], + 'status' => $plan['status'], + 'meta' => $plan['meta'] ?? null, + ]); + } + }); + + $after = PricingPlan::orderBy('id')->get()->toArray(); + PricingChange::create([ + 'admin_ref' => (string) $request->header('X-Admin-Ref', ''), + 'before' => $before, + 'after' => $after, + ]); + + return response()->json([ + 'ok' => true, + 'plans' => $after, + ]); + } +} diff --git a/app/app/Http/Controllers/Api/V1/AdminSettingsController.php b/app/app/Http/Controllers/Api/V1/AdminSettingsController.php new file mode 100644 index 0000000..d9ed5f5 --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/AdminSettingsController.php @@ -0,0 +1,61 @@ +header('X-Admin-Token', '')); + if ($token === '' || $provided === '' || !hash_equals($token, $provided)) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + return null; + } + + public function index(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $keys = $request->query('keys'); + $all = $this->settings->all(); + if (is_string($keys) && $keys !== '') { + $filter = array_filter(array_map('trim', explode(',', $keys))); + $all = array_intersect_key($all, array_flip($filter)); + } + + return response()->json(['ok' => true, 'settings' => $all]); + } + + public function update(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $payload = $request->input('settings'); + if (!is_array($payload)) { + return response()->json(['ok' => false, 'error' => 'invalid_payload'], 422); + } + + $adminRef = (string) $request->header('X-Admin-Ref', ''); + $this->settings->setMany($payload, $adminRef !== '' ? $adminRef : null); + + return response()->json([ + 'ok' => true, + 'settings' => $this->settings->all(), + ]); + } +} diff --git a/app/app/Http/Controllers/Api/V1/AdminSubscriptionController.php b/app/app/Http/Controllers/Api/V1/AdminSubscriptionController.php new file mode 100644 index 0000000..06bcc8e --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/AdminSubscriptionController.php @@ -0,0 +1,158 @@ +header('X-Admin-Token', '')); + if ($token === '' || $provided === '' || !hash_equals($token, $provided)) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + return null; + } + + public function index(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $query = Subscription::query()->with('user:id,email,name,tier'); + + if ($userId = $request->query('user_id')) { + $query->where('user_id', (int) $userId); + } + if ($email = $request->query('email')) { + $query->whereHas('user', fn ($q) => $q->where('email', $email)); + } + if ($status = $request->query('status')) { + $query->where('status', (string) $status); + } + + $limit = min(max((int) $request->query('limit', 50), 1), 200); + $items = $query->orderByDesc('id')->limit($limit)->get(); + + return response()->json(['ok' => true, 'items' => $items]); + } + + public function grant(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $user = $this->resolveUser($request); + if (!$user) { + return response()->json(['ok' => false, 'error' => 'not_found'], 404); + } + + $plan = (string) $request->input('plan', 'personal'); + $status = (string) $request->input('status', 'active'); + $provider = (string) $request->input('provider', 'admin'); + $providerRef = (string) $request->input('provider_ref', ''); + $startedAt = $this->parseDate($request->input('started_at')) ?? now(); + $expiresAt = $this->parseDate($request->input('expires_at')); + + $sub = Subscription::create([ + 'user_id' => $user->id, + 'plan' => $plan, + 'status' => $status, + 'provider' => $provider, + 'provider_ref' => $providerRef !== '' ? $providerRef : null, + 'started_at' => $startedAt, + 'expires_at' => $expiresAt, + ]); + + if ($status === 'active') { + $user->update(['tier' => 'personal']); + } + + return response()->json(['ok' => true, 'subscription' => $sub]); + } + + public function revoke(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $id = (int) $request->input('id', 0); + $now = now(); + + if ($id > 0) { + $sub = Subscription::find($id); + if (!$sub) { + return response()->json(['ok' => false, 'error' => 'not_found'], 404); + } + $sub->update(['status' => 'revoked', 'expires_at' => $now]); + $this->syncUserTier($sub->user_id); + return response()->json(['ok' => true, 'revoked' => true]); + } + + $user = $this->resolveUser($request); + if (!$user) { + return response()->json(['ok' => false, 'error' => 'not_found'], 404); + } + + Subscription::where('user_id', $user->id) + ->where('status', 'active') + ->update(['status' => 'revoked', 'expires_at' => $now]); + + $this->syncUserTier($user->id); + + return response()->json(['ok' => true, 'revoked' => true]); + } + + private function resolveUser(Request $request): ?User + { + if ($userId = $request->input('user_id')) { + return User::find((int) $userId); + } + if ($email = $request->input('email')) { + return User::where('email', (string) $email)->first(); + } + + return null; + } + + private function parseDate(mixed $value): ?Carbon + { + if (!$value) { + return null; + } + try { + return Carbon::parse((string) $value); + } catch (\Throwable) { + return null; + } + } + + private function syncUserTier(int $userId): void + { + $active = Subscription::where('user_id', $userId) + ->where('status', 'active') + ->where(function ($q): void { + $q->whereNull('expires_at') + ->orWhere('expires_at', '>', now()); + }) + ->exists(); + + User::where('id', $userId)->update([ + 'tier' => $active ? 'personal' : 'free', + ]); + if (!$active) { + UserApiKey::where('user_id', $userId)->update(['revoked_at' => now()]); + } + } +} diff --git a/app/app/Http/Controllers/Api/V1/AdminUserController.php b/app/app/Http/Controllers/Api/V1/AdminUserController.php new file mode 100644 index 0000000..5e0d717 --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/AdminUserController.php @@ -0,0 +1,123 @@ +header('X-Admin-Token', '')); + if ($adminToken === '' || $provided === '' || !hash_equals($adminToken, $provided)) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + + return null; + } + + public function index(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $q = trim((string) $request->query('q', '')); + $limit = max((int) $request->query('limit', 20), 1); + + $query = User::query()->orderByDesc('id'); + if ($q !== '') { + $query->where(function ($sub) use ($q): void { + $sub->where('email', 'like', '%'.$q.'%') + ->orWhere('name', 'like', '%'.$q.'%'); + }); + } + + $items = $query->limit($limit)->get(['id', 'name', 'email', 'tier', 'created_at']); + + return response()->json([ + 'ok' => true, + 'items' => $items, + ]); + } + + public function show(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $email = trim((string) $request->query('email', '')); + $userId = (int) $request->query('user_id', 0); + + $query = User::query(); + if ($email !== '') { + $query->where('email', $email); + } elseif ($userId > 0) { + $query->where('id', $userId); + } else { + return response()->json(['ok' => false, 'error' => 'missing_target'], 400); + } + + /** @var User|null $user */ + $user = $query->first(); + if (!$user) { + return response()->json(['ok' => false, 'error' => 'not_found'], 404); + } + + return response()->json([ + 'ok' => true, + 'user' => [ + 'id' => $user->id, + 'name' => $user->name, + 'email' => $user->email, + 'tier' => $user->tier, + 'created_at' => $user->created_at, + ], + ]); + } + + public function setTier(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $data = $request->validate([ + 'email' => 'nullable|email|max:255', + 'user_id' => 'nullable|integer', + 'tier' => 'required|string|in:free,personal', + ]); + + $query = User::query(); + if (!empty($data['email'])) { + $query->where('email', $data['email']); + } elseif (!empty($data['user_id'])) { + $query->where('id', $data['user_id']); + } else { + return response()->json(['ok' => false, 'error' => 'missing_target'], 400); + } + + /** @var User|null $user */ + $user = $query->first(); + if (!$user) { + return response()->json(['ok' => false, 'error' => 'not_found'], 404); + } + + $user->tier = $data['tier']; + $user->save(); + + return response()->json([ + 'ok' => true, + 'user' => [ + 'id' => $user->id, + 'email' => $user->email, + 'tier' => $user->tier, + ], + ]); + } +} diff --git a/app/app/Http/Controllers/Api/V1/AdminWebhookController.php b/app/app/Http/Controllers/Api/V1/AdminWebhookController.php new file mode 100644 index 0000000..b6497fb --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/AdminWebhookController.php @@ -0,0 +1,92 @@ +header('X-Admin-Token', '')); + if ($token === '' || $provided === '' || !hash_equals($token, $provided)) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + return null; + } + + public function index(Request $request): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $query = WebhookEvent::query(); + if ($provider = $request->query('provider')) { + $query->where('provider', (string) $provider); + } + if ($status = $request->query('status')) { + $query->where('status', (string) $status); + } + + $limit = min(max((int) $request->query('limit', 50), 1), 200); + $items = $query->orderByDesc('id')->limit($limit)->get(); + + return response()->json(['ok' => true, 'items' => $items]); + } + + public function show(Request $request, int $id): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $item = WebhookEvent::find($id); + if (!$item) { + return response()->json(['ok' => false, 'error' => 'not_found'], 404); + } + + return response()->json(['ok' => true, 'item' => $item]); + } + + public function replay(Request $request, int $id): JsonResponse + { + if ($res = $this->authorizeAdmin($request)) { + return $res; + } + + $item = WebhookEvent::find($id); + if (!$item) { + return response()->json(['ok' => false, 'error' => 'not_found'], 404); + } + + $item->update(['status' => 'pending', 'processed_at' => null, 'error' => null]); + + try { + if ($item->provider === 'paypal') { + $this->processor->process((string) ($item->event_type ?? ''), $item->payload ?? []); + } + $item->update([ + 'status' => 'processed', + 'processed_at' => now(), + ]); + } catch (\Throwable $e) { + $item->update([ + 'status' => 'error', + 'error' => $e->getMessage(), + 'processed_at' => now(), + ]); + } + + return response()->json(['ok' => true, 'replayed' => true]); + } +} diff --git a/app/app/Http/Controllers/Api/V1/EmojiApiController.php b/app/app/Http/Controllers/Api/V1/EmojiApiController.php index 94702ce..0866e2a 100644 --- a/app/app/Http/Controllers/Api/V1/EmojiApiController.php +++ b/app/app/Http/Controllers/Api/V1/EmojiApiController.php @@ -3,6 +3,8 @@ namespace App\Http\Controllers\Api\V1; use App\Services\Billing\LicenseVerificationService; +use App\Services\Auth\ApiKeyService; +use App\Services\System\SettingsService; use App\Http\Controllers\Controller; use Carbon\Carbon; use Illuminate\Http\JsonResponse; @@ -21,7 +23,8 @@ class EmojiApiController extends Controller private static ?array $dataset = null; public function __construct( - private readonly LicenseVerificationService $verification + private readonly LicenseVerificationService $verification, + private readonly ApiKeyService $apiKeys ) { } @@ -41,6 +44,10 @@ class EmojiApiController extends Controller public function categories(Request $request): JsonResponse { + if ($blocked = $this->enforcePublicAccess($request)) { + return $blocked; + } + $tier = $this->detectTier($request); try { $data = $this->loadData(); @@ -87,6 +94,10 @@ class EmojiApiController extends Controller public function emojis(Request $request): JsonResponse { + if ($blocked = $this->enforcePublicAccess($request)) { + return $blocked; + } + $tier = $this->detectTier($request); try { $data = $this->loadData(); @@ -109,45 +120,7 @@ class EmojiApiController extends Controller : max((int) config('dewemoji.pagination.free_max_limit', 20), 1); $limit = min(max((int) $request->query('limit', $defaultLimit), 1), $maxLimit); - $filtered = array_values(array_filter($items, function (array $item) use ($q, $category, $subSlug): bool { - $itemCategory = trim((string) ($item['category'] ?? '')); - $itemSubcategory = trim((string) ($item['subcategory'] ?? '')); - - if ($category !== '' && strcasecmp($itemCategory, $category) !== 0) { - return false; - } - if ($subSlug !== '' && $this->slugify($itemSubcategory) !== $subSlug) { - return false; - } - if ($q === '') { - return true; - } - - $haystack = strtolower(implode(' ', [ - (string) ($item['emoji'] ?? ''), - (string) ($item['name'] ?? ''), - (string) ($item['slug'] ?? ''), - $itemCategory, - $itemSubcategory, - implode(' ', $item['keywords_en'] ?? []), - implode(' ', $item['keywords_id'] ?? []), - implode(' ', $item['aliases'] ?? []), - implode(' ', $item['shortcodes'] ?? []), - implode(' ', $item['alt_shortcodes'] ?? []), - implode(' ', $item['intent_tags'] ?? []), - ])); - - $tokens = preg_split('/\s+/', strtolower($q)) ?: []; - foreach ($tokens as $token) { - if ($token === '') { - continue; - } - if (!str_contains($haystack, $token)) { - return false; - } - } - return true; - })); + $filtered = $this->filterItems($items, $q, $category, $subSlug); $total = count($filtered); $offset = ($page - 1) * $limit; @@ -170,44 +143,123 @@ class EmojiApiController extends Controller ]); } - if ($tier === self::TIER_FREE && $page === 1) { - $usage = $this->trackDailyUsage($request, $q, $category, $subSlug); - if ($usage['blocked']) { - return $this->jsonWithTier($request, [ - 'ok' => false, - 'error' => 'daily_limit_reached', - 'message' => 'Daily free limit reached. Upgrade to Pro for unlimited usage.', - 'plan' => self::TIER_FREE, - 'usage' => $usage['meta'], - ], $tier, 429, [ - 'X-RateLimit-Limit' => (string) $usage['meta']['limit'], - 'X-RateLimit-Remaining' => '0', - 'X-RateLimit-Reset' => (string) strtotime('tomorrow 00:00:00 UTC'), - 'ETag' => $etag, - 'Cache-Control' => 'public, max-age=120', - ]); - } - - $responsePayload['plan'] = self::TIER_FREE; - $responsePayload['usage'] = $usage['meta']; - - return $this->jsonWithTier($request, $responsePayload, $tier, 200, [ - 'X-RateLimit-Limit' => (string) $usage['meta']['limit'], - 'X-RateLimit-Remaining' => (string) $usage['meta']['remaining'], - 'X-RateLimit-Reset' => (string) strtotime('tomorrow 00:00:00 UTC'), - 'ETag' => $etag, - 'Cache-Control' => 'public, max-age=120', - ]); - } - return $this->jsonWithTier($request, $responsePayload, $tier, 200, [ 'ETag' => $etag, 'Cache-Control' => 'public, max-age=120', ]); } + public function search(Request $request): JsonResponse + { + $private = filter_var($request->query('private', false), FILTER_VALIDATE_BOOL); + if (!$private) { + return $this->emojis($request); + } + + $user = $this->apiKeys->resolveUser($request) ?? $request->user(); + if (!$user) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + if ((string) $user->tier !== 'personal') { + return response()->json(['ok' => false, 'error' => 'personal_required'], 403); + } + + $q = trim((string) ($request->query('q', $request->query('query', '')))); + $category = $this->normalizeCategoryFilter((string) $request->query('category', '')); + $subSlug = $this->slugify((string) $request->query('subcategory', '')); + + try { + $data = $this->loadData(); + } catch (RuntimeException $e) { + return $this->jsonWithTier($request, [ + 'error' => 'data_load_failed', + 'message' => $e->getMessage(), + ], self::TIER_FREE, 500); + } + + $items = $data['emojis'] ?? []; + $itemsBySlug = []; + foreach ($items as $item) { + $slug = (string) ($item['slug'] ?? ''); + if ($slug !== '') { + $itemsBySlug[$slug] = $item; + } + } + $filtered = $this->filterItems($items, $q, $category, $subSlug); + $publicBySlug = []; + foreach ($filtered as $item) { + $slug = (string) ($item['slug'] ?? ''); + if ($slug !== '') { + $publicBySlug[$slug] = $item; + } + } + + $privateMatches = []; + if ($q !== '') { + $rows = DB::table('user_keywords') + ->where('user_id', $user->id) + ->whereRaw('LOWER(keyword) LIKE ?', ['%'.strtolower($q).'%']) + ->get(['id', 'emoji_slug', 'keyword', 'lang']); + + foreach ($rows as $row) { + $slug = (string) $row->emoji_slug; + if ($slug === '') { + continue; + } + $privateMatches[$slug] = [ + 'id' => (int) $row->id, + 'keyword' => (string) $row->keyword, + 'lang' => (string) $row->lang, + ]; + } + } + + $tier = self::TIER_PRO; + $merged = []; + foreach ($privateMatches as $slug => $meta) { + $sourceItem = $publicBySlug[$slug] ?? $itemsBySlug[$slug] ?? null; + if ($sourceItem === null) { + continue; + } + $item = $this->transformItem($sourceItem, $tier); + $item['source'] = 'private'; + $item['matched_keyword_id'] = $meta['id'] ?? null; + $item['matched_keyword'] = $meta['keyword']; + $item['matched_lang'] = $meta['lang']; + $merged[$slug] = $item; + } + + foreach ($publicBySlug as $slug => $item) { + if (isset($merged[$slug])) { + continue; + } + $row = $this->transformItem($item, $tier); + $row['source'] = 'public'; + $merged[$slug] = $row; + } + + $mergedItems = array_values($merged); + $page = max((int) $request->query('page', 1), 1); + $limit = max((int) $request->query('limit', 20), 1); + $total = count($mergedItems); + $pageItems = array_slice($mergedItems, ($page - 1) * $limit, $limit); + + return response()->json([ + 'ok' => true, + 'items' => $pageItems, + 'total' => $total, + 'page' => $page, + 'limit' => $limit, + 'plan' => 'personal', + ]); + } + public function emoji(Request $request, ?string $slug = null): JsonResponse { + if ($blocked = $this->enforcePublicAccess($request)) { + return $blocked; + } + $tier = $this->detectTier($request); $slug = trim((string) ($slug ?? $request->query('slug', ''))); if ($slug === '') { @@ -243,6 +295,19 @@ class EmojiApiController extends Controller } $payload = $this->transformEmojiDetail($match, $tier); + $includeUserKeywords = filter_var($request->query('include_user_keywords', false), FILTER_VALIDATE_BOOL); + if ($includeUserKeywords) { + $user = $this->apiKeys->resolveUser($request) ?? $request->user(); + if ($user && (string) $user->tier === 'personal') { + $payload['user_keywords'] = DB::table('user_keywords') + ->where('user_id', $user->id) + ->where('emoji_slug', $slug) + ->orderByDesc('id') + ->get(['id', 'keyword', 'lang']); + } else { + $payload['user_keywords'] = []; + } + } $etag = '"'.sha1(json_encode([$payload, $tier])).'"'; if ($this->isNotModified($request, $etag)) { return $this->jsonWithTier($request, [], $tier, 304, [ @@ -277,6 +342,148 @@ class EmojiApiController extends Controller return self::TIER_FREE; } + private function enforcePublicAccess(Request $request): ?JsonResponse + { + if ($this->hasApiKeyAuth($request)) { + return null; + } + + $config = config('dewemoji.public_access', []); + $settings = app(SettingsService::class); + $maintenanceEnabled = (bool) $settings->get('maintenance_enabled', false); + if ($maintenanceEnabled) { + return $this->jsonWithTier($request, [ + 'ok' => false, + 'error' => 'maintenance', + ], self::TIER_FREE, 503); + } + + $enforceWhitelist = (bool) $settings->get('public_enforce', $config['enforce_whitelist'] ?? false); + $allowedOrigins = $settings->get('public_origins', $config['allowed_origins'] ?? []); + $extensionIds = $settings->get('public_extension_ids', $config['extension_ids'] ?? []); + $limitOverride = $settings->get('public_hourly_limit', $config['hourly_limit'] ?? 0); + + $allowed = $this->isPublicAllowed($request, [ + 'allowed_origins' => $allowedOrigins, + 'extension_ids' => $extensionIds, + ]); + + if ($enforceWhitelist && !$allowed) { + return $this->jsonWithTier($request, [ + 'ok' => false, + 'error' => 'public_access_denied', + ], self::TIER_FREE, 403); + } + + if (!$allowed) { + $limit = max((int) $limitOverride, 0); + if ($limit > 0) { + $usage = $this->trackPublicHourlyUsage($request, $limit); + if ($usage['blocked']) { + return $this->jsonWithTier($request, [ + 'ok' => false, + 'error' => 'public_rate_limited', + 'usage' => $usage['meta'], + ], self::TIER_FREE, 429, [ + 'X-RateLimit-Limit' => (string) $usage['meta']['limit'], + 'X-RateLimit-Remaining' => '0', + 'X-RateLimit-Reset' => (string) $usage['meta']['window_ends_at_unix'], + ]); + } + } + } + + return null; + } + + /** + * @param array $config + */ + private function isPublicAllowed(Request $request, array $config): bool + { + if (app()->environment(['local', 'testing'])) { + return true; + } + + $host = trim((string) $request->getHost()); + if (in_array($host, ['127.0.0.1', 'localhost'], true)) { + return true; + } + + $origin = trim((string) $request->headers->get('Origin', '')); + $allowedOrigins = $config['allowed_origins'] ?? []; + if ($origin !== '' && is_array($allowedOrigins) && in_array($origin, $allowedOrigins, true)) { + return true; + } + + $frontendHeader = trim((string) $request->header('X-Dewemoji-Frontend', '')); + $extensionIds = $config['extension_ids'] ?? []; + if ($frontendHeader !== '' && is_array($extensionIds)) { + foreach ($extensionIds as $id) { + if ($id !== '' && str_contains($frontendHeader, $id)) { + return true; + } + } + } + + $extensionHeader = trim((string) $request->header('X-Extension-Id', '')); + if ($extensionHeader !== '' && is_array($extensionIds)) { + if (in_array($extensionHeader, $extensionIds, true)) { + return true; + } + } + + $userAgent = (string) $request->userAgent(); + if ($userAgent !== '' && is_array($extensionIds)) { + foreach ($extensionIds as $id) { + if ($id !== '' && str_contains($userAgent, $id)) { + return true; + } + } + } + + return false; + } + + private function hasApiKeyAuth(Request $request): bool + { + return $this->apiKeys->resolveUser($request) !== null; + } + + /** + * @return array{blocked:bool,meta:array} + */ + private function trackPublicHourlyUsage(Request $request, int $limit): array + { + $bucket = sha1((string) $request->ip().'|'.(string) $request->userAgent()); + $hourKey = Carbon::now('UTC')->format('YmdH'); + $cacheKey = 'dw_public_hourly_'.$bucket.'_'.$hourKey; + $seconds = max(60, Carbon::now('UTC')->diffInSeconds(Carbon::now('UTC')->addHour()->startOfHour())); + + $current = Cache::get($cacheKey, 0); + if (!is_int($current)) { + $current = (int) $current; + } + + $current++; + Cache::put($cacheKey, $current, $seconds); + + $blocked = $current > $limit; + $windowEnds = Carbon::now('UTC')->addHour()->startOfHour(); + + return [ + 'blocked' => $blocked, + 'meta' => [ + 'used' => min($current, $limit), + 'limit' => $limit, + 'remaining' => max(0, $limit - $current), + 'window' => 'hourly', + 'window_ends_at' => $windowEnds->toIso8601String(), + 'window_ends_at_unix' => $windowEnds->timestamp, + ], + ]; + } + private function isNotModified(Request $request, string $etag): bool { $ifNoneMatch = trim((string) $request->header('If-None-Match', '')); @@ -329,6 +536,53 @@ class EmojiApiController extends Controller return trim($value, '-'); } + /** + * @param array> $items + * @return array> + */ + private function filterItems(array $items, string $q, string $category, string $subSlug): array + { + return array_values(array_filter($items, function (array $item) use ($q, $category, $subSlug): bool { + $itemCategory = trim((string) ($item['category'] ?? '')); + $itemSubcategory = trim((string) ($item['subcategory'] ?? '')); + + if ($category !== '' && strcasecmp($itemCategory, $category) !== 0) { + return false; + } + if ($subSlug !== '' && $this->slugify($itemSubcategory) !== $subSlug) { + return false; + } + if ($q === '') { + return true; + } + + $haystack = strtolower(implode(' ', [ + (string) ($item['emoji'] ?? ''), + (string) ($item['name'] ?? ''), + (string) ($item['slug'] ?? ''), + $itemCategory, + $itemSubcategory, + implode(' ', $item['keywords_en'] ?? []), + implode(' ', $item['keywords_id'] ?? []), + implode(' ', $item['aliases'] ?? []), + implode(' ', $item['shortcodes'] ?? []), + implode(' ', $item['alt_shortcodes'] ?? []), + implode(' ', $item['intent_tags'] ?? []), + ])); + + $tokens = preg_split('/\s+/', strtolower($q)) ?: []; + foreach ($tokens as $token) { + if ($token === '') { + continue; + } + if (!str_contains($haystack, $token)) { + return false; + } + } + return true; + })); + } + /** * @param array $item * @return array diff --git a/app/app/Http/Controllers/Api/V1/ExtensionController.php b/app/app/Http/Controllers/Api/V1/ExtensionController.php new file mode 100644 index 0000000..ac9bb91 --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/ExtensionController.php @@ -0,0 +1,207 @@ +|null */ + private static ?array $dataset = null; + + public function __construct(private readonly ExtensionVerificationService $verifier) + { + } + + public function verify(Request $request): JsonResponse + { + $token = trim((string) $request->header('X-Extension-Token', '')); + $expected = config('dewemoji.public_access.extension_ids', []); + $ok = $this->verifier->verifyToken($token, is_array($expected) ? $expected : []); + + return response()->json([ + 'ok' => $ok, + 'verified' => $ok, + ], $ok ? 200 : 403); + } + + public function search(Request $request): JsonResponse + { + $token = trim((string) $request->header('X-Extension-Token', '')); + $expected = config('dewemoji.public_access.extension_ids', []); + $ok = $this->verifier->verifyToken($token, is_array($expected) ? $expected : []); + if (!$ok) { + return response()->json(['ok' => false, 'error' => 'extension_unverified'], 403); + } + + try { + $data = $this->loadData(); + } catch (RuntimeException $e) { + return response()->json([ + 'ok' => false, + 'error' => 'data_load_failed', + 'message' => $e->getMessage(), + ], 500); + } + + $items = $data['emojis'] ?? []; + $q = trim((string) ($request->query('q', $request->query('query', '')))); + $category = $this->normalizeCategoryFilter((string) $request->query('category', '')); + $subSlug = $this->slugify((string) $request->query('subcategory', '')); + $page = max((int) $request->query('page', 1), 1); + + $defaultLimit = max((int) config('dewemoji.pagination.default_limit', 20), 1); + $maxLimit = max((int) config('dewemoji.pagination.free_max_limit', 20), 1); + $limit = min(max((int) $request->query('limit', $defaultLimit), 1), $maxLimit); + + $filtered = $this->filterItems($items, $q, $category, $subSlug); + $total = count($filtered); + $offset = ($page - 1) * $limit; + $pageItems = array_slice($filtered, $offset, $limit); + + return response()->json([ + 'ok' => true, + 'items' => array_map(fn (array $item): array => $this->transformItem($item), $pageItems), + 'total' => $total, + 'page' => $page, + 'limit' => $limit, + 'plan' => 'free', + ]); + } + + /** + * @return array + */ + private function loadData(): array + { + if (self::$dataset !== null) { + return self::$dataset; + } + + $path = (string) config('dewemoji.data_path'); + if (!is_file($path)) { + throw new RuntimeException('Emoji dataset file was not found at: '.$path); + } + + $raw = file_get_contents($path); + if ($raw === false) { + throw new RuntimeException('Emoji dataset file could not be read.'); + } + + $decoded = json_decode($raw, true); + if (!is_array($decoded)) { + throw new RuntimeException('Emoji dataset JSON is invalid.'); + } + + self::$dataset = $decoded; + return self::$dataset; + } + + private function normalizeCategoryFilter(string $category): string + { + $value = strtolower(trim($category)); + if ($value === '' || $value === 'all') { + return ''; + } + + $map = [ + 'all' => 'all', + 'smileys' => 'Smileys & Emotion', + 'people' => 'People & Body', + 'animals' => 'Animals & Nature', + 'food' => 'Food & Drink', + 'travel' => 'Travel & Places', + 'activities' => 'Activities', + 'objects' => 'Objects', + 'symbols' => 'Symbols', + 'flags' => 'Flags', + ]; + return $map[$value] ?? $category; + } + + private function slugify(string $text): string + { + $value = strtolower(trim($text)); + $value = str_replace('&', 'and', $value); + $value = preg_replace('/[^a-z0-9]+/', '-', $value) ?? ''; + return trim($value, '-'); + } + + /** + * @param array> $items + * @return array> + */ + private function filterItems(array $items, string $q, string $category, string $subSlug): array + { + return array_values(array_filter($items, function (array $item) use ($q, $category, $subSlug): bool { + $itemCategory = trim((string) ($item['category'] ?? '')); + $itemSubcategory = trim((string) ($item['subcategory'] ?? '')); + + if ($category !== '' && strcasecmp($itemCategory, $category) !== 0) { + return false; + } + if ($subSlug !== '' && $this->slugify($itemSubcategory) !== $subSlug) { + return false; + } + if ($q === '') { + return true; + } + + $haystack = strtolower(implode(' ', [ + (string) ($item['emoji'] ?? ''), + (string) ($item['name'] ?? ''), + (string) ($item['slug'] ?? ''), + $itemCategory, + $itemSubcategory, + implode(' ', $item['keywords_en'] ?? []), + implode(' ', $item['keywords_id'] ?? []), + implode(' ', $item['aliases'] ?? []), + implode(' ', $item['shortcodes'] ?? []), + implode(' ', $item['alt_shortcodes'] ?? []), + implode(' ', $item['intent_tags'] ?? []), + ])); + + $tokens = preg_split('/\s+/', strtolower($q)) ?: []; + foreach ($tokens as $token) { + if ($token === '') { + continue; + } + if (!str_contains($haystack, $token)) { + return false; + } + } + return true; + })); + } + + /** + * @param array $item + * @return array + */ + private function transformItem(array $item): array + { + return [ + 'emoji' => (string) ($item['emoji'] ?? ''), + 'name' => (string) ($item['name'] ?? ''), + 'slug' => (string) ($item['slug'] ?? ''), + 'category' => (string) ($item['category'] ?? ''), + 'subcategory' => (string) ($item['subcategory'] ?? ''), + 'supports_skin_tone' => (bool) ($item['supports_skin_tone'] ?? false), + 'summary' => $this->summary((string) ($item['description'] ?? ''), 150), + ]; + } + + private function summary(string $text, int $max): string + { + $text = trim(preg_replace('/\s+/', ' ', strip_tags($text)) ?? ''); + if (mb_strlen($text) <= $max) { + return $text; + } + + return rtrim(mb_substr($text, 0, $max - 1), " ,.;:-").'…'; + } +} diff --git a/app/app/Http/Controllers/Api/V1/PaypalWebhookController.php b/app/app/Http/Controllers/Api/V1/PaypalWebhookController.php new file mode 100644 index 0000000..82670fa --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/PaypalWebhookController.php @@ -0,0 +1,83 @@ +all(); + $eventType = (string) ($payload['event_type'] ?? ''); + $eventId = (string) ($payload['id'] ?? ''); + + $signatureOk = $this->verifySignature($request); + + if ($eventId !== '' && WebhookEvent::where('provider', 'paypal')->where('event_id', $eventId)->exists()) { + return response()->json(['ok' => true, 'duplicate' => true]); + } + + $event = WebhookEvent::create([ + 'provider' => 'paypal', + 'event_id' => $eventId !== '' ? $eventId : null, + 'event_type' => $eventType !== '' ? $eventType : null, + 'status' => $signatureOk ? 'received' : 'error', + 'payload' => $payload, + 'headers' => $this->extractHeaders($request), + 'received_at' => now(), + 'error' => $signatureOk ? null : 'signature_unverified', + ]); + + if (!$signatureOk) { + return response()->json(['ok' => true, 'signature' => 'unverified']); + } + + try { + $this->processor->process($eventType, $payload); + $event->update([ + 'status' => 'processed', + 'processed_at' => now(), + ]); + } catch (\Throwable $e) { + $event->update([ + 'status' => 'error', + 'error' => $e->getMessage(), + 'processed_at' => now(), + ]); + } + + return response()->json(['ok' => true]); + } + + private function verifySignature(Request $request): bool + { + // TODO: Implement PayPal signature verification using transmission headers + webhook ID. + // For now this returns true to allow local testing. + return true; + } + + /** + * @return array + */ + private function extractHeaders(Request $request): array + { + $headers = [ + 'paypal-transmission-id' => (string) $request->header('PayPal-Transmission-Id', ''), + 'paypal-transmission-sig' => (string) $request->header('PayPal-Transmission-Sig', ''), + 'paypal-cert-url' => (string) $request->header('PayPal-Cert-Url', ''), + 'paypal-auth-algo' => (string) $request->header('PayPal-Auth-Algo', ''), + 'paypal-transmission-time' => (string) $request->header('PayPal-Transmission-Time', ''), + ]; + + return array_filter($headers, fn (string $value): bool => $value !== ''); + } +} diff --git a/app/app/Http/Controllers/Api/V1/PricingController.php b/app/app/Http/Controllers/Api/V1/PricingController.php new file mode 100644 index 0000000..79b7192 --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/PricingController.php @@ -0,0 +1,22 @@ +orderBy('id') + ->get(['code', 'name', 'currency', 'amount', 'period', 'meta']); + + return response()->json([ + 'ok' => true, + 'plans' => $plans, + ]); + } +} diff --git a/app/app/Http/Controllers/Api/V1/UserController.php b/app/app/Http/Controllers/Api/V1/UserController.php new file mode 100644 index 0000000..e57bc24 --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/UserController.php @@ -0,0 +1,171 @@ +validate([ + 'email' => 'required|email|max:255|unique:users,email', + 'password' => 'required|min:8|max:255', + 'name' => 'nullable|string|max:120', + ]); + + $name = $data['name'] ?? strtok($data['email'], '@'); + $user = User::create([ + 'name' => $name ?: 'User', + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + 'tier' => 'free', + ]); + + $issued = null; + if ((string) $user->tier === 'personal') { + $issued = $this->keys->issueKey($user, 'default'); + } + + return response()->json([ + 'ok' => true, + 'user' => [ + 'id' => $user->id, + 'email' => $user->email, + 'tier' => $user->tier, + ], + 'api_key' => $issued['plain'] ?? null, + ]); + } + + public function login(Request $request): JsonResponse + { + $data = $request->validate([ + 'email' => 'required|email|max:255', + 'password' => 'required|string|max:255', + ]); + + /** @var User|null $user */ + $user = User::where('email', $data['email'])->first(); + if (!$user || !Hash::check($data['password'], $user->password)) { + return response()->json([ + 'ok' => false, + 'error' => 'invalid_credentials', + ], 401); + } + + $issued = null; + if ((string) $user->tier === 'personal') { + $issued = $this->keys->issueKey($user, 'login'); + } + + return response()->json([ + 'ok' => true, + 'user' => [ + 'id' => $user->id, + 'email' => $user->email, + 'tier' => $user->tier, + ], + 'api_key' => $issued['plain'] ?? null, + ]); + } + + public function logout(Request $request): JsonResponse + { + $key = $this->keys->parseKey($request); + if ($key === '') { + return response()->json(['ok' => true]); + } + + $hash = $this->keys->hashKey($key); + UserApiKey::where('key_hash', $hash)->update([ + 'revoked_at' => Carbon::now(), + ]); + + return response()->json(['ok' => true]); + } + + public function listApiKeys(Request $request): JsonResponse + { + $user = $this->keys->resolveUser($request); + if (!$user) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + + $items = UserApiKey::where('user_id', $user->id) + ->orderByDesc('id') + ->get() + ->map(fn (UserApiKey $key) => [ + 'id' => $key->id, + 'prefix' => $key->key_prefix, + 'name' => $key->name, + 'created_at' => $key->created_at, + 'last_used_at' => $key->last_used_at, + 'revoked_at' => $key->revoked_at, + ]); + + return response()->json([ + 'ok' => true, + 'items' => $items, + ]); + } + + public function createApiKey(Request $request): JsonResponse + { + $user = $this->keys->resolveUser($request); + if (!$user) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + if ((string) $user->tier !== 'personal') { + return response()->json(['ok' => false, 'error' => 'personal_required'], 403); + } + + $data = $request->validate([ + 'name' => 'nullable|string|max:100', + ]); + + $issued = $this->keys->issueKey($user, $data['name'] ?? null); + + return response()->json([ + 'ok' => true, + 'api_key' => $issued['plain'], + 'key' => [ + 'id' => $issued['record']->id, + 'prefix' => $issued['record']->key_prefix, + 'name' => $issued['record']->name, + 'created_at' => $issued['record']->created_at, + ], + ]); + } + + public function revokeApiKey(Request $request, string $key): JsonResponse + { + $user = $this->keys->resolveUser($request); + if (!$user) { + return response()->json(['ok' => false, 'error' => 'unauthorized'], 401); + } + + $hash = $this->keys->hashKey($key); + $updated = UserApiKey::where('user_id', $user->id) + ->where('key_hash', $hash) + ->whereNull('revoked_at') + ->update(['revoked_at' => Carbon::now()]); + + return response()->json([ + 'ok' => true, + 'revoked' => $updated > 0, + ]); + } +} diff --git a/app/app/Http/Controllers/Api/V1/UserKeywordController.php b/app/app/Http/Controllers/Api/V1/UserKeywordController.php new file mode 100644 index 0000000..4325325 --- /dev/null +++ b/app/app/Http/Controllers/Api/V1/UserKeywordController.php @@ -0,0 +1,210 @@ +keys->resolveUser($request); + if (!$user) { + return ['error' => 'unauthorized', 'status' => 401]; + } + + return ['user' => $user]; + } + + public function index(Request $request): JsonResponse + { + $check = $this->ensureUser($request); + if (!isset($check['user'])) { + return response()->json(['ok' => false, 'error' => $check['error']], $check['status']); + } + + $user = $check['user']; + $items = UserKeyword::where('user_id', $user->id) + ->orderByDesc('id') + ->get(['id', 'emoji_slug', 'keyword', 'lang', 'created_at', 'updated_at']); + + return response()->json(['ok' => true, 'items' => $items]); + } + + public function store(Request $request): JsonResponse + { + $check = $this->ensureUser($request); + if (!isset($check['user'])) { + return response()->json(['ok' => false, 'error' => $check['error']], $check['status']); + } + + $data = $request->validate([ + 'emoji_slug' => 'required|string|max:120', + 'keyword' => 'required|string|max:200', + 'lang' => 'nullable|string|max:10', + ]); + + $lang = $data['lang'] ?? 'und'; + $user = $check['user']; + $limit = $this->keywordLimitFor($user); + if ($limit !== null) { + $exists = UserKeyword::where('user_id', $user->id) + ->where('emoji_slug', $data['emoji_slug']) + ->where('keyword', $data['keyword']) + ->exists(); + if (!$exists) { + $count = UserKeyword::where('user_id', $user->id)->count(); + if ($count >= $limit) { + return response()->json(['ok' => false, 'error' => 'free_limit_reached', 'limit' => $limit], 403); + } + } + } + + $item = UserKeyword::updateOrCreate( + [ + 'user_id' => $user->id, + 'emoji_slug' => $data['emoji_slug'], + 'keyword' => $data['keyword'], + ], + [ + 'lang' => $lang, + ] + ); + + return response()->json(['ok' => true, 'item' => $item]); + } + + public function destroy(Request $request, int $id): JsonResponse + { + $check = $this->ensureUser($request); + if (!isset($check['user'])) { + return response()->json(['ok' => false, 'error' => $check['error']], $check['status']); + } + + $deleted = UserKeyword::where('user_id', $check['user']->id) + ->where('id', $id) + ->delete(); + + return response()->json(['ok' => true, 'deleted' => $deleted > 0]); + } + + public function update(Request $request, int $id): JsonResponse + { + $check = $this->ensureUser($request); + if (!isset($check['user'])) { + return response()->json(['ok' => false, 'error' => $check['error']], $check['status']); + } + + $data = $request->validate([ + 'emoji_slug' => 'required|string|max:120', + 'keyword' => 'required|string|max:200', + 'lang' => 'nullable|string|max:10', + ]); + + $item = UserKeyword::where('user_id', $check['user']->id) + ->where('id', $id) + ->first(); + + if (!$item) { + return response()->json(['ok' => false, 'error' => 'not_found'], 404); + } + + $duplicate = UserKeyword::where('user_id', $check['user']->id) + ->where('emoji_slug', $data['emoji_slug']) + ->where('keyword', $data['keyword']) + ->first(); + + if ($duplicate && $duplicate->id !== $item->id) { + $item->delete(); + $item = $duplicate; + } else { + $item->update([ + 'emoji_slug' => $data['emoji_slug'], + 'keyword' => $data['keyword'], + 'lang' => $data['lang'] ?? 'und', + ]); + } + + return response()->json(['ok' => true, 'item' => $item]); + } + + public function export(Request $request): JsonResponse + { + $check = $this->ensureUser($request); + if (!isset($check['user'])) { + return response()->json(['ok' => false, 'error' => $check['error']], $check['status']); + } + + $items = UserKeyword::where('user_id', $check['user']->id) + ->orderByDesc('id') + ->get(['emoji_slug', 'keyword', 'lang']); + + return response()->json(['ok' => true, 'items' => $items]); + } + + public function import(Request $request): JsonResponse + { + $check = $this->ensureUser($request); + if (!isset($check['user'])) { + return response()->json(['ok' => false, 'error' => $check['error']], $check['status']); + } + + $data = $request->validate([ + 'items' => 'required|array', + 'items.*.emoji_slug' => 'required|string|max:120', + 'items.*.keyword' => 'required|string|max:200', + 'items.*.lang' => 'nullable|string|max:10', + ]); + + $count = 0; + $skipped = 0; + $user = $check['user']; + $limit = $this->keywordLimitFor($user); + $current = UserKeyword::where('user_id', $user->id)->count(); + foreach ($data['items'] as $row) { + $exists = UserKeyword::where('user_id', $user->id) + ->where('emoji_slug', $row['emoji_slug']) + ->where('keyword', $row['keyword']) + ->exists(); + + if (!$exists && $limit !== null && $current >= $limit) { + $skipped += 1; + continue; + } + UserKeyword::updateOrCreate( + [ + 'user_id' => $user->id, + 'emoji_slug' => $row['emoji_slug'], + 'keyword' => $row['keyword'], + ], + [ + 'lang' => $row['lang'] ?? 'und', + ] + ); + if (!$exists) { + $current += 1; + } + $count += 1; + } + + return response()->json(['ok' => true, 'imported' => $count, 'skipped' => $skipped]); + } + + private function keywordLimitFor($user): ?int + { + if ((string) ($user->tier ?? 'free') === 'personal') { + return null; + } + + return (int) config('dewemoji.pagination.free_max_limit', 20); + } +} diff --git a/app/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/app/Http/Controllers/Auth/AuthenticatedSessionController.php new file mode 100644 index 0000000..dbde383 --- /dev/null +++ b/app/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,47 @@ +authenticate(); + + $request->session()->regenerate(); + + return redirect()->intended(route('dashboard.overview', absolute: false)); + } + + /** + * Destroy an authenticated session. + */ + public function destroy(Request $request): RedirectResponse + { + Auth::guard('web')->logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + return redirect('/'); + } +} diff --git a/app/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/app/Http/Controllers/Auth/ConfirmablePasswordController.php new file mode 100644 index 0000000..d9459cc --- /dev/null +++ b/app/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -0,0 +1,40 @@ +validate([ + 'email' => $request->user()->email, + 'password' => $request->password, + ])) { + throw ValidationException::withMessages([ + 'password' => __('auth.password'), + ]); + } + + $request->session()->put('auth.password_confirmed_at', time()); + + return redirect()->intended(route('dashboard.overview', absolute: false)); + } +} diff --git a/app/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/app/Http/Controllers/Auth/EmailVerificationNotificationController.php new file mode 100644 index 0000000..6ff1f70 --- /dev/null +++ b/app/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -0,0 +1,24 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard.overview', absolute: false)); + } + + $request->user()->sendEmailVerificationNotification(); + + return back()->with('status', 'verification-link-sent'); + } +} diff --git a/app/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/app/Http/Controllers/Auth/EmailVerificationPromptController.php new file mode 100644 index 0000000..e7aca89 --- /dev/null +++ b/app/app/Http/Controllers/Auth/EmailVerificationPromptController.php @@ -0,0 +1,21 @@ +user()->hasVerifiedEmail() + ? redirect()->intended(route('dashboard.overview', absolute: false)) + : view('auth.verify-email'); + } +} diff --git a/app/app/Http/Controllers/Auth/NewPasswordController.php b/app/app/Http/Controllers/Auth/NewPasswordController.php new file mode 100644 index 0000000..e8368bd --- /dev/null +++ b/app/app/Http/Controllers/Auth/NewPasswordController.php @@ -0,0 +1,62 @@ + $request]); + } + + /** + * Handle an incoming new password request. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request): RedirectResponse + { + $request->validate([ + 'token' => ['required'], + 'email' => ['required', 'email'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function (User $user) use ($request) { + $user->forceFill([ + 'password' => Hash::make($request->password), + 'remember_token' => Str::random(60), + ])->save(); + + event(new PasswordReset($user)); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + return $status == Password::PASSWORD_RESET + ? redirect()->route('login')->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/app/Http/Controllers/Auth/PasswordController.php b/app/app/Http/Controllers/Auth/PasswordController.php new file mode 100644 index 0000000..6916409 --- /dev/null +++ b/app/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,29 @@ +validateWithBag('updatePassword', [ + 'current_password' => ['required', 'current_password'], + 'password' => ['required', Password::defaults(), 'confirmed'], + ]); + + $request->user()->update([ + 'password' => Hash::make($validated['password']), + ]); + + return back()->with('status', 'password-updated'); + } +} diff --git a/app/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/app/Http/Controllers/Auth/PasswordResetLinkController.php new file mode 100644 index 0000000..bf1ebfa --- /dev/null +++ b/app/app/Http/Controllers/Auth/PasswordResetLinkController.php @@ -0,0 +1,44 @@ +validate([ + 'email' => ['required', 'email'], + ]); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $status = Password::sendResetLink( + $request->only('email') + ); + + return $status == Password::RESET_LINK_SENT + ? back()->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/app/Http/Controllers/Auth/RegisteredUserController.php b/app/app/Http/Controllers/Auth/RegisteredUserController.php new file mode 100644 index 0000000..2773da2 --- /dev/null +++ b/app/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,54 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + ]); + + event(new Registered($user)); + if ($user instanceof MustVerifyEmail && ! $user->hasVerifiedEmail()) { + $user->sendEmailVerificationNotification(); + } + + Auth::login($user); + + return redirect(route('dashboard.overview', absolute: false)); + } +} diff --git a/app/app/Http/Controllers/Auth/VerifyEmailController.php b/app/app/Http/Controllers/Auth/VerifyEmailController.php new file mode 100644 index 0000000..2d695d6 --- /dev/null +++ b/app/app/Http/Controllers/Auth/VerifyEmailController.php @@ -0,0 +1,27 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard.overview', absolute: false).'?verified=1'); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + return redirect()->intended(route('dashboard.overview', absolute: false).'?verified=1'); + } +} diff --git a/app/app/Http/Controllers/Billing/PakasirController.php b/app/app/Http/Controllers/Billing/PakasirController.php new file mode 100644 index 0000000..2dff61a --- /dev/null +++ b/app/app/Http/Controllers/Billing/PakasirController.php @@ -0,0 +1,240 @@ +validate([ + 'plan_code' => 'required|string|in:personal_monthly,personal_annual,personal_lifetime', + ]); + + $user = $request->user(); + if (!$user) { + return response()->json(['error' => 'auth_required'], 401); + } + + $config = config('dewemoji.billing.providers.pakasir', []); + $enabled = (bool) ($config['enabled'] ?? false); + $apiBase = rtrim((string) ($config['api_base'] ?? ''), '/'); + $apiKey = (string) ($config['api_key'] ?? ''); + $project = (string) ($config['project'] ?? ''); + $timeout = (int) ($config['timeout'] ?? 10); + + if (!$enabled || $apiBase === '' || $apiKey === '' || $project === '') { + return response()->json(['error' => 'pakasir_not_configured'], 422); + } + + $amountIdr = $this->resolvePlanAmountIdr($data['plan_code']); + if ($amountIdr <= 0) { + return response()->json(['error' => 'invalid_plan_amount'], 422); + } + + Subscription::where('user_id', $user->id) + ->where('provider', 'pakasir') + ->where('status', 'pending') + ->update(['status' => 'cancelled']); + Order::where('user_id', $user->id) + ->where('provider', 'pakasir') + ->where('status', 'pending') + ->update(['status' => 'cancelled']); + Payment::where('user_id', $user->id) + ->where('provider', 'pakasir') + ->where('status', 'pending') + ->update(['status' => 'cancelled']); + + $order = Order::create([ + 'user_id' => $user->id, + 'plan_code' => $data['plan_code'], + 'type' => $data['plan_code'] === 'personal_lifetime' ? 'one_time' : 'subscription', + 'currency' => 'IDR', + 'amount' => $amountIdr, + 'status' => 'pending', + 'provider' => 'pakasir', + ]); + + $orderRef = 'DW-'.$order->id.'-'.now()->format('ymdHis'); + $payload = [ + 'project' => $project, + 'order_id' => $orderRef, + 'amount' => $amountIdr, + 'api_key' => $apiKey, + 'description' => 'Dewemoji '.$data['plan_code'].' for '.$user->email, + ]; + + $endpoint = $apiBase.'/api/transactioncreate/qris'; + $res = Http::timeout($timeout)->post($endpoint, $payload); + + if (!$res->ok()) { + Log::warning('Pakasir create transaction failed', ['body' => $res->body()]); + return response()->json(['error' => 'pakasir_create_failed'], 502); + } + + $body = $res->json(); + $payment = is_array($body['payment'] ?? null) ? $body['payment'] : $body; + $paymentNumber = (string) ($payment['payment_number'] ?? ''); + $status = (string) ($payment['status'] ?? 'pending'); + $expiredAt = (string) ($payment['expired_at'] ?? ''); + $totalPayment = (int) ($payment['total_payment'] ?? $amountIdr); + + $order->update([ + 'provider_ref' => $orderRef, + 'status' => $status === 'success' ? 'pending' : 'pending', + ]); + + Payment::create([ + 'user_id' => $user->id, + 'order_id' => $order->id, + 'provider' => 'pakasir', + 'type' => $data['plan_code'] === 'personal_lifetime' ? 'one_time' : 'subscription', + 'plan_code' => $data['plan_code'], + 'currency' => 'IDR', + 'amount' => $amountIdr, + 'status' => 'pending', + 'provider_ref' => $paymentNumber !== '' ? $paymentNumber : $orderRef, + 'raw_payload' => $body, + ]); + + return response()->json([ + 'ok' => true, + 'order_id' => $orderRef, + 'payment_number' => $paymentNumber, + 'amount' => $amountIdr, + 'total_payment' => $totalPayment, + 'expired_at' => $expiredAt, + 'status' => $status, + ]); + } + + public function cancelPending(Request $request): JsonResponse + { + $user = $request->user(); + if (!$user) { + return response()->json(['error' => 'auth_required'], 401); + } + + $orderRef = (string) $request->input('order_id', ''); + + $orderQuery = Order::where('user_id', $user->id) + ->where('provider', 'pakasir') + ->where('status', 'pending'); + + if ($orderRef !== '') { + $orderQuery->where('provider_ref', $orderRef); + } + + $order = $orderQuery->orderByDesc('id')->first(); + if (!$order) { + return response()->json(['ok' => true, 'cancelled' => false]); + } + + $order->update(['status' => 'cancelled']); + Payment::where('order_id', $order->id)->where('status', 'pending')->update(['status' => 'cancelled']); + Subscription::where('user_id', $user->id) + ->where('provider', 'pakasir') + ->where('status', 'pending') + ->update(['status' => 'cancelled']); + + return response()->json(['ok' => true, 'cancelled' => true]); + } + + public function webhook(Request $request): JsonResponse + { + $payload = $request->all(); + $eventId = (string) ($payload['id'] ?? $payload['event_id'] ?? Str::uuid()); + $eventType = (string) ($payload['event_type'] ?? $payload['status'] ?? 'event'); + + WebhookEvent::create([ + 'provider' => 'pakasir', + 'event_id' => $eventId, + 'event_type' => $eventType, + 'status' => 'received', + 'payload' => $payload, + 'headers' => $request->headers->all(), + 'received_at' => now(), + ]); + + $this->handlePakasirPayload($payload); + + return response()->json(['ok' => true]); + } + + private function handlePakasirPayload(array $payload): void + { + $status = strtolower((string) ($payload['status'] ?? '')); + if (!in_array($status, ['paid', 'success', 'settlement', 'completed'], true)) { + return; + } + + $orderId = (string) ($payload['order_id'] ?? ''); + if ($orderId === '') { + return; + } + + $order = Order::where('provider', 'pakasir')->where('provider_ref', $orderId)->first(); + if (!$order) { + return; + } + + $order->update(['status' => 'paid']); + Payment::where('order_id', $order->id)->update(['status' => 'paid']); + + $user = User::find($order->user_id); + if (!$user) { + return; + } + + $expiresAt = null; + if ($order->plan_code === 'personal_monthly') { + $expiresAt = now()->addMonth(); + } elseif ($order->plan_code === 'personal_annual') { + $expiresAt = now()->addYear(); + } + + Subscription::updateOrCreate( + [ + 'provider' => 'pakasir', + 'provider_ref' => $orderId, + ], + [ + 'user_id' => $user->id, + 'plan' => $order->plan_code, + 'status' => 'active', + 'started_at' => now(), + 'expires_at' => $expiresAt, + ] + ); + + User::where('id', $user->id)->update(['tier' => 'personal']); + } + + private function resolvePlanAmountIdr(string $planCode): int + { + $plan = PricingPlan::where('code', $planCode)->where('status', 'active')->first(); + if ($plan) { + return (int) $plan->amount; + } + + $defaults = collect(config('dewemoji.pricing.defaults', []))->keyBy('code'); + $fallback = $defaults->get($planCode); + if (!$fallback) { + return 0; + } + + return (int) ($fallback['amount'] ?? 0); + } +} diff --git a/app/app/Http/Controllers/Billing/PayPalController.php b/app/app/Http/Controllers/Billing/PayPalController.php new file mode 100644 index 0000000..36d49e8 --- /dev/null +++ b/app/app/Http/Controllers/Billing/PayPalController.php @@ -0,0 +1,336 @@ +validate([ + 'plan_code' => 'required|string|in:personal_monthly,personal_annual', + ]); + + $user = $request->user(); + if (!$user) { + return response()->json(['error' => 'auth_required'], 401); + } + + $mode = $this->billingMode(); + if (!$this->paypalConfigured($mode)) { + return response()->json(['error' => 'paypal_not_configured'], 422); + } + $planId = $this->resolvePlanId($data['plan_code'], $mode); + if (!$planId) { + return response()->json(['error' => 'paypal_plan_missing'], 422); + } + + $token = $this->getAccessToken($mode); + if (!$token) { + return response()->json(['error' => 'paypal_auth_failed'], 502); + } + + $appUrl = rtrim(config('app.url'), '/'); + $payload = [ + 'plan_id' => $planId, + 'subscriber' => [ + 'name' => [ + 'given_name' => $user->name ?? 'User', + 'surname' => 'Dewemoji', + ], + 'email_address' => $user->email, + ], + 'application_context' => [ + 'brand_name' => 'Dewemoji', + 'locale' => 'en-US', + 'user_action' => 'SUBSCRIBE_NOW', + 'return_url' => $appUrl.'/billing/paypal/return?status=success', + 'cancel_url' => $appUrl.'/billing/paypal/return?status=cancel', + ], + ]; + + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + $res = Http::withToken($token) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->post(rtrim($apiBase, '/').'/v1/billing/subscriptions', $payload); + + $body = $res->json(); + $subscriptionId = $body['id'] ?? null; + $approveUrl = collect($body['links'] ?? [])->firstWhere('rel', 'approve')['href'] ?? null; + + if (!$subscriptionId || !$approveUrl) { + if (!$res->ok()) { + Log::warning('PayPal create subscription failed', [ + 'status' => $res->status(), + 'body' => $res->body(), + ]); + } else { + Log::warning('PayPal create subscription missing approve link', [ + 'status' => $res->status(), + 'body' => $res->body(), + ]); + } + return response()->json(['error' => 'paypal_invalid_response'], 502); + } + + $amountUsd = $this->resolvePlanAmountUsd($data['plan_code']); + + Subscription::where('user_id', $user->id) + ->where('provider', 'paypal') + ->where('status', 'pending') + ->update(['status' => 'cancelled']); + Order::where('user_id', $user->id) + ->where('provider', 'paypal') + ->where('status', 'pending') + ->update(['status' => 'cancelled']); + Payment::where('user_id', $user->id) + ->where('provider', 'paypal') + ->where('status', 'pending') + ->update(['status' => 'cancelled']); + + $order = Order::create([ + 'user_id' => $user->id, + 'plan_code' => $data['plan_code'], + 'type' => 'subscription', + 'currency' => 'USD', + 'amount' => $amountUsd, + 'status' => 'pending', + 'provider' => 'paypal', + 'provider_ref' => $subscriptionId, + ]); + + Payment::create([ + 'user_id' => $user->id, + 'order_id' => $order->id, + 'provider' => 'paypal', + 'type' => 'subscription', + 'plan_code' => $data['plan_code'], + 'currency' => 'USD', + 'amount' => $amountUsd, + 'status' => 'pending', + 'provider_ref' => $subscriptionId, + 'raw_payload' => $body, + ]); + + Subscription::firstOrCreate([ + 'provider' => 'paypal', + 'provider_ref' => $subscriptionId, + ], [ + 'user_id' => $user->id, + 'plan' => $data['plan_code'], + 'status' => 'pending', + 'started_at' => now(), + ]); + + return response()->json(['approve_url' => $approveUrl]); + } + + public function return(Request $request): RedirectResponse + { + $status = (string) $request->query('status', 'success'); + return redirect()->route('dashboard.billing', ['status' => $status]); + } + + public function webhook(Request $request): JsonResponse + { + $payload = $request->all(); + $eventId = (string) ($payload['id'] ?? ''); + $eventType = (string) ($payload['event_type'] ?? ''); + + $mode = config('dewemoji.billing.mode', 'sandbox'); + $webhookId = config("dewemoji.billing.providers.paypal.webhook_ids.{$mode}"); + + if ($webhookId) { + $verified = $this->verifySignature($mode, $webhookId, $payload, $request); + if (!$verified) { + return response()->json(['error' => 'invalid_signature'], 401); + } + } + + $event = WebhookEvent::create([ + 'provider' => 'paypal', + 'event_id' => $eventId ?: (string) Str::uuid(), + 'event_type' => $eventType, + 'status' => 'received', + 'payload' => $payload, + 'headers' => $request->headers->all(), + 'received_at' => now(), + ]); + + try { + $processed = $this->processPayPalEvent($payload); + $event->update([ + 'status' => $processed ? 'processed' : 'received', + 'processed_at' => $processed ? now() : null, + ]); + } catch (\Throwable $e) { + $event->update([ + 'status' => 'error', + 'error' => $e->getMessage(), + 'processed_at' => now(), + ]); + } + + return response()->json(['ok' => true]); + } + + private function processPayPalEvent(array $payload): bool + { + $type = (string) ($payload['event_type'] ?? ''); + $resource = $payload['resource'] ?? []; + $subscriptionId = (string) ($resource['id'] ?? $resource['subscription_id'] ?? ''); + + if ($subscriptionId === '') { + return false; + } + + if ($type === 'BILLING.SUBSCRIPTION.ACTIVATED') { + $sub = Subscription::firstOrNew([ + 'provider' => 'paypal', + 'provider_ref' => $subscriptionId, + ]); + if (!$sub->user_id) { + $order = Order::where('provider', 'paypal')->where('provider_ref', $subscriptionId)->first(); + if ($order) { + $sub->user_id = $order->user_id; + } + } + $sub->status = 'active'; + $sub->started_at = $sub->started_at ?? now(); + $sub->next_renewal_at = $resource['billing_info']['next_billing_time'] ?? null; + $sub->save(); + + if ($sub->user_id) { + User::where('id', $sub->user_id)->update(['tier' => 'personal']); + } + + Order::where('provider', 'paypal')->where('provider_ref', $subscriptionId)->update(['status' => 'paid']); + Payment::where('provider', 'paypal')->where('provider_ref', $subscriptionId)->update(['status' => 'paid']); + + return true; + } + + if (in_array($type, ['BILLING.SUBSCRIPTION.CANCELLED', 'BILLING.SUBSCRIPTION.SUSPENDED'], true)) { + $sub = Subscription::where('provider', 'paypal')->where('provider_ref', $subscriptionId)->first(); + if ($sub) { + $sub->status = 'canceled'; + $sub->canceled_at = now(); + $sub->save(); + } + return true; + } + + return false; + } + + private function resolvePlanId(string $planCode, string $mode): ?string + { + $plan = PricingPlan::where('code', $planCode)->first(); + if ($plan) { + $meta = $plan->meta ?? []; + $stored = $meta['paypal'][$mode]['plan']['id'] ?? null; + if ($stored) { + return $stored; + } + } + + return config("dewemoji.billing.providers.paypal.plan_ids.{$mode}.{$planCode}") ?: null; + } + + private function resolvePlanAmountUsd(string $planCode): int + { + $plan = PricingPlan::where('code', $planCode)->first(); + if (!$plan) { + return 0; + } + $rate = (int) config('dewemoji.pricing.usd_rate', 15000); + if ($rate <= 0) { + return 0; + } + return (int) round($plan->amount / $rate); + } + + private function getAccessToken(string $mode): ?string + { + $clientId = config("dewemoji.billing.providers.paypal.{$mode}.client_id"); + $clientSecret = config("dewemoji.billing.providers.paypal.{$mode}.client_secret"); + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + + if (!$clientId || !$clientSecret || !$apiBase) { + return null; + } + + $res = Http::asForm() + ->withBasicAuth($clientId, $clientSecret) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->post(rtrim($apiBase, '/').'/v1/oauth2/token', [ + 'grant_type' => 'client_credentials', + ]); + + if (!$res->ok()) { + return null; + } + + return $res->json('access_token'); + } + + private function paypalConfigured(string $mode): bool + { + $enabled = (bool) config('dewemoji.billing.providers.paypal.enabled', false); + $clientId = config("dewemoji.billing.providers.paypal.{$mode}.client_id"); + $clientSecret = config("dewemoji.billing.providers.paypal.{$mode}.client_secret"); + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + + return $enabled && $clientId && $clientSecret && $apiBase; + } + + private function billingMode(): string + { + $settings = app(SettingsService::class); + return (string) ($settings->get('billing_mode', config('dewemoji.billing.mode', 'sandbox')) ?: 'sandbox'); + } + + private function verifySignature(string $mode, string $webhookId, array $payload, Request $request): bool + { + $token = $this->getAccessToken($mode); + if (!$token) { + return false; + } + + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + $verifyPayload = [ + 'auth_algo' => $request->header('paypal-auth-algo'), + 'cert_url' => $request->header('paypal-cert-url'), + 'transmission_id' => $request->header('paypal-transmission-id'), + 'transmission_sig' => $request->header('paypal-transmission-sig'), + 'transmission_time' => $request->header('paypal-transmission-time'), + 'webhook_id' => $webhookId, + 'webhook_event' => $payload, + ]; + + if (collect($verifyPayload)->contains(fn ($v) => empty($v))) { + return false; + } + + $res = Http::withToken($token) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->post(rtrim($apiBase, '/').'/v1/notifications/verify-webhook-signature', $verifyPayload); + + return $res->ok() && $res->json('verification_status') === 'SUCCESS'; + } +} diff --git a/app/app/Http/Controllers/Dashboard/AdminDashboardController.php b/app/app/Http/Controllers/Dashboard/AdminDashboardController.php new file mode 100644 index 0000000..439006c --- /dev/null +++ b/app/app/Http/Controllers/Dashboard/AdminDashboardController.php @@ -0,0 +1,688 @@ +query('q', '')); + $tier = trim((string) $request->query('tier', '')); + $role = trim((string) $request->query('role', '')); + $sort = $this->sanitizeSort($request->query('sort'), ['id', 'name', 'email', 'role', 'tier', 'created_at'], 'id'); + $dir = $this->sanitizeDir($request->query('dir')); + + $query = User::query(); + if ($q !== '') { + $query->where(function ($sub) use ($q): void { + $sub->where('email', 'like', '%'.$q.'%') + ->orWhere('name', 'like', '%'.$q.'%'); + }); + } + if ($tier !== '') { + $query->where('tier', $tier); + } + if ($role !== '') { + $query->where('role', $role); + } + + $users = $query->orderBy($sort, $dir)->paginate(20)->withQueryString(); + + return view('dashboard.admin.users', [ + 'users' => $users, + 'filters' => ['q' => $q, 'tier' => $tier, 'role' => $role], + 'sort' => $sort, + 'dir' => $dir, + ]); + } + + public function userDetail(User $user): View + { + $subscriptions = Subscription::where('user_id', $user->id)->orderByDesc('id')->get(); + + return view('dashboard.admin.user-show', [ + 'user' => $user, + 'subscriptions' => $subscriptions, + ]); + } + + public function updateUserTier(Request $request): RedirectResponse + { + $data = $request->validate([ + 'user_id' => 'required|integer', + 'tier' => 'required|string|in:free,personal', + ]); + + User::where('id', $data['user_id'])->update(['tier' => $data['tier']]); + if ($data['tier'] === 'free') { + UserApiKey::where('user_id', $data['user_id'])->update(['revoked_at' => now()]); + } + $this->logAdminAction('user_tier_update', $data); + + return back()->with('status', 'User tier updated.'); + } + + public function createUser(Request $request): RedirectResponse + { + $data = $request->validate([ + 'name' => 'nullable|string|max:120', + 'email' => 'required|email|max:255|unique:users,email', + 'password' => 'required|string|min:8|max:255', + 'role' => 'required|string|in:admin,user', + 'tier' => 'required|string|in:free,personal', + ]); + + $name = $data['name'] ?: strtok($data['email'], '@'); + + $user = User::create([ + 'name' => $name ?: 'User', + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + 'role' => $data['role'], + 'tier' => $data['tier'], + ]); + + $this->logAdminAction('user_created', [ + 'user_id' => $user->id, + 'email' => $user->email, + 'role' => $user->role, + 'tier' => $user->tier, + ]); + + return back()->with('status', 'User created.'); + } + + public function deleteUser(Request $request, User $user): RedirectResponse + { + $admin = $request->user(); + + if ($admin && $admin->id === $user->id) { + return back()->withErrors(['user' => 'You cannot delete your own account.']); + } + + if (($user->role ?? 'user') === 'admin' && User::where('role', 'admin')->count() <= 1) { + return back()->withErrors(['user' => 'Cannot delete the last admin account.']); + } + + DB::transaction(function () use ($user): void { + Payment::where('user_id', $user->id)->delete(); + Order::where('user_id', $user->id)->delete(); + Subscription::where('user_id', $user->id)->delete(); + UserApiKey::where('user_id', $user->id)->delete(); + UserKeyword::where('user_id', $user->id)->delete(); + DB::table('password_reset_tokens')->where('email', $user->email)->delete(); + $user->delete(); + }); + + $this->logAdminAction('user_deleted', [ + 'user_id' => $user->id, + 'email' => $user->email, + ]); + + return back()->with('status', 'User deleted.'); + } + + public function subscriptions(Request $request): View + { + $query = Subscription::query()->with('user:id,email,name,tier'); + $sort = $this->sanitizeSort($request->query('sort'), ['id', 'plan', 'status', 'started_at', 'expires_at', 'created_at'], 'id'); + $dir = $this->sanitizeDir($request->query('dir')); + + if ($userId = $request->query('user_id')) { + $query->where('user_id', (int) $userId); + } + if ($email = $request->query('email')) { + $query->whereHas('user', fn ($q) => $q->where('email', $email)); + } + if ($status = $request->query('status')) { + $query->where('status', (string) $status); + } + + $subscriptions = $query->orderBy($sort, $dir)->paginate(20)->withQueryString(); + + return view('dashboard.admin.subscriptions', [ + 'subscriptions' => $subscriptions, + 'filters' => [ + 'user_id' => $request->query('user_id'), + 'email' => $request->query('email'), + 'status' => $request->query('status'), + ], + 'sort' => $sort, + 'dir' => $dir, + ]); + } + + public function subscriptionDetail(Subscription $subscription): View + { + $subscription->loadMissing('user:id,name,email,tier,role'); + + return view('dashboard.admin.subscription-show', [ + 'subscription' => $subscription, + ]); + } + + public function grantSubscription(Request $request): RedirectResponse + { + $data = $request->validate([ + 'user_id' => 'nullable|integer', + 'email' => 'nullable|email|max:255', + 'plan' => 'required|string|max:20', + 'status' => 'required|string|in:active,pending,revoked', + 'provider' => 'nullable|string|max:20', + 'provider_ref' => 'nullable|string|max:100', + 'started_at' => 'nullable|date', + 'expires_at' => 'nullable|date', + ]); + + $user = $this->resolveUser($data['user_id'] ?? null, $data['email'] ?? null); + if (!$user) { + return back()->withErrors(['user' => 'User not found.']); + } + + $startedAt = $data['started_at'] ? Carbon::parse($data['started_at']) : now(); + $expiresAt = $data['expires_at'] ? Carbon::parse($data['expires_at']) : null; + + Subscription::create([ + 'user_id' => $user->id, + 'plan' => $data['plan'], + 'status' => $data['status'], + 'provider' => $data['provider'] ?? 'admin', + 'provider_ref' => $data['provider_ref'] ?? null, + 'started_at' => $startedAt, + 'expires_at' => $expiresAt, + ]); + + if ($data['status'] === 'active') { + $user->update(['tier' => 'personal']); + } + + $this->logAdminAction('subscription_grant', [ + 'user_id' => $user->id, + 'email' => $user->email, + 'plan' => $data['plan'], + 'status' => $data['status'], + ]); + + return back()->with('status', 'Subscription granted.'); + } + + public function revokeSubscription(Request $request): RedirectResponse + { + $data = $request->validate([ + 'subscription_id' => 'nullable|integer', + 'user_id' => 'nullable|integer', + 'email' => 'nullable|email|max:255', + ]); + + if (!empty($data['subscription_id'])) { + $sub = Subscription::find($data['subscription_id']); + if (!$sub) { + return back()->withErrors(['subscription' => 'Subscription not found.']); + } + $sub->update(['status' => 'revoked', 'expires_at' => now()]); + $this->syncUserTier($sub->user_id); + $this->logAdminAction('subscription_revoke', [ + 'subscription_id' => $sub->id, + 'user_id' => $sub->user_id, + ]); + return back()->with('status', 'Subscription revoked.'); + } + + $user = $this->resolveUser($data['user_id'] ?? null, $data['email'] ?? null); + if (!$user) { + return back()->withErrors(['user' => 'User not found.']); + } + + Subscription::where('user_id', $user->id) + ->where('status', 'active') + ->update(['status' => 'revoked', 'expires_at' => now()]); + $this->syncUserTier($user->id); + $this->logAdminAction('subscription_revoke_all', [ + 'user_id' => $user->id, + 'email' => $user->email, + ]); + + return back()->with('status', 'User subscriptions revoked.'); + } + + public function pricing(): View + { + $plans = PricingPlan::orderBy('id')->get(); + $changes = PricingChange::orderByDesc('id')->limit(5)->get(); + + return view('dashboard.admin.pricing', [ + 'plans' => $plans, + 'changes' => $changes, + ]); + } + + public function updatePricing(Request $request): RedirectResponse + { + $data = $request->validate([ + 'plans' => 'required|array|min:1', + 'plans.*.code' => 'required|string|max:30', + 'plans.*.name' => 'required|string|max:50', + 'plans.*.amount_idr' => 'required|integer|min:0', + 'plans.*.amount_usd' => 'nullable|numeric|min:0', + 'plans.*.period' => 'nullable|string|max:20', + 'plans.*.status' => 'nullable|string|max:20', + ]); + + $before = PricingPlan::orderBy('id')->get()->toArray(); + + DB::transaction(function () use ($data): void { + foreach ($data['plans'] as $plan) { + $meta = [ + 'prices' => [ + 'IDR' => (int) $plan['amount_idr'], + 'USD' => isset($plan['amount_usd']) ? (float) $plan['amount_usd'] : null, + ], + ]; + + PricingPlan::updateOrCreate( + ['code' => $plan['code']], + [ + 'name' => $plan['name'], + 'currency' => 'IDR', + 'amount' => (int) $plan['amount_idr'], + 'period' => $plan['period'] ?? null, + 'status' => $plan['status'] ?? 'active', + 'meta' => $meta, + ] + ); + } + }); + + $after = PricingPlan::orderBy('id')->get()->toArray(); + PricingChange::create([ + 'admin_ref' => (string) auth()->user()?->email, + 'before' => $before, + 'after' => $after, + ]); + $this->logAdminAction('pricing_update', ['plans' => count($data['plans'])]); + + return back()->with('status', 'Pricing updated.'); + } + + public function syncPaypalPlans(PayPalPlanSyncService $sync): RedirectResponse + { + $resultSandbox = $sync->sync('sandbox'); + $resultLive = $sync->sync('live'); + + $this->logAdminAction('paypal_plan_sync', [ + 'sandbox' => $resultSandbox, + 'live' => $resultLive, + ]); + + return back()->with('status', 'PayPal plans synced (sandbox + live).'); + } + + public function createPricingSnapshot(): RedirectResponse + { + $before = PricingPlan::orderBy('id')->get()->toArray(); + + PricingChange::create([ + 'admin_ref' => (string) auth()->user()?->email, + 'before' => $before, + 'after' => $before, + ]); + $this->logAdminAction('pricing_snapshot', ['plans' => count($before)]); + + return back()->with('status', 'Pricing snapshot created.'); + } + + public function resetPricing(): RedirectResponse + { + $defaults = config('dewemoji.pricing.defaults', []); + $before = PricingPlan::orderBy('id')->get()->toArray(); + + DB::transaction(function () use ($defaults): void { + PricingPlan::query()->delete(); + foreach ($defaults as $plan) { + PricingPlan::create([ + 'code' => $plan['code'], + 'name' => $plan['name'], + 'currency' => $plan['currency'], + 'amount' => $plan['amount'], + 'period' => $plan['period'], + 'status' => $plan['status'], + 'meta' => $plan['meta'] ?? null, + ]); + } + }); + + $after = PricingPlan::orderBy('id')->get()->toArray(); + PricingChange::create([ + 'admin_ref' => (string) auth()->user()?->email, + 'before' => $before, + 'after' => $after, + ]); + $this->logAdminAction('pricing_reset', ['plans' => count($after)]); + + return back()->with('status', 'Pricing reset to defaults.'); + } + + public function webhooks(Request $request): View + { + $query = WebhookEvent::query(); + $sort = $this->sanitizeSort($request->query('sort'), ['id', 'provider', 'status', 'received_at', 'created_at'], 'id'); + $dir = $this->sanitizeDir($request->query('dir')); + if ($provider = $request->query('provider')) { + $query->where('provider', (string) $provider); + } + if ($status = $request->query('status')) { + $query->where('status', (string) $status); + } + + $events = $query->orderBy($sort, $dir)->paginate(20)->withQueryString(); + $providers = WebhookEvent::query()->distinct('provider')->orderBy('provider')->pluck('provider'); + + return view('dashboard.admin.webhooks', [ + 'events' => $events, + 'filters' => [ + 'provider' => $request->query('provider'), + 'status' => $request->query('status'), + ], + 'providers' => $providers, + 'sort' => $sort, + 'dir' => $dir, + ]); + } + + public function webhookDetail(WebhookEvent $event): View + { + return view('dashboard.admin.webhook-show', [ + 'event' => $event, + ]); + } + + public function replayWebhook(int $id): RedirectResponse + { + $event = WebhookEvent::find($id); + if (!$event) { + return back()->withErrors(['webhook' => 'Webhook not found.']); + } + + $event->update(['status' => 'pending', 'processed_at' => null, 'error' => null]); + $this->logAdminAction('webhook_replay', ['event_id' => $event->id]); + + return back()->with('status', 'Webhook queued for replay.'); + } + + public function replayFailedWebhooks(): RedirectResponse + { + $count = WebhookEvent::where('status', 'error')->count(); + WebhookEvent::where('status', 'error')->update([ + 'status' => 'pending', + 'processed_at' => null, + 'error' => null, + ]); + $this->logAdminAction('webhook_replay_failed', ['count' => $count]); + + return back()->with('status', 'Failed webhooks queued for replay.'); + } + + public function settings(): View + { + $all = $this->settings->all(); + + return view('dashboard.admin.settings', [ + 'settings' => $all, + ]); + } + + public function auditLogs(Request $request): View + { + $q = trim((string) $request->query('q', '')); + $action = trim((string) $request->query('action', '')); + + $query = AdminAuditLog::query()->orderByDesc('id'); + if ($q !== '') { + $query->where(function ($sub) use ($q): void { + $sub->where('admin_email', 'like', '%'.$q.'%') + ->orWhere('action', 'like', '%'.$q.'%'); + }); + } + if ($action !== '') { + $query->where('action', $action); + } + + $actions = AdminAuditLog::query()->distinct('action')->orderBy('action')->pluck('action'); + $logs = $query->paginate(25)->withQueryString(); + + return view('dashboard.admin.audit-logs', [ + 'logs' => $logs, + 'filters' => ['q' => $q, 'action' => $action], + 'actions' => $actions, + ]); + } + + public function updateSettings(Request $request): RedirectResponse + { + $data = $request->validate([ + 'maintenance_enabled' => 'nullable|boolean', + 'public_enforce' => 'nullable|boolean', + 'public_origins' => 'nullable|string', + 'public_extension_ids' => 'nullable|string', + 'public_hourly_limit' => 'nullable|integer|min:0', + 'billing_mode' => 'nullable|string|in:sandbox,live', + ]); + + $payload = [ + 'maintenance_enabled' => (bool) ($data['maintenance_enabled'] ?? false), + 'public_enforce' => (bool) ($data['public_enforce'] ?? false), + 'public_origins' => $this->splitCsv($data['public_origins'] ?? ''), + 'public_extension_ids' => $this->splitCsv($data['public_extension_ids'] ?? ''), + 'public_hourly_limit' => (int) ($data['public_hourly_limit'] ?? 0), + 'billing_mode' => $data['billing_mode'] ?? null, + ]; + + $this->settings->setMany($payload, (string) auth()->user()?->email); + $this->logAdminAction('settings_update', $payload); + + return back()->with('status', 'Settings updated.'); + } + + private function resolveUser(?int $userId, ?string $email): ?User + { + if ($userId) { + return User::find($userId); + } + if ($email) { + return User::where('email', $email)->first(); + } + + return null; + } + + private function syncUserTier(int $userId): void + { + $active = Subscription::where('user_id', $userId) + ->where('status', 'active') + ->where(function ($q): void { + $q->whereNull('expires_at') + ->orWhere('expires_at', '>', now()); + }) + ->exists(); + + User::where('id', $userId)->update([ + 'tier' => $active ? 'personal' : 'free', + ]); + if (!$active) { + UserApiKey::where('user_id', $userId)->update(['revoked_at' => now()]); + } + } + + public function exportCsv(Request $request, string $type): StreamedResponse + { + $type = strtolower($type); + $filename = "dewemoji-{$type}-export-".now()->format('Ymd_His').".csv"; + + return response()->streamDownload(function () use ($type, $request): void { + $out = fopen('php://output', 'w'); + + if ($type === 'users') { + $q = trim((string) $request->query('q', '')); + $tier = trim((string) $request->query('tier', '')); + $role = trim((string) $request->query('role', '')); + $sort = $this->sanitizeSort($request->query('sort'), ['id', 'name', 'email', 'role', 'tier', 'created_at'], 'id'); + $dir = $this->sanitizeDir($request->query('dir')); + + $query = User::query(); + if ($q !== '') { + $query->where(function ($sub) use ($q): void { + $sub->where('email', 'like', '%'.$q.'%') + ->orWhere('name', 'like', '%'.$q.'%'); + }); + } + if ($tier !== '') { + $query->where('tier', $tier); + } + if ($role !== '') { + $query->where('role', $role); + } + + fputcsv($out, ['id', 'name', 'email', 'role', 'tier', 'created_at']); + $query->orderBy($sort, $dir)->chunk(500, function ($rows) use ($out): void { + foreach ($rows as $row) { + fputcsv($out, [ + $row->id, + $row->name, + $row->email, + $row->role, + $row->tier, + optional($row->created_at)->toDateTimeString(), + ]); + } + }); + } elseif ($type === 'subscriptions') { + $userId = $request->query('user_id'); + $email = $request->query('email'); + $status = $request->query('status'); + $sort = $this->sanitizeSort($request->query('sort'), ['id', 'plan', 'status', 'started_at', 'expires_at', 'created_at'], 'id'); + $dir = $this->sanitizeDir($request->query('dir')); + + $query = Subscription::query()->with('user:id,email'); + if ($userId) { + $query->where('user_id', (int) $userId); + } + if ($email) { + $query->whereHas('user', fn ($q) => $q->where('email', $email)); + } + if ($status) { + $query->where('status', (string) $status); + } + + fputcsv($out, ['id', 'user_id', 'email', 'plan', 'status', 'started_at', 'expires_at']); + $query->orderBy($sort, $dir)->chunk(500, function ($rows) use ($out): void { + foreach ($rows as $row) { + fputcsv($out, [ + $row->id, + $row->user_id, + $row->user?->email, + $row->plan, + $row->status, + optional($row->started_at)->toDateTimeString(), + optional($row->expires_at)->toDateTimeString(), + ]); + } + }); + } elseif ($type === 'webhooks') { + $provider = $request->query('provider'); + $status = $request->query('status'); + $sort = $this->sanitizeSort($request->query('sort'), ['id', 'provider', 'status', 'received_at', 'created_at'], 'id'); + $dir = $this->sanitizeDir($request->query('dir')); + + $query = WebhookEvent::query(); + if ($provider) { + $query->where('provider', (string) $provider); + } + if ($status) { + $query->where('status', (string) $status); + } + + fputcsv($out, ['id', 'provider', 'event_type', 'status', 'received_at', 'processed_at']); + $query->orderBy($sort, $dir)->chunk(500, function ($rows) use ($out): void { + foreach ($rows as $row) { + fputcsv($out, [ + $row->id, + $row->provider, + $row->event_type, + $row->status, + optional($row->received_at)->toDateTimeString(), + optional($row->processed_at)->toDateTimeString(), + ]); + } + }); + } else { + fputcsv($out, ['error']); + fputcsv($out, ['unsupported_export_type']); + } + + fclose($out); + }, $filename, [ + 'Content-Type' => 'text/csv; charset=UTF-8', + ]); + } + + private function logAdminAction(string $action, array $payload = []): void + { + if (!Schema::hasTable('admin_audit_logs')) { + return; + } + $user = auth()->user(); + AdminAuditLog::create([ + 'admin_id' => $user?->id, + 'admin_email' => $user?->email, + 'action' => $action, + 'payload' => $payload, + 'ip_address' => request()->ip(), + ]); + } + + private function sanitizeSort(mixed $value, array $allowed, string $fallback): string + { + $sort = is_string($value) ? $value : ''; + return in_array($sort, $allowed, true) ? $sort : $fallback; + } + + private function sanitizeDir(mixed $value): string + { + return $value === 'asc' ? 'asc' : 'desc'; + } + + /** + * @return array + */ + private function splitCsv(string $value): array + { + $items = array_filter(array_map('trim', explode(',', $value))); + return array_values($items); + } +} diff --git a/app/app/Http/Controllers/Dashboard/UserDashboardController.php b/app/app/Http/Controllers/Dashboard/UserDashboardController.php new file mode 100644 index 0000000..b2badc0 --- /dev/null +++ b/app/app/Http/Controllers/Dashboard/UserDashboardController.php @@ -0,0 +1,452 @@ +user(); + if (Gate::allows('admin')) { + $days = 7; + $start = now()->subDays($days - 1)->startOfDay(); + $labels = []; + $values = []; + $subsValues = []; + $webhookValues = []; + + $rawUsers = DB::table('users') + ->selectRaw('DATE(created_at) as day, COUNT(*) as total') + ->where('created_at', '>=', $start) + ->groupBy('day') + ->orderBy('day') + ->get() + ->keyBy('day'); + + $rawSubs = DB::table('subscriptions') + ->selectRaw('DATE(created_at) as day, COUNT(*) as total') + ->where('created_at', '>=', $start) + ->groupBy('day') + ->orderBy('day') + ->get() + ->keyBy('day'); + + $rawWebhooks = DB::table('webhook_events') + ->selectRaw('DATE(COALESCE(received_at, created_at)) as day, COUNT(*) as total') + ->where('created_at', '>=', $start) + ->groupBy('day') + ->orderBy('day') + ->get() + ->keyBy('day'); + + for ($i = $days - 1; $i >= 0; $i--) { + $date = Carbon::now()->subDays($i)->format('Y-m-d'); + $labels[] = Carbon::parse($date)->format('M d'); + $values[] = (int) ($rawUsers[$date]->total ?? 0); + $subsValues[] = (int) ($rawSubs[$date]->total ?? 0); + $webhookValues[] = (int) ($rawWebhooks[$date]->total ?? 0); + } + + $usersTotal = User::count(); + $usersPersonal = User::where('tier', 'personal')->count(); + $subscriptionsActive = Subscription::where('status', 'active')->count(); + $subscriptionsTotal = Subscription::count(); + $webhookTotal = WebhookEvent::count(); + $webhookErrors = WebhookEvent::where('status', 'error')->count(); + + return view('dashboard.index', [ + 'chartLabels' => $labels, + 'chartValues' => $values, + 'chartSubs' => $subsValues, + 'chartWebhooks' => $webhookValues, + 'overviewMetrics' => [ + 'users_total' => $usersTotal, + 'users_personal' => $usersPersonal, + 'subscriptions_active' => $subscriptionsActive, + 'subscriptions_total' => $subscriptionsTotal, + 'webhook_total' => $webhookTotal, + 'webhook_errors' => $webhookErrors, + ], + ]); + } + + $recentKeywords = UserKeyword::where('user_id', $user?->id) + ->orderByDesc('id') + ->limit(6) + ->get(); + + $recentWeekCount = UserKeyword::where('user_id', $user?->id) + ->where('created_at', '>=', now()->subDays(7)) + ->count(); + + $totalKeywords = UserKeyword::where('user_id', $user?->id)->count(); + $apiKeyCount = UserApiKey::where('user_id', $user?->id) + ->whereNull('revoked_at') + ->count(); + + $activeSubscription = Subscription::where('user_id', $user?->id) + ->orderByDesc('started_at') + ->first(); + + return view('dashboard.user.overview', [ + 'totalKeywords' => $totalKeywords, + 'recentKeywords' => $recentKeywords, + 'recentWeekCount' => $recentWeekCount, + 'apiKeyCount' => $apiKeyCount, + 'subscription' => $activeSubscription, + ]); + } + + public function keywords(Request $request): View + { + $user = $request->user(); + + $items = UserKeyword::where('user_id', $user?->id) + ->orderByDesc('id') + ->get(); + + $emojiLookup = []; + $dataPath = (string) config('dewemoji.data_path'); + if (is_file($dataPath)) { + $raw = file_get_contents($dataPath); + $decoded = json_decode((string) $raw, true); + if (is_array($decoded)) { + foreach ($decoded['emojis'] ?? [] as $row) { + $slug = (string) ($row['slug'] ?? ''); + if ($slug !== '') { + $emojiLookup[$slug] = [ + 'emoji' => (string) ($row['emoji'] ?? ''), + 'name' => (string) ($row['name'] ?? $slug), + ]; + } + } + } + } + + return view('dashboard.user.keywords', [ + 'items' => $items, + 'user' => $user, + 'emojiLookup' => $emojiLookup, + 'freeLimit' => $this->keywordLimitFor($user), + ]); + } + + public function keywordSearch(Request $request, EmojiApiController $emoji): JsonResponse + { + $request->query->set('private', 'true'); + + return $emoji->search($request); + } + + public function storeKeyword(Request $request): RedirectResponse|JsonResponse + { + $user = $request->user(); + if (!$user) { + abort(403); + } + + $data = $request->validate([ + 'emoji_slug' => 'required|string|max:120', + 'keyword' => 'required|string|max:200', + 'lang' => 'nullable|string|max:10', + ]); + + if ($limit = $this->keywordLimitFor($user)) { + $exists = UserKeyword::where('user_id', $user->id) + ->where('emoji_slug', $data['emoji_slug']) + ->where('keyword', $data['keyword']) + ->exists(); + + if (!$exists) { + $count = UserKeyword::where('user_id', $user->id)->count(); + if ($count >= $limit) { + return $this->rejectKeywordLimit($request, $limit); + } + } + } + + $item = UserKeyword::updateOrCreate( + [ + 'user_id' => $user->id, + 'emoji_slug' => $data['emoji_slug'], + 'keyword' => $data['keyword'], + ], + [ + 'lang' => $data['lang'] ?? 'und', + ] + ); + + if ($request->expectsJson()) { + return response()->json(['ok' => true, 'item' => $item]); + } + + return back()->with('status', 'Keyword saved.'); + } + + public function updateKeyword(Request $request, UserKeyword $keyword): RedirectResponse|JsonResponse + { + $user = $request->user(); + if (!$user) { + abort(403); + } + + if ($keyword->user_id !== $user->id) { + abort(403); + } + + $data = $request->validate([ + 'emoji_slug' => 'required|string|max:120', + 'keyword' => 'required|string|max:200', + 'lang' => 'nullable|string|max:10', + ]); + + $duplicate = UserKeyword::where('user_id', $user->id) + ->where('emoji_slug', $data['emoji_slug']) + ->where('keyword', $data['keyword']) + ->first(); + + if ($duplicate && $duplicate->id !== $keyword->id) { + $keyword->delete(); + $keyword = $duplicate; + } else { + $keyword->update([ + 'emoji_slug' => $data['emoji_slug'], + 'keyword' => $data['keyword'], + 'lang' => $data['lang'] ?? 'und', + ]); + } + + if ($request->expectsJson()) { + return response()->json(['ok' => true, 'item' => $keyword]); + } + + return back()->with('status', 'Keyword updated.'); + } + + public function deleteKeyword(Request $request, UserKeyword $keyword): RedirectResponse|JsonResponse + { + $user = $request->user(); + if (!$user) { + abort(403); + } + + if ($keyword->user_id !== $user->id) { + abort(403); + } + + $keyword->delete(); + + if ($request->expectsJson()) { + return response()->json(['ok' => true]); + } + + return back()->with('status', 'Keyword removed.'); + } + + public function importKeywords(Request $request): RedirectResponse + { + $user = $request->user(); + if (!$user) { + abort(403); + } + + $payload = $request->input('payload'); + if ($request->hasFile('file')) { + $payload = $request->file('file')->get(); + } + + $items = json_decode((string) $payload, true); + if (!is_array($items)) { + return back()->withErrors(['payload' => 'Invalid JSON payload.']); + } + + $imported = 0; + $skipped = 0; + $limit = $this->keywordLimitFor($user); + $current = UserKeyword::where('user_id', $user->id)->count(); + foreach ($items as $row) { + if (!is_array($row)) { + continue; + } + $emojiSlug = trim((string) ($row['emoji_slug'] ?? '')); + $keyword = trim((string) ($row['keyword'] ?? '')); + $lang = trim((string) ($row['lang'] ?? 'und')); + if ($emojiSlug === '' || $keyword === '') { + continue; + } + $exists = UserKeyword::where('user_id', $user->id) + ->where('emoji_slug', $emojiSlug) + ->where('keyword', $keyword) + ->exists(); + + if (!$exists && $limit !== null && $current >= $limit) { + $skipped += 1; + continue; + } + + UserKeyword::updateOrCreate( + [ + 'user_id' => $user->id, + 'emoji_slug' => $emojiSlug, + 'keyword' => $keyword, + ], + [ + 'lang' => $lang !== '' ? $lang : 'und', + ] + ); + if (!$exists) { + $current += 1; + } + $imported += 1; + } + + $message = "Imported {$imported} keywords."; + if ($skipped > 0) { + $message .= " {$skipped} skipped (free limit reached)."; + } + + return back()->with('status', $message); + } + + public function exportKeywords(Request $request): BinaryFileResponse + { + $user = $request->user(); + if (!$user) { + abort(403); + } + + $items = UserKeyword::where('user_id', $user->id) + ->orderByDesc('id') + ->get(['emoji_slug', 'keyword', 'lang']) + ->values() + ->toJson(JSON_PRETTY_PRINT); + + $filename = 'dewemoji-keywords-'.$user->id.'-'.now()->format('Ymd-His').'.json'; + $path = storage_path('app/'.$filename); + file_put_contents($path, $items); + + return response()->download($path, $filename)->deleteFileAfterSend(true); + } + + public function apiKeys(Request $request): View + { + $user = $request->user(); + $keys = UserApiKey::where('user_id', $user?->id) + ->orderByDesc('id') + ->get(); + $canCreate = $user && (string) $user->tier === 'personal'; + + return view('dashboard.user.api-keys', [ + 'user' => $user, + 'keys' => $keys, + 'canCreate' => $canCreate, + 'newKey' => session('new_api_key'), + ]); + } + + public function createApiKey(Request $request): RedirectResponse + { + $user = $request->user(); + if (!$user) { + abort(403); + } + if ((string) $user->tier !== 'personal') { + return back()->withErrors(['api_key' => 'API keys are available on the Personal plan.']); + } + + $data = $request->validate([ + 'name' => 'nullable|string|max:100', + ]); + + $issued = $this->keys->issueKey($user, $data['name'] ?? null); + + return back()->with('new_api_key', $issued['plain']); + } + + public function revokeApiKey(Request $request, UserApiKey $key): RedirectResponse + { + $user = $request->user(); + if (!$user || $key->user_id !== $user->id) { + abort(403); + } + + $key->update(['revoked_at' => Carbon::now()]); + + return back()->with('status', 'API key revoked.'); + } + + public function billing(Request $request): View + { + $user = $request->user(); + $subscription = Subscription::where('user_id', $user?->id) + ->orderByDesc('started_at') + ->first(); + + $orders = Order::where('user_id', $user?->id) + ->orderByDesc('id') + ->limit(5) + ->get(); + + $payments = Payment::where('user_id', $user?->id) + ->orderByDesc('id') + ->limit(5) + ->get(); + + return view('dashboard.user.billing', [ + 'subscription' => $subscription, + 'user' => $user, + 'orders' => $orders, + 'payments' => $payments, + ]); + } + + public function preferences(Request $request): View + { + return view('dashboard.user.preferences'); + } + + private function rejectKeywordLimit(Request $request, int $limit): RedirectResponse|JsonResponse + { + if ($request->expectsJson()) { + return response()->json(['ok' => false, 'error' => 'free_limit_reached', 'limit' => $limit], 403); + } + + return back()->withErrors(['tier' => "Free plan limit reached ({$limit} keywords)."]); + } + + private function keywordLimitFor(?User $user): ?int + { + if (!$user) { + return null; + } + if ((string) $user->tier === 'personal') { + return null; + } + + return (int) config('dewemoji.pagination.free_max_limit', 20); + } +} diff --git a/app/app/Http/Controllers/ProfileController.php b/app/app/Http/Controllers/ProfileController.php new file mode 100644 index 0000000..b4f25af --- /dev/null +++ b/app/app/Http/Controllers/ProfileController.php @@ -0,0 +1,66 @@ + $request->user(), + ]); + } + + /** + * Update the user's profile information. + */ + public function update(ProfileUpdateRequest $request): RedirectResponse + { + $request->user()->fill($request->validated()); + + $emailChanged = $request->user()->isDirty('email'); + if ($emailChanged) { + $request->user()->email_verified_at = null; + } + + $request->user()->save(); + + if ($emailChanged && $request->user() instanceof MustVerifyEmail) { + $request->user()->sendEmailVerificationNotification(); + } + + return Redirect::route('profile.edit')->with('status', 'profile-updated'); + } + + /** + * Delete the user's account. + */ + public function destroy(Request $request): RedirectResponse + { + $request->validateWithBag('userDeletion', [ + 'password' => ['required', 'current_password'], + ]); + + $user = $request->user(); + + Auth::logout(); + + $user->delete(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return Redirect::to('/'); + } +} diff --git a/app/app/Http/Controllers/Web/SiteController.php b/app/app/Http/Controllers/Web/SiteController.php index 3a5cbd7..108fe32 100644 --- a/app/app/Http/Controllers/Web/SiteController.php +++ b/app/app/Http/Controllers/Web/SiteController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers\Web; use App\Http\Controllers\Controller; +use App\Models\PricingPlan; +use App\Models\UserKeyword; +use App\Services\System\SettingsService; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; @@ -23,6 +26,12 @@ class SiteController extends Controller 'Flags' => 'flags', ]; + private function billingMode(): string + { + $settings = app(SettingsService::class); + return (string) ($settings->get('billing_mode', config('dewemoji.billing.mode', 'sandbox')) ?: 'sandbox'); + } + public function home(Request $request): View { return view('site.home', [ @@ -30,6 +39,7 @@ class SiteController extends Controller 'initialCategory' => trim((string) $request->query('category', '')), 'initialSubcategory' => trim((string) $request->query('subcategory', '')), 'canonicalPath' => '/', + 'userTier' => $request->user()?->tier, ]); } @@ -45,19 +55,21 @@ class SiteController extends Controller 'initialCategory' => trim((string) $request->query('category', '')), 'initialSubcategory' => trim((string) $request->query('subcategory', '')), 'canonicalPath' => '/browse', + 'userTier' => $request->user()?->tier, ]); } public function category(string $categorySlug): View { if ($categorySlug === 'all') { - return view('site.home', [ - 'initialQuery' => '', - 'initialCategory' => '', - 'initialSubcategory' => '', - 'canonicalPath' => '/', - ]); - } + return view('site.home', [ + 'initialQuery' => '', + 'initialCategory' => '', + 'initialSubcategory' => '', + 'canonicalPath' => '/', + 'userTier' => request()->user()?->tier, + ]); + } $categoryLabel = $this->categorySlugMap()[$categorySlug] ?? ''; abort_if($categoryLabel === '', 404); @@ -67,6 +79,7 @@ class SiteController extends Controller 'initialCategory' => $categoryLabel, 'initialSubcategory' => '', 'canonicalPath' => '/'.$categorySlug, + 'userTier' => request()->user()?->tier, ]); } @@ -84,6 +97,7 @@ class SiteController extends Controller 'initialCategory' => $categoryLabel, 'initialSubcategory' => $subcategorySlug, 'canonicalPath' => '/'.$categorySlug.'/'.$subcategorySlug, + 'userTier' => request()->user()?->tier, ]); } @@ -94,7 +108,96 @@ class SiteController extends Controller public function pricing(): View { - return view('site.pricing'); + $currencyPref = strtoupper((string) session('pricing_currency', '')); + if (!in_array($currencyPref, ['IDR', 'USD'], true)) { + $currencyPref = $this->detectPricingCurrency(request()); + session(['pricing_currency' => $currencyPref]); + } + + $rate = (int) config('dewemoji.pricing.usd_rate', 15000); + $plans = PricingPlan::where('status', 'active')->get()->keyBy('code'); + $defaults = config('dewemoji.pricing.defaults', []); + $fallback = collect($defaults)->keyBy('code'); + + $getPlanAmount = function (string $code) use ($plans, $fallback): int { + $plan = $plans->get($code) ?? $fallback->get($code); + return (int) ($plan['amount'] ?? $plan->amount ?? 0); + }; + + $pricing = [ + 'personal_monthly' => [ + 'idr' => $getPlanAmount('personal_monthly'), + ], + 'personal_annual' => [ + 'idr' => $getPlanAmount('personal_annual'), + ], + 'personal_lifetime' => [ + 'idr' => $getPlanAmount('personal_lifetime'), + ], + ]; + + foreach ($pricing as $key => $row) { + $pricing[$key]['usd'] = $rate > 0 ? round($row['idr'] / $rate, 2) : 0; + } + + return view('site.pricing', [ + 'currencyPref' => $currencyPref, + 'usdRate' => $rate, + 'pricing' => $pricing, + 'payments' => [ + 'qris_url' => (string) config('dewemoji.payments.qris_url', ''), + 'paypal_url' => (string) config('dewemoji.payments.paypal_url', ''), + ], + 'pakasirEnabled' => (bool) config('dewemoji.billing.providers.pakasir.enabled', false) + && (string) config('dewemoji.billing.providers.pakasir.api_base', '') !== '' + && (string) config('dewemoji.billing.providers.pakasir.api_key', '') !== '' + && (string) config('dewemoji.billing.providers.pakasir.project', '') !== '', + 'paypalEnabled' => $this->paypalEnabled($this->billingMode()), + 'paypalPlans' => $this->paypalPlanAvailability($this->billingMode()), + ]); + } + + private function paypalEnabled(string $mode): bool + { + $enabled = (bool) config('dewemoji.billing.providers.paypal.enabled', false); + $clientId = (string) config("dewemoji.billing.providers.paypal.{$mode}.client_id", ''); + $clientSecret = (string) config("dewemoji.billing.providers.paypal.{$mode}.client_secret", ''); + $apiBase = (string) config("dewemoji.billing.providers.paypal.{$mode}.api_base", ''); + + return $enabled && $clientId !== '' && $clientSecret !== '' && $apiBase !== ''; + } + + private function paypalPlanAvailability(string $mode): array + { + $plans = PricingPlan::whereIn('code', ['personal_monthly', 'personal_annual'])->get()->keyBy('code'); + + $fromDb = function (string $code) use ($plans, $mode): bool { + $plan = $plans->get($code); + if (!$plan) { + return false; + } + $meta = $plan->meta ?? []; + return (string) ($meta['paypal'][$mode]['plan']['id'] ?? '') !== ''; + }; + + $fromEnv = function (string $code) use ($mode): bool { + return (string) config("dewemoji.billing.providers.paypal.plan_ids.{$mode}.{$code}", '') !== ''; + }; + + return [ + 'personal_monthly' => $fromDb('personal_monthly') || $fromEnv('personal_monthly'), + 'personal_annual' => $fromDb('personal_annual') || $fromEnv('personal_annual'), + ]; + } + + public function setPricingCurrency(Request $request): RedirectResponse + { + $data = $request->validate([ + 'currency' => 'required|string|in:IDR,USD', + ]); + + session(['pricing_currency' => $data['currency']]); + return back(); } public function support(): View @@ -112,6 +215,18 @@ class SiteController extends Controller return view('site.terms'); } + private function detectPricingCurrency(Request $request): string + { + $country = strtoupper((string) ($request->header('CF-IPCountry') + ?? $request->header('X-Country-Code') + ?? $request->header('X-Geo-Country') + ?? $request->header('X-Appengine-Country') + ?? $request->header('CloudFront-Viewer-Country') + ?? '')); + + return $country === 'ID' ? 'IDR' : 'USD'; + } + public function emojiDetail(string $slug): View|Response { $dataPath = (string) config('dewemoji.data_path'); @@ -157,10 +272,22 @@ class SiteController extends Controller ]; } + $user = request()->user(); + $isPersonal = $user && (string) $user->tier === 'personal'; + $userKeywords = []; + if ($isPersonal) { + $userKeywords = UserKeyword::where('user_id', $user->id) + ->where('emoji_slug', $slug) + ->orderByDesc('id') + ->get(); + } + return view('site.emoji-detail', [ 'emoji' => $match, 'relatedDetails' => $relatedDetails, 'canonicalPath' => '/emoji/'.$slug, + 'userKeywords' => $userKeywords, + 'userTier' => $user?->tier, ]); } diff --git a/app/app/Http/Requests/Auth/LoginRequest.php b/app/app/Http/Requests/Auth/LoginRequest.php new file mode 100644 index 0000000..2574642 --- /dev/null +++ b/app/app/Http/Requests/Auth/LoginRequest.php @@ -0,0 +1,85 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => ['required', 'string', 'email'], + 'password' => ['required', 'string'], + ]; + } + + /** + * Attempt to authenticate the request's credentials. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function authenticate(): void + { + $this->ensureIsNotRateLimited(); + + if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the login request is not rate limited. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function ensureIsNotRateLimited(): void + { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout($this)); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the rate limiting throttle key for the request. + */ + public function throttleKey(): string + { + return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); + } +} diff --git a/app/app/Http/Requests/ProfileUpdateRequest.php b/app/app/Http/Requests/ProfileUpdateRequest.php new file mode 100644 index 0000000..3622a8f --- /dev/null +++ b/app/app/Http/Requests/ProfileUpdateRequest.php @@ -0,0 +1,30 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => ['required', 'string', 'max:255'], + 'email' => [ + 'required', + 'string', + 'lowercase', + 'email', + 'max:255', + Rule::unique(User::class)->ignore($this->user()->id), + ], + ]; + } +} diff --git a/app/app/Mail/MailketingTransport.php b/app/app/Mail/MailketingTransport.php new file mode 100644 index 0000000..6ca48d3 --- /dev/null +++ b/app/app/Mail/MailketingTransport.php @@ -0,0 +1,88 @@ +getOriginalMessage(); + + if (! $email instanceof Email) { + throw new TransportException('Mailketing transport only supports Symfony Email messages.'); + } + + if ($email->getAttachments()) { + throw new TransportException('Mailketing transport does not support attachments without URL references.'); + } + + $from = $email->getFrom()[0] ?? null; + $fromName = $from?->getName() ?: $this->defaultFromName ?: ''; + $fromEmail = $from?->getAddress() ?: $this->defaultFromEmail ?: ''; + + if ($fromEmail === '') { + throw new TransportException('Mailketing transport requires a from email address.'); + } + + $subject = $email->getSubject() ?? ''; + $content = $email->getHtmlBody() ?? $email->getTextBody() ?? ''; + + $recipients = array_merge( + $email->getTo(), + $email->getCc(), + $email->getBcc(), + ); + + if ($recipients === []) { + throw new TransportException('Mailketing transport requires at least one recipient.'); + } + + foreach ($recipients as $recipient) { + $response = Http::asForm() + ->timeout($this->timeoutSeconds) + ->post($this->endpoint, [ + 'api_token' => $this->apiToken, + 'from_name' => $fromName, + 'from_email' => $fromEmail, + 'recipient' => $recipient->getAddress(), + 'subject' => $subject, + 'content' => $content, + ]); + + if (! $response->ok()) { + throw new TransportException(sprintf( + 'Mailketing request failed (%s): %s', + $response->status(), + $response->body() + )); + } + + $payload = $response->json(); + if (is_array($payload) && (($payload['status'] ?? null) !== 'success')) { + $detail = $payload['response'] ?? $payload['message'] ?? 'unknown'; + throw new TransportException('Mailketing responded with an error: '.$detail); + } + } + } +} diff --git a/app/app/Mail/TestMailketing.php b/app/app/Mail/TestMailketing.php new file mode 100644 index 0000000..f23e78d --- /dev/null +++ b/app/app/Mail/TestMailketing.php @@ -0,0 +1,23 @@ +subject('Dewemoji test email') + ->view('emails.test', [ + 'actionUrl' => $actionUrl, + ]); + } +} diff --git a/app/app/Models/AdminAuditLog.php b/app/app/Models/AdminAuditLog.php new file mode 100644 index 0000000..ebf9add --- /dev/null +++ b/app/app/Models/AdminAuditLog.php @@ -0,0 +1,20 @@ + 'array', + ]; +} diff --git a/app/app/Models/Order.php b/app/app/Models/Order.php new file mode 100644 index 0000000..be10121 --- /dev/null +++ b/app/app/Models/Order.php @@ -0,0 +1,31 @@ +belongsTo(User::class); + } + + public function payments(): HasMany + { + return $this->hasMany(Payment::class); + } +} diff --git a/app/app/Models/Payment.php b/app/app/Models/Payment.php new file mode 100644 index 0000000..2677310 --- /dev/null +++ b/app/app/Models/Payment.php @@ -0,0 +1,36 @@ + 'array', + ]; + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + public function order(): BelongsTo + { + return $this->belongsTo(Order::class); + } +} diff --git a/app/app/Models/PricingChange.php b/app/app/Models/PricingChange.php new file mode 100644 index 0000000..4a752f7 --- /dev/null +++ b/app/app/Models/PricingChange.php @@ -0,0 +1,19 @@ + 'array', + 'after' => 'array', + ]; +} diff --git a/app/app/Models/PricingPlan.php b/app/app/Models/PricingPlan.php new file mode 100644 index 0000000..ea36cf8 --- /dev/null +++ b/app/app/Models/PricingPlan.php @@ -0,0 +1,23 @@ + 'integer', + 'meta' => 'array', + ]; +} diff --git a/app/app/Models/Setting.php b/app/app/Models/Setting.php new file mode 100644 index 0000000..c246532 --- /dev/null +++ b/app/app/Models/Setting.php @@ -0,0 +1,18 @@ + 'array', + ]; +} diff --git a/app/app/Models/Subscription.php b/app/app/Models/Subscription.php new file mode 100644 index 0000000..c75d391 --- /dev/null +++ b/app/app/Models/Subscription.php @@ -0,0 +1,33 @@ + 'datetime', + 'expires_at' => 'datetime', + 'canceled_at' => 'datetime', + 'next_renewal_at' => 'datetime', + ]; + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } +} diff --git a/app/app/Models/User.php b/app/app/Models/User.php index 749c7b7..5edeb1f 100644 --- a/app/app/Models/User.php +++ b/app/app/Models/User.php @@ -2,15 +2,18 @@ namespace App\Models; -// use Illuminate\Contracts\Auth\MustVerifyEmail; +use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract; +use Illuminate\Auth\MustVerifyEmail; +use App\Notifications\ResetPasswordNotification; +use App\Notifications\VerifyEmailNotification; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; -class User extends Authenticatable +class User extends Authenticatable implements MustVerifyEmailContract { /** @use HasFactory<\Database\Factories\UserFactory> */ - use HasFactory, Notifiable; + use HasFactory, Notifiable, MustVerifyEmail; /** * The attributes that are mass assignable. @@ -21,6 +24,8 @@ class User extends Authenticatable 'name', 'email', 'password', + 'role', + 'tier', ]; /** @@ -45,4 +50,19 @@ class User extends Authenticatable 'password' => 'hashed', ]; } + + public function isAdmin(): bool + { + return $this->role === 'admin'; + } + + public function sendEmailVerificationNotification(): void + { + $this->notify(new VerifyEmailNotification()); + } + + public function sendPasswordResetNotification($token): void + { + $this->notify(new ResetPasswordNotification($token)); + } } diff --git a/app/app/Models/UserApiKey.php b/app/app/Models/UserApiKey.php new file mode 100644 index 0000000..b899d68 --- /dev/null +++ b/app/app/Models/UserApiKey.php @@ -0,0 +1,28 @@ + 'datetime', + 'revoked_at' => 'datetime', + ]; + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } +} diff --git a/app/app/Models/UserKeyword.php b/app/app/Models/UserKeyword.php new file mode 100644 index 0000000..098a951 --- /dev/null +++ b/app/app/Models/UserKeyword.php @@ -0,0 +1,21 @@ +belongsTo(User::class); + } +} diff --git a/app/app/Models/WebhookEvent.php b/app/app/Models/WebhookEvent.php new file mode 100644 index 0000000..cc4f5f9 --- /dev/null +++ b/app/app/Models/WebhookEvent.php @@ -0,0 +1,27 @@ + 'array', + 'headers' => 'array', + 'received_at' => 'datetime', + 'processed_at' => 'datetime', + ]; +} diff --git a/app/app/Notifications/ResetPasswordNotification.php b/app/app/Notifications/ResetPasswordNotification.php new file mode 100644 index 0000000..97b0e4b --- /dev/null +++ b/app/app/Notifications/ResetPasswordNotification.php @@ -0,0 +1,20 @@ +resetUrl($notifiable); + + return (new MailMessage) + ->subject('Reset your password') + ->view('emails.reset-password', [ + 'resetUrl' => $resetUrl, + ]); + } +} diff --git a/app/app/Notifications/VerifyEmailNotification.php b/app/app/Notifications/VerifyEmailNotification.php new file mode 100644 index 0000000..9dbbf64 --- /dev/null +++ b/app/app/Notifications/VerifyEmailNotification.php @@ -0,0 +1,20 @@ +verificationUrl($notifiable); + + return (new MailMessage) + ->subject('Verify your email') + ->view('emails.verify-email', [ + 'verificationUrl' => $verificationUrl, + ]); + } +} diff --git a/app/app/Providers/AppServiceProvider.php b/app/app/Providers/AppServiceProvider.php index 452e6b6..08a8ada 100644 --- a/app/app/Providers/AppServiceProvider.php +++ b/app/app/Providers/AppServiceProvider.php @@ -3,6 +3,9 @@ namespace App\Providers; use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Facades\Gate; +use Illuminate\Support\Facades\Mail; +use App\Mail\MailketingTransport; class AppServiceProvider extends ServiceProvider { @@ -19,6 +22,18 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { - // + Gate::define('admin', function ($user) { + return $user && method_exists($user, 'isAdmin') ? $user->isAdmin() : false; + }); + + Mail::extend('mailketing', function (array $config) { + return new MailketingTransport( + apiToken: (string) ($config['token'] ?? ''), + endpoint: (string) ($config['endpoint'] ?? 'https://api.mailketing.co.id/api/v1/send'), + defaultFromName: config('mail.from.name'), + defaultFromEmail: config('mail.from.address'), + timeoutSeconds: (int) ($config['timeout'] ?? 10), + ); + }); } } diff --git a/app/app/Services/Auth/ApiKeyService.php b/app/app/Services/Auth/ApiKeyService.php new file mode 100644 index 0000000..69a01b5 --- /dev/null +++ b/app/app/Services/Auth/ApiKeyService.php @@ -0,0 +1,76 @@ +header('Authorization', '')); + if (str_starts_with($auth, 'Bearer ')) { + return trim(substr($auth, 7)); + } + + return trim((string) $request->header('X-Api-Key', '')); + } + + public function hashKey(string $key): string + { + return hash('sha256', $key); + } + + public function prefix(string $key): string + { + return substr($key, 0, 8); + } + + public function resolveUser(Request $request): ?User + { + $key = $this->parseKey($request); + if ($key === '') { + return null; + } + + $record = UserApiKey::where('key_hash', $this->hashKey($key)) + ->whereNull('revoked_at') + ->first(); + + if (!$record) { + return null; + } + + $record->last_used_at = Carbon::now(); + $record->save(); + + $user = $record->user; + if (!$user || (string) $user->tier !== 'personal') { + return null; + } + + return $user; + } + + public function issueKey(User $user, ?string $name = null): array + { + $plain = 'dew_'.bin2hex(random_bytes(16)); + $hash = $this->hashKey($plain); + $prefix = $this->prefix($plain); + + $record = UserApiKey::create([ + 'user_id' => $user->id, + 'key_hash' => $hash, + 'key_prefix' => $prefix, + 'name' => $name, + ]); + + return [ + 'plain' => $plain, + 'record' => $record, + ]; + } +} diff --git a/app/app/Services/Billing/PayPalPlanSyncService.php b/app/app/Services/Billing/PayPalPlanSyncService.php new file mode 100644 index 0000000..ee84946 --- /dev/null +++ b/app/app/Services/Billing/PayPalPlanSyncService.php @@ -0,0 +1,319 @@ + 0, + 'updated' => 0, + 'deactivated' => 0, + 'skipped' => 0, + ]; + + $token = $this->getAccessToken($mode); + if (!$token) { + Log::warning('PayPal plan sync aborted: missing access token', ['mode' => $mode]); + return $result; + } + + $productId = $this->ensureProduct($mode, $token); + if (!$productId) { + Log::warning('PayPal plan sync aborted: missing product id', ['mode' => $mode]); + return $result; + } + + $plans = PricingPlan::whereIn('code', ['personal_monthly', 'personal_annual'])->get(); + $keepIds = []; + foreach ($plans as $plan) { + $currentMeta = $plan->meta ?? []; + $currentPlanId = $currentMeta['paypal'][$mode]['plan']['id'] ?? null; + $history = $currentMeta['paypal'][$mode]['plan']['history'] ?? []; + if ($currentPlanId) { + $history = array_values(array_unique(array_merge([$currentPlanId], $history))); + } + + $amountUsd = $this->toUsdAmount($plan->amount); + $existing = $currentPlanId ? $this->getPlan($mode, $token, $currentPlanId) : null; + $existingAmount = $existing['billing_cycles'][0]['pricing_scheme']['fixed_price']['value'] ?? null; + + if ($existing && $existingAmount !== null && (float) $existingAmount === (float) $amountUsd) { + $currentMeta['paypal'][$mode]['plan'] = [ + 'id' => $currentPlanId, + 'amount_usd' => $amountUsd, + 'history' => $history, + 'synced_at' => now()->toIso8601String(), + ]; + $plan->update(['meta' => $currentMeta]); + if ($currentPlanId) { + $keepIds[] = $currentPlanId; + } + $result['skipped']++; + continue; + } + + $newPlanId = $this->createPlan($mode, $token, $productId, $plan->code, $plan->name, $amountUsd, $plan->period); + if (!$newPlanId) { + $result['skipped']++; + continue; + } + + $currentMeta['paypal'][$mode]['plan'] = [ + 'id' => $newPlanId, + 'amount_usd' => $amountUsd, + 'history' => $history, + 'synced_at' => now()->toIso8601String(), + ]; + + $plan->update(['meta' => $currentMeta]); + if ($currentPlanId) { + $result['updated']++; + } else { + $result['created']++; + } + $keepIds[] = $newPlanId; + + if ($this->canDeactivate($plan->code)) { + foreach ($history as $oldId) { + if ($oldId === $newPlanId) { + continue; + } + if ($this->deactivatePlan($mode, $token, $oldId)) { + $result['deactivated']++; + } + } + } + } + + // Deactivate any other active plans under this product to avoid confusion + $deactivated = $this->deactivateOtherPlansForProduct($mode, $token, $productId, $keepIds); + $result['deactivated'] += $deactivated; + + return $result; + } + + private function toUsdAmount(int $idrAmount): string + { + $rate = (int) config('dewemoji.pricing.usd_rate', 15000); + $usd = $rate > 0 ? $idrAmount / $rate : 0; + return number_format(max($usd, 1), 2, '.', ''); + } + + private function canDeactivate(string $planCode): bool + { + $activeCount = \App\Models\Subscription::query() + ->where('provider', 'paypal') + ->where('status', 'active') + ->where('plan', $planCode) + ->count(); + + return $activeCount === 0; + } + + private function getAccessToken(string $mode): ?string + { + $clientId = config("dewemoji.billing.providers.paypal.{$mode}.client_id"); + $clientSecret = config("dewemoji.billing.providers.paypal.{$mode}.client_secret"); + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + + if (!$clientId || !$clientSecret || !$apiBase) { + return null; + } + + $res = Http::asForm() + ->withBasicAuth($clientId, $clientSecret) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->post(rtrim($apiBase, '/').'/v1/oauth2/token', [ + 'grant_type' => 'client_credentials', + ]); + + if (!$res->ok()) { + Log::warning('PayPal auth failed', ['body' => $res->body()]); + return null; + } + + return $res->json('access_token'); + } + + private function ensureProduct(string $mode, string $token): ?string + { + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + $list = Http::withToken($token) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->get(rtrim($apiBase, '/').'/v1/catalogs/products', [ + 'page_size' => 20, + 'page' => 1, + ]); + + if ($list->ok()) { + $items = $list->json('products') ?? []; + foreach ($items as $item) { + if (($item['custom_id'] ?? '') === 'dewemoji-personal') { + return $item['id'] ?? null; + } + } + } + + $payload = [ + 'name' => 'Dewemoji Personal', + 'type' => 'SERVICE', + 'category' => 'SOFTWARE', + 'custom_id' => 'dewemoji-personal', + ]; + + $create = Http::withToken($token) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->post(rtrim($apiBase, '/').'/v1/catalogs/products', $payload); + $createdId = $create->json('id'); + if ($createdId) { + if (!$create->ok()) { + Log::warning('PayPal product create returned non-OK but provided id', [ + 'status' => $create->status(), + 'body' => $create->body(), + ]); + } + return $createdId; + } + + Log::warning('PayPal product create failed', [ + 'status' => $create->status(), + 'body' => $create->body(), + ]); + return null; + } + + private function createPlan( + string $mode, + string $token, + string $productId, + string $code, + string $name, + string $amountUsd, + ?string $period + ): ?string { + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + $intervalUnit = $period === 'year' ? 'YEAR' : 'MONTH'; + + $payload = [ + 'product_id' => $productId, + 'name' => $name, + 'description' => "{$name} subscription", + 'billing_cycles' => [ + [ + 'frequency' => [ + 'interval_unit' => $intervalUnit, + 'interval_count' => 1, + ], + 'tenure_type' => 'REGULAR', + 'sequence' => 1, + 'total_cycles' => 0, + 'pricing_scheme' => [ + 'fixed_price' => [ + 'value' => $amountUsd, + 'currency_code' => 'USD', + ], + ], + ], + ], + 'payment_preferences' => [ + 'auto_bill_outstanding' => true, + 'setup_fee_failure_action' => 'CONTINUE', + 'payment_failure_threshold' => 3, + ], + ]; + + $res = Http::withToken($token) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->post(rtrim($apiBase, '/').'/v1/billing/plans', $payload); + + $planId = $res->json('id'); + if ($planId) { + if (!$res->ok()) { + Log::warning('PayPal plan create returned non-OK but provided id', [ + 'code' => $code, + 'status' => $res->status(), + 'body' => $res->body(), + ]); + } + return $planId; + } + + Log::warning('PayPal plan create failed', [ + 'code' => $code, + 'status' => $res->status(), + 'body' => $res->body(), + ]); + return null; + } + + private function getPlan(string $mode, string $token, string $planId): ?array + { + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + $res = Http::withToken($token) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->get(rtrim($apiBase, '/').'/v1/billing/plans/'.$planId); + + if (!$res->ok()) { + return null; + } + + return $res->json(); + } + + private function deactivatePlan(string $mode, string $token, string $planId): bool + { + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + $res = Http::withToken($token) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->post(rtrim($apiBase, '/').'/v1/billing/plans/'.$planId.'/deactivate'); + + return $res->ok(); + } + + private function deactivateOtherPlansForProduct(string $mode, string $token, string $productId, array $keepIds): int + { + $apiBase = config("dewemoji.billing.providers.paypal.{$mode}.api_base"); + $res = Http::withToken($token) + ->timeout((int) config('dewemoji.billing.providers.paypal.timeout', 10)) + ->get(rtrim($apiBase, '/').'/v1/billing/plans', [ + 'product_id' => $productId, + 'page_size' => 20, + 'page' => 1, + ]); + + if (!$res->ok()) { + return 0; + } + + $items = $res->json('plans') ?? []; + if (!is_array($items)) { + return 0; + } + + $count = 0; + foreach ($items as $plan) { + $id = $plan['id'] ?? null; + $status = strtoupper((string) ($plan['status'] ?? '')); + if (!$id || in_array($id, $keepIds, true)) { + continue; + } + if ($status !== 'ACTIVE') { + continue; + } + if ($this->deactivatePlan($mode, $token, $id)) { + $count++; + } + } + + return $count; + } +} diff --git a/app/app/Services/Billing/PaypalWebhookProcessor.php b/app/app/Services/Billing/PaypalWebhookProcessor.php new file mode 100644 index 0000000..6192edb --- /dev/null +++ b/app/app/Services/Billing/PaypalWebhookProcessor.php @@ -0,0 +1,78 @@ + $payload + */ + public function process(string $eventType, array $payload): void + { + $resource = $payload['resource'] ?? []; + if (!is_array($resource)) { + return; + } + + $subscriptionId = (string) ($resource['id'] ?? ''); + $email = (string) ($resource['subscriber']['email_address'] ?? ''); + + if ($subscriptionId === '' || $email === '') { + return; + } + + $user = User::where('email', $email)->first(); + if (!$user) { + throw new \RuntimeException('User not found for webhook email.'); + } + + if ($eventType === 'BILLING.SUBSCRIPTION.ACTIVATED') { + Subscription::create([ + 'user_id' => $user->id, + 'plan' => 'personal', + 'status' => 'active', + 'provider' => 'paypal', + 'provider_ref' => $subscriptionId, + 'started_at' => now(), + 'expires_at' => null, + ]); + $user->update(['tier' => 'personal']); + return; + } + + if ($eventType === 'BILLING.SUBSCRIPTION.CANCELLED' || $eventType === 'BILLING.SUBSCRIPTION.SUSPENDED') { + Subscription::where('user_id', $user->id) + ->where('provider', 'paypal') + ->where('provider_ref', $subscriptionId) + ->where('status', 'active') + ->update([ + 'status' => $eventType === 'BILLING.SUBSCRIPTION.CANCELLED' ? 'cancelled' : 'suspended', + 'expires_at' => now(), + ]); + + $this->syncUserTier($user->id); + } + } + + private function syncUserTier(int $userId): void + { + $active = Subscription::where('user_id', $userId) + ->where('status', 'active') + ->where(function ($q): void { + $q->whereNull('expires_at') + ->orWhere('expires_at', '>', now()); + }) + ->exists(); + + User::where('id', $userId)->update([ + 'tier' => $active ? 'personal' : 'free', + ]); + if (!$active) { + UserApiKey::where('user_id', $userId)->update(['revoked_at' => now()]); + } + } +} diff --git a/app/app/Services/Extension/ExtensionVerificationService.php b/app/app/Services/Extension/ExtensionVerificationService.php new file mode 100644 index 0000000..03b3d56 --- /dev/null +++ b/app/app/Services/Extension/ExtensionVerificationService.php @@ -0,0 +1,60 @@ + $expectedExtensionIds + */ + public function verifyToken(string $token, array $expectedExtensionIds): bool + { + if ($token === '') { + return false; + } + + $config = config('dewemoji.extension_verification', []); + if (!(bool) ($config['enabled'] ?? true)) { + return true; + } + + $projectId = (string) ($config['project_id'] ?? ''); + $serverKey = (string) ($config['server_key'] ?? ''); + if ($projectId === '' || $serverKey === '') { + return false; + } + + $cacheKey = 'dw_ext_verify_'.sha1($token); + $ttl = max((int) ($config['cache_ttl'] ?? 3600), 60); + + return Cache::remember($cacheKey, $ttl, function () use ($token, $serverKey, $expectedExtensionIds): bool { + $url = 'https://iid.googleapis.com/iid/info/'.$token.'?details=true'; + $response = Http::withHeaders([ + 'Authorization' => 'key='.$serverKey, + ])->get($url); + + if (!$response->ok()) { + return false; + } + + $data = $response->json(); + if (!is_array($data)) { + return false; + } + + $application = (string) ($data['application'] ?? ''); + if ($application === '') { + return false; + } + + if (count($expectedExtensionIds) === 0) { + return true; + } + + return in_array($application, $expectedExtensionIds, true); + }); + } +} diff --git a/app/app/Services/System/SettingsService.php b/app/app/Services/System/SettingsService.php new file mode 100644 index 0000000..c28ab73 --- /dev/null +++ b/app/app/Services/System/SettingsService.php @@ -0,0 +1,46 @@ + + */ + public function all(): array + { + return Cache::remember(self::CACHE_KEY, self::CACHE_TTL, function (): array { + $out = []; + foreach (Setting::all(['key', 'value']) as $setting) { + $out[$setting->key] = $setting->value; + } + return $out; + }); + } + + public function get(string $key, mixed $default = null): mixed + { + $all = $this->all(); + return array_key_exists($key, $all) ? $all[$key] : $default; + } + + /** + * @param array $values + */ + public function setMany(array $values, ?string $updatedBy = null): void + { + foreach ($values as $key => $value) { + Setting::updateOrCreate( + ['key' => (string) $key], + ['value' => $value, 'updated_by' => $updatedBy] + ); + } + Cache::forget(self::CACHE_KEY); + } +} diff --git a/app/app/View/Components/AppLayout.php b/app/app/View/Components/AppLayout.php new file mode 100644 index 0000000..de0d46f --- /dev/null +++ b/app/app/View/Components/AppLayout.php @@ -0,0 +1,17 @@ +withRouting( - web: __DIR__.'/../routes/web.php', + web: [ + __DIR__.'/../routes/web.php', + __DIR__.'/../routes/dashboard.php', + ], api: __DIR__.'/../routes/api.php', apiPrefix: '', commands: __DIR__.'/../routes/console.php', diff --git a/app/composer.json b/app/composer.json index 72dfb9a..b62117a 100644 --- a/app/composer.json +++ b/app/composer.json @@ -15,6 +15,7 @@ }, "require-dev": { "fakerphp/faker": "^1.23", + "laravel/breeze": "*", "laravel/pail": "^1.2.2", "laravel/pint": "^1.24", "laravel/sail": "^1.41", diff --git a/app/composer.lock b/app/composer.lock index c18749c..25549d8 100644 --- a/app/composer.lock +++ b/app/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "79cd7bb4d53c32c6fa51bec0f240bd28", + "content-hash": "4f99c59819e467f4dda33565265ea286", "packages": [ { "name": "brick/math", @@ -6182,6 +6182,67 @@ }, "time": "2025-04-30T06:54:44+00:00" }, + { + "name": "laravel/breeze", + "version": "v2.3.8", + "source": { + "type": "git", + "url": "https://github.com/laravel/breeze.git", + "reference": "1a29c5792818bd4cddf70b5f743a227e02fbcfcd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/breeze/zipball/1a29c5792818bd4cddf70b5f743a227e02fbcfcd", + "reference": "1a29c5792818bd4cddf70b5f743a227e02fbcfcd", + "shasum": "" + }, + "require": { + "illuminate/console": "^11.0|^12.0", + "illuminate/filesystem": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", + "illuminate/validation": "^11.0|^12.0", + "php": "^8.2.0", + "symfony/console": "^7.0" + }, + "require-dev": { + "laravel/framework": "^11.0|^12.0", + "orchestra/testbench-core": "^9.0|^10.0", + "phpstan/phpstan": "^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Breeze\\BreezeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Breeze\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/breeze/issues", + "source": "https://github.com/laravel/breeze" + }, + "time": "2025-07-18T18:49:59+00:00" + }, { "name": "laravel/pail", "version": "v1.2.4", diff --git a/app/config/dewemoji.php b/app/config/dewemoji.php index 8d3ba49..d4b65f2 100644 --- a/app/config/dewemoji.php +++ b/app/config/dewemoji.php @@ -44,19 +44,109 @@ return [ // Optional stub keys for local testing without external HTTP calls. 'test_keys' => array_values(array_filter(array_map('trim', explode(',', (string) env('DEWEMOJI_MAYAR_TEST_KEYS', ''))))), ], + 'paypal' => [ + 'enabled' => filter_var(env('DEWEMOJI_PAYPAL_ENABLED', false), FILTER_VALIDATE_BOOL), + 'timeout' => (int) env('DEWEMOJI_PAYPAL_TIMEOUT', 10), + 'webhook_ids' => [ + 'sandbox' => env('DEWEMOJI_PAYPAL_SANDBOX_WEBHOOK_ID', ''), + 'live' => env('DEWEMOJI_PAYPAL_LIVE_WEBHOOK_ID', ''), + ], + 'plan_ids' => [ + 'sandbox' => [ + 'personal_monthly' => env('DEWEMOJI_PAYPAL_SANDBOX_PLAN_PERSONAL_MONTHLY', ''), + 'personal_annual' => env('DEWEMOJI_PAYPAL_SANDBOX_PLAN_PERSONAL_ANNUAL', ''), + ], + 'live' => [ + 'personal_monthly' => env('DEWEMOJI_PAYPAL_LIVE_PLAN_PERSONAL_MONTHLY', ''), + 'personal_annual' => env('DEWEMOJI_PAYPAL_LIVE_PLAN_PERSONAL_ANNUAL', ''), + ], + ], + 'sandbox' => [ + 'api_base' => env('DEWEMOJI_PAYPAL_SANDBOX_API_BASE', 'https://api-m.sandbox.paypal.com'), + 'web_base' => env('DEWEMOJI_PAYPAL_SANDBOX_WEB_BASE', 'https://www.sandbox.paypal.com'), + 'client_id' => env('DEWEMOJI_PAYPAL_SANDBOX_CLIENT_ID', ''), + 'client_secret' => env('DEWEMOJI_PAYPAL_SANDBOX_CLIENT_SECRET', ''), + ], + 'live' => [ + 'api_base' => env('DEWEMOJI_PAYPAL_LIVE_API_BASE', 'https://api-m.paypal.com'), + 'web_base' => env('DEWEMOJI_PAYPAL_LIVE_WEB_BASE', 'https://www.paypal.com'), + 'client_id' => env('DEWEMOJI_PAYPAL_LIVE_CLIENT_ID', ''), + 'client_secret' => env('DEWEMOJI_PAYPAL_LIVE_CLIENT_SECRET', ''), + ], + ], + 'pakasir' => [ + 'enabled' => filter_var(env('DEWEMOJI_PAKASIR_ENABLED', false), FILTER_VALIDATE_BOOL), + 'api_base' => env('DEWEMOJI_PAKASIR_API_BASE', ''), + 'api_key' => env('DEWEMOJI_PAKASIR_API_KEY', ''), + 'project' => env('DEWEMOJI_PAKASIR_PROJECT', ''), + 'timeout' => (int) env('DEWEMOJI_PAKASIR_TIMEOUT', 10), + ], ], ], 'cors' => [ 'allowed_origins' => array_values(array_filter(array_map('trim', explode(',', (string) env('DEWEMOJI_ALLOWED_ORIGINS', 'http://127.0.0.1:8000,http://localhost:8000,https://dewemoji.com,https://www.dewemoji.com'))))), 'allow_methods' => 'GET, POST, OPTIONS', - 'allow_headers' => 'Content-Type, Authorization, X-License-Key, X-Account-Id, X-Dewemoji-Frontend', + 'allow_headers' => 'Content-Type, Authorization, X-License-Key, X-Api-Key, X-Admin-Token, X-Account-Id, X-Dewemoji-Frontend, X-Extension-Token', + ], + + 'admin' => [ + 'token' => env('DEWEMOJI_ADMIN_TOKEN', ''), + ], + + 'pricing' => [ + 'usd_rate' => (int) env('DEWEMOJI_USD_RATE', 15000), + 'defaults' => [ + [ + 'code' => 'personal_monthly', + 'name' => 'Personal Monthly', + 'currency' => 'IDR', + 'amount' => 30000, + 'period' => 'month', + 'status' => 'active', + ], + [ + 'code' => 'personal_annual', + 'name' => 'Personal Annual', + 'currency' => 'IDR', + 'amount' => 300000, + 'period' => 'year', + 'status' => 'active', + ], + [ + 'code' => 'personal_lifetime', + 'name' => 'Personal Lifetime', + 'currency' => 'IDR', + 'amount' => 900000, + 'period' => null, + 'status' => 'active', + ], + ], + ], + + 'payments' => [ + 'qris_url' => env('DEWEMOJI_QRIS_URL', ''), + 'paypal_url' => env('DEWEMOJI_PAYPAL_URL', ''), ], 'frontend' => [ 'header_token' => env('DEWEMOJI_FRONTEND_HEADER', 'web-v1'), ], + 'public_access' => [ + 'enforce_whitelist' => filter_var(env('DEWEMOJI_PUBLIC_ENFORCE', true), FILTER_VALIDATE_BOOL), + 'allowed_origins' => array_values(array_filter(array_map('trim', explode(',', (string) env('DEWEMOJI_PUBLIC_ORIGINS', 'http://127.0.0.1:8000,http://localhost:8000,https://dewemoji.com,https://www.dewemoji.com'))))), + 'extension_ids' => array_values(array_filter(array_map('trim', explode(',', (string) env('DEWEMOJI_EXTENSION_IDS', ''))))), + 'hourly_limit' => (int) env('DEWEMOJI_PUBLIC_HOURLY_LIMIT', 5000), + ], + + 'extension_verification' => [ + 'enabled' => filter_var(env('DEWEMOJI_EXTENSION_VERIFY_ENABLED', true), FILTER_VALIDATE_BOOL), + 'project_id' => env('DEWEMOJI_GOOGLE_PROJECT_ID', ''), + 'server_key' => env('DEWEMOJI_GOOGLE_SERVER_KEY', ''), + 'cache_ttl' => (int) env('DEWEMOJI_EXTENSION_VERIFY_CACHE_TTL', 3600), + ], + 'metrics' => [ 'enabled' => filter_var(env('DEWEMOJI_METRICS_ENABLED', true), FILTER_VALIDATE_BOOL), 'token' => (string) env('DEWEMOJI_METRICS_TOKEN', ''), diff --git a/app/config/mail.php b/app/config/mail.php index 522b284..3e7c7f8 100644 --- a/app/config/mail.php +++ b/app/config/mail.php @@ -61,6 +61,13 @@ return [ // ], ], + 'mailketing' => [ + 'transport' => 'mailketing', + 'endpoint' => env('MAILKETING_API_URL', 'https://api.mailketing.co.id/api/v1/send'), + 'token' => env('MAILKETING_API_TOKEN'), + 'timeout' => env('MAILKETING_TIMEOUT', 10), + ], + 'resend' => [ 'transport' => 'resend', ], diff --git a/app/database/migrations/2026_02_08_000100_add_tier_to_users.php b/app/database/migrations/2026_02_08_000100_add_tier_to_users.php new file mode 100644 index 0000000..b3be880 --- /dev/null +++ b/app/database/migrations/2026_02_08_000100_add_tier_to_users.php @@ -0,0 +1,22 @@ +string('tier', 20)->default('free')->after('password'); + }); + } + + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('tier'); + }); + } +}; diff --git a/app/database/migrations/2026_02_08_000200_create_user_api_keys_table.php b/app/database/migrations/2026_02_08_000200_create_user_api_keys_table.php new file mode 100644 index 0000000..59803e2 --- /dev/null +++ b/app/database/migrations/2026_02_08_000200_create_user_api_keys_table.php @@ -0,0 +1,27 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->string('key_hash', 64)->unique(); + $table->string('key_prefix', 12)->index(); + $table->string('name', 100)->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('revoked_at')->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('user_api_keys'); + } +}; diff --git a/app/database/migrations/2026_02_08_000300_create_user_keywords_table.php b/app/database/migrations/2026_02_08_000300_create_user_keywords_table.php new file mode 100644 index 0000000..a23e174 --- /dev/null +++ b/app/database/migrations/2026_02_08_000300_create_user_keywords_table.php @@ -0,0 +1,28 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->string('emoji_slug'); + $table->string('keyword', 200); + $table->string('lang', 10)->default('und'); + $table->timestamps(); + + $table->unique(['user_id', 'emoji_slug', 'keyword']); + $table->index(['user_id', 'emoji_slug']); + }); + } + + public function down(): void + { + Schema::dropIfExists('user_keywords'); + } +}; diff --git a/app/database/migrations/2026_02_08_000400_create_subscriptions_table.php b/app/database/migrations/2026_02_08_000400_create_subscriptions_table.php new file mode 100644 index 0000000..d9681e3 --- /dev/null +++ b/app/database/migrations/2026_02_08_000400_create_subscriptions_table.php @@ -0,0 +1,32 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->string('plan', 20); + $table->string('status', 20)->default('active'); + $table->string('provider', 20)->nullable(); + $table->string('provider_ref', 100)->nullable(); + $table->timestamp('started_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamp('canceled_at')->nullable(); + $table->timestamp('next_renewal_at')->nullable(); + $table->timestamps(); + + $table->index(['user_id', 'status']); + }); + } + + public function down(): void + { + Schema::dropIfExists('subscriptions'); + } +}; diff --git a/app/database/migrations/2026_02_08_000500_create_pricing_plans_table.php b/app/database/migrations/2026_02_08_000500_create_pricing_plans_table.php new file mode 100644 index 0000000..68ebd69 --- /dev/null +++ b/app/database/migrations/2026_02_08_000500_create_pricing_plans_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('code', 30)->unique(); + $table->string('name', 50); + $table->string('currency', 10)->default('IDR'); + $table->unsignedBigInteger('amount'); + $table->string('period', 20)->nullable(); + $table->string('status', 20)->default('active'); + $table->json('meta')->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('pricing_plans'); + } +}; diff --git a/app/database/migrations/2026_02_08_000600_create_pricing_changes_table.php b/app/database/migrations/2026_02_08_000600_create_pricing_changes_table.php new file mode 100644 index 0000000..090e43e --- /dev/null +++ b/app/database/migrations/2026_02_08_000600_create_pricing_changes_table.php @@ -0,0 +1,24 @@ +id(); + $table->string('admin_ref', 120)->nullable(); + $table->json('before')->nullable(); + $table->json('after')->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('pricing_changes'); + } +}; diff --git a/app/database/migrations/2026_02_08_000700_create_settings_table.php b/app/database/migrations/2026_02_08_000700_create_settings_table.php new file mode 100644 index 0000000..81ac148 --- /dev/null +++ b/app/database/migrations/2026_02_08_000700_create_settings_table.php @@ -0,0 +1,24 @@ +id(); + $table->string('key', 120)->unique(); + $table->json('value')->nullable(); + $table->string('updated_by', 120)->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('settings'); + } +}; diff --git a/app/database/migrations/2026_02_08_000800_create_webhook_events_table.php b/app/database/migrations/2026_02_08_000800_create_webhook_events_table.php new file mode 100644 index 0000000..a0a7b9c --- /dev/null +++ b/app/database/migrations/2026_02_08_000800_create_webhook_events_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('provider', 50); + $table->string('event_type', 120)->nullable(); + $table->string('status', 50)->default('received'); + $table->json('payload')->nullable(); + $table->text('error')->nullable(); + $table->timestamp('received_at')->nullable(); + $table->timestamp('processed_at')->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('webhook_events'); + } +}; diff --git a/app/database/migrations/2026_02_08_000900_add_event_id_to_webhook_events_table.php b/app/database/migrations/2026_02_08_000900_add_event_id_to_webhook_events_table.php new file mode 100644 index 0000000..5e65fb4 --- /dev/null +++ b/app/database/migrations/2026_02_08_000900_add_event_id_to_webhook_events_table.php @@ -0,0 +1,26 @@ +string('event_id', 120)->nullable()->after('provider'); + $table->json('headers')->nullable()->after('payload'); + $table->index(['provider', 'event_id']); + }); + } + + public function down(): void + { + Schema::table('webhook_events', function (Blueprint $table): void { + $table->dropIndex(['provider', 'event_id']); + $table->dropColumn('event_id'); + $table->dropColumn('headers'); + }); + } +}; diff --git a/app/database/migrations/2026_02_09_000300_add_role_to_users_table.php b/app/database/migrations/2026_02_09_000300_add_role_to_users_table.php new file mode 100644 index 0000000..ae6b014 --- /dev/null +++ b/app/database/migrations/2026_02_09_000300_add_role_to_users_table.php @@ -0,0 +1,30 @@ +string('role', 32)->default('user')->after('password'); + $table->index('role'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropIndex(['role']); + $table->dropColumn('role'); + }); + } +}; diff --git a/app/database/migrations/2026_02_09_000400_create_admin_audit_logs_table.php b/app/database/migrations/2026_02_09_000400_create_admin_audit_logs_table.php new file mode 100644 index 0000000..080fb8a --- /dev/null +++ b/app/database/migrations/2026_02_09_000400_create_admin_audit_logs_table.php @@ -0,0 +1,25 @@ +id(); + $table->unsignedBigInteger('admin_id')->nullable()->index(); + $table->string('admin_email', 255)->nullable()->index(); + $table->string('action', 64)->index(); + $table->json('payload')->nullable(); + $table->string('ip_address', 64)->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('admin_audit_logs'); + } +}; diff --git a/app/database/migrations/2026_02_10_000100_create_orders_table.php b/app/database/migrations/2026_02_10_000100_create_orders_table.php new file mode 100644 index 0000000..efca1d5 --- /dev/null +++ b/app/database/migrations/2026_02_10_000100_create_orders_table.php @@ -0,0 +1,32 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->string('plan_code', 40); + $table->string('type', 20); // one_time | subscription + $table->string('currency', 10); + $table->unsignedInteger('amount'); + $table->string('status', 20)->default('pending'); + $table->string('provider', 20)->nullable(); + $table->string('provider_ref', 100)->nullable(); + $table->timestamps(); + + $table->index(['user_id', 'status']); + $table->index(['provider', 'provider_ref']); + }); + } + + public function down(): void + { + Schema::dropIfExists('orders'); + } +}; diff --git a/app/database/migrations/2026_02_10_000200_create_payments_table.php b/app/database/migrations/2026_02_10_000200_create_payments_table.php new file mode 100644 index 0000000..1aa8651 --- /dev/null +++ b/app/database/migrations/2026_02_10_000200_create_payments_table.php @@ -0,0 +1,34 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->foreignId('order_id')->constrained()->cascadeOnDelete(); + $table->string('provider', 20); + $table->string('type', 20); // one_time | subscription + $table->string('plan_code', 40); + $table->string('currency', 10); + $table->unsignedInteger('amount'); + $table->string('status', 20)->default('pending'); + $table->string('provider_ref', 100)->nullable(); + $table->json('raw_payload')->nullable(); + $table->timestamps(); + + $table->index(['user_id', 'status']); + $table->index(['provider', 'provider_ref']); + }); + } + + public function down(): void + { + Schema::dropIfExists('payments'); + } +}; diff --git a/app/database/seeders/DatabaseSeeder.php b/app/database/seeders/DatabaseSeeder.php index 6b901f8..da571f5 100644 --- a/app/database/seeders/DatabaseSeeder.php +++ b/app/database/seeders/DatabaseSeeder.php @@ -15,11 +15,6 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - // User::factory(10)->create(); - - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', - ]); + $this->call(PricingPlanSeeder::class); } } diff --git a/app/database/seeders/PricingPlanSeeder.php b/app/database/seeders/PricingPlanSeeder.php new file mode 100644 index 0000000..7f1c057 --- /dev/null +++ b/app/database/seeders/PricingPlanSeeder.php @@ -0,0 +1,27 @@ + $plan['code']], + [ + 'name' => $plan['name'], + 'currency' => $plan['currency'], + 'amount' => $plan['amount'], + 'period' => $plan['period'], + 'status' => $plan['status'], + 'meta' => $plan['meta'] ?? null, + ] + ); + } + } +} diff --git a/app/dewemoji-billing-integration-plan.md b/app/dewemoji-billing-integration-plan.md new file mode 100644 index 0000000..294a6b0 --- /dev/null +++ b/app/dewemoji-billing-integration-plan.md @@ -0,0 +1,195 @@ +# Dewemoji Billing Integration Plan (QRIS + PayPal) + +This document outlines a proper, production-grade billing flow for Dewemoji using **QRIS (Pakasir)** and **PayPal Subscriptions**, including webhooks, retries, and license activation. + +--- + +## 1) Goals + +- Replace primitive payment links with real provider integrations. +- Support **subscription** billing (monthly/annual) and **one-time lifetime**. +- Activate or revoke licenses based on webhook-confirmed payments. +- Log all webhook events and payment activity for audit. + +--- + +## 2) Data Model + +### `orders` (new) + +Acts as the primary record of what the user is buying. Payments link back to orders. + +- `id` +- `user_id` +- `plan_code` +- `type` (`one_time`, `subscription`) +- `currency` (`IDR`, `USD`) +- `amount` +- `status` (`pending`, `paid`, `failed`, `expired`, `refunded`) +- `provider` (`qris`, `paypal`) +- `provider_ref` +- `created_at`, `updated_at` + +### `payments` (new) + +- `id` +- `user_id` +- `order_id` +- `provider` (`qris`, `paypal`) +- `type` (`one_time`, `subscription`) +- `plan_code` (`personal_monthly`, `personal_annual`, `personal_lifetime`) +- `currency` (`IDR`, `USD`) +- `amount` +- `status` (`pending`, `paid`, `failed`, `expired`, `refunded`) +- `provider_ref` (invoice_id / order_id / subscription_id) +- `raw_payload` (json) +- `created_at`, `updated_at` + +### `subscriptions` (existing) +Extend with: +- `provider` +- `provider_ref` +- `status` (`active`, `pending`, `canceled`, `expired`) +- `started_at`, `expires_at`, `canceled_at` + - `next_renewal_at` (optional) + +### `webhook_events` (existing) +Continue to log inbound payloads and processing status: +- `provider`, `event_type`, `status`, `payload`, `received_at`, `processed_at`, `error_message` + +--- + +## 3) Payment Flow (User Journey) + +### Pricing Page (Frontend) + +Each plan shows: +- **Primary currency** (based on geo + user toggle) +- **Two payment buttons** (real provider flow): + - **QRIS (IDR)** → subscription or one-time + - **PayPal (USD)** → subscription or one-time + +### Backend Endpoints + +#### QRIS (Pakasir) +- `POST /billing/qris/create` + - Creates invoice via Pakasir API + - Stores `payments` with `pending` + - Returns QR payment URL or QR code data +- `GET /billing/qris/return` (optional) + - Shows “pending / processing” state + +#### PayPal Subscriptions +- `POST /billing/paypal/create` + - Creates PayPal subscription + - Stores `payments` with `pending` + - Returns approval URL +- `GET /billing/paypal/return` + - Shows “pending / processing” state + +--- + +## 4) Webhook Processing (Critical) + +Webhook endpoint: +``` +POST /webhooks/{provider} +``` + +Store inbound payloads in `webhook_events`, then process async (queue). + +### PayPal Events +- `BILLING.SUBSCRIPTION.ACTIVATED` → mark subscription active, set `users.tier = personal` +- `BILLING.SUBSCRIPTION.CANCELLED` → mark subscription canceled +- `PAYMENT.SALE.COMPLETED` → mark payment paid +- `PAYMENT.SALE.DENIED` → mark payment failed + +### Pakasir / QRIS Events +- `payment.paid` → mark payment paid, grant access +- `payment.expired` → mark payment failed/expired + +--- + +## 5) License Activation Rules + +When a payment or subscription is confirmed: +- Create or update a `subscriptions` record +- Set `users.tier = personal` +- Store provider refs (`provider_ref`) +- Log admin audit record + +When revoked/expired: +- Update `subscriptions.status` +- Downgrade user if no active subscription remains + +### Renewal Logic (QRIS manual renew) + +- **If still active:** extend from current `expires_at` + - `expires_at = expires_at + duration` +- **If expired:** start from now + - `expires_at = now + duration` + +--- + +## 6) Admin Dashboard Enhancements + +Add or extend: +- **Payments list** (new screen) + - filter by provider/status/currency + - show raw provider ref +- **Subscriptions list** (already exists) + - show provider + status +- **Webhook events** (already exists) + - replay capability + +--- + +## 7) Security & Reliability + +- Validate webhook signatures (PayPal + Pakasir) +- Reject duplicate events (idempotency) +- Use queues for webhook processing +- Log all webhook failures + +--- + +## 8) Required Inputs (From Owner) + +Before implementation: + +1. **Pakasir API docs** (create invoice, webhook payload format) +2. **PayPal API credentials** (client_id, secret, webhook signing key) +3. Confirm **plans & pricing**: + - Monthly + - Annual + - Lifetime + +--- + +## 9) Implementation Phases + +**Phase 1 — Schema + Core Models** +- Add `orders` table +- Add `payments` table (link to orders) +- Extend `subscriptions` +- Update webhook model if needed + +**Phase 2 — Provider APIs** +- Pakasir invoice create +- PayPal subscription create + +**Phase 3 — Webhooks** +- Save raw events +- Process via queue + idempotency + +**Phase 4 — UI** +- Pricing page buttons → real flows +- Admin payment + subscription tools + +--- + +## 10) Notes + +- This plan assumes **proper subscription lifecycle** with webhooks. +- PayPal.me / static links are **not sufficient** for subscriptions. +- All access control must be tied to **confirmed payment status**. diff --git a/app/dewemoji-user-dashboard-implementation-plan.md b/app/dewemoji-user-dashboard-implementation-plan.md new file mode 100644 index 0000000..0588fa4 --- /dev/null +++ b/app/dewemoji-user-dashboard-implementation-plan.md @@ -0,0 +1,143 @@ +# Dewemoji User Dashboard Implementation Plan + +**Source:** `dewemoji-ux-flow-brief.md` +**Goal:** Build the Personal user dashboard + inline personalization flows aligned with the UX brief. + +--- + +## 1) Scope & Principles + +- **Primary flow**: Add keywords directly on emoji detail pages (fast, contextual). +- **Secondary flow**: Manage keywords in the dashboard (bulk + power tools). +- **Zero friction** for Visitors/Free users; gentle upgrade prompts. +- **Shared layout** with admin (same shell, role-based sidebar). + +--- + +## 2) User States & Routing + +### Visitor (non-logged) +- Public search + emoji detail only. +- CTA: “Sign up free” / “Upgrade to Personal”. + +### Free user (logged, no subscription) +- See public content, “Your keywords” section locked. +- Upgrade nudges on detail + empty states in dashboard. + +### Personal user (paid) +- Full access: quick add on detail + dashboard CRUD. + +--- + +## 3) UI Screens (User Dashboard) + +### 3.1 Dashboard shell (shared) +- Same layout as admin (sidebar, top bar). +- Role-based sidebar menu: + - Overview + - My Keywords + - API Keys + - Billing + - Preferences + - Support / Logout + +### 3.2 Overview (user) +- Show: + - Total keywords + - Recent keyword additions (last 7 days) + - Synced devices (optional later) +- Small quick link to “My Keywords”. + +### 3.3 My Keywords (primary management) +- Table: Emoji | Your keywords | Language | Actions +- Toolbar: + - + Add Keyword + - Import JSON + - Export JSON + - Search/filter +- Modal: emoji picker → add keywords + language. + +### 3.4 API Keys +- List user API keys +- Create/revoke key + +### 3.5 Billing +- Current plan + renewal / expiry +- Payment method (future) +- Upgrade CTA if free + +### 3.6 Preferences +- Theme +- Tone lock / preferred skin tone (future) +- Locale + +--- + +## 4) Site Page Enhancements (Non-dashboard) + +### 4.1 Emoji Detail Page (critical) +- Show public keywords for everyone. +- If Personal: show “Your Keywords” list + quick add modal. +- If Free: show locked section + upgrade CTA. +- If Visitor: CTA to sign up. + +### 4.2 Search Results Page +- Personal user: blend public + user keywords. +- Show “Your keyword” badge and “quick edit” button. + +--- + +## 5) API Endpoints (v1) + +### Keyword CRUD +- `GET /v1/emoji/{slug}?include_user_keywords=true` +- `POST /v1/keywords` (add keyword) +- `PUT /v1/keywords/{id}` (edit) +- `DELETE /v1/keywords/{id}` +- `GET /v1/keywords` (list user keywords) + +### User keyword import/export +- `POST /v1/keywords/import` +- `GET /v1/keywords/export` + +### Dashboard data +- `GET /v1/user/summary` (counts + recents) +- `GET /v1/user/apikeys` / `POST /v1/user/apikeys` +- `GET /v1/user/billing` (subscription status) + +--- + +## 6) Database / Models + +Existing: +- `user_keywords` +- `subscriptions` + +Add if needed: +- `user_keyword_imports` (optional audit) + +--- + +## 7) Implementation Phases + +### Phase A — Foundation +- Add user routes + dashboard views +- Layout reuse with role‑based sidebar + +### Phase B — Keywords UX +- Detail page quick add +- Dashboard keyword CRUD + import/export + +### Phase C — Billing & API Keys +- Billing summary + upgrade CTA +- API key list + create/revoke + +--- + +## 8) Acceptance Criteria + +- Personal user can add keywords from detail page in <5 seconds. +- Keyword appears in search results immediately. +- Dashboard keyword table supports filter + edit + delete. +- Free users see upgrade prompts, not broken UI. + diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 0000000..926565e --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,3581 @@ +{ + "name": "app", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "apexcharts": "^5.3.6" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "@tailwindcss/vite": "^4.0.0", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.2", + "axios": "^1.11.0", + "chart.js": "^4.4.1", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^2.0.0", + "postcss": "^8.4.31", + "tailwindcss": "^3.1.0", + "vite": "^7.0.7" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@svgdotjs/svg.draggable.js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz", + "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==", + "license": "MIT", + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@svgdotjs/svg.filter.js": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz", + "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==", + "license": "MIT", + "dependencies": { + "@svgdotjs/svg.js": "^3.2.4" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@svgdotjs/svg.js": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.5.tgz", + "integrity": "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Fuzzyma" + } + }, + "node_modules/@svgdotjs/svg.resize.js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", + "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.select.js": "^4.0.1" + } + }, + "node_modules/@svgdotjs/svg.select.js": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz", + "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz", + "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tailwindcss/node/node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz", + "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "tailwindcss": "4.1.18" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tailwindcss/vite/node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", + "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.1.5" + } + }, + "node_modules/@vue/shared": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", + "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", + "license": "MIT" + }, + "node_modules/alpinejs": { + "version": "3.15.8", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.8.tgz", + "integrity": "sha512-zxIfCRTBGvF1CCLIOMQOxAyBuqibxSEwS6Jm1a3HGA9rgrJVcjEWlwLcQTVGAWGS8YhAsTRLVrtQ5a5QT9bSSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "~3.1.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/apexcharts": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-5.3.6.tgz", + "integrity": "sha512-sVEPw+J0Gp0IHQabKu8cfdsxlfME0e36Wid7RIaPclGM2OUt+O7O4+6mfAmTUYhy5bDk8cNHzEhPfVtLCIXEJA==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@svgdotjs/svg.draggable.js": "^3.0.4", + "@svgdotjs/svg.filter.js": "^3.0.8", + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.resize.js": "^2.0.2", + "@svgdotjs/svg.select.js": "^4.0.1", + "@yr/monotone-cubic-spline": "^1.0.3" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.24", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", + "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001766", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz", + "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chart.js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", + "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-2.1.0.tgz", + "integrity": "sha512-z+ck2BSV6KWtYcoIzk9Y5+p4NEjqM+Y4i8/H+VZRLq0OgNjW2DqyADquwYu5j8qRvaXwzNmfCWl1KrMlV1zpsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^7.0.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/app/package.json b/app/package.json index 7686b29..8219749 100644 --- a/app/package.json +++ b/app/package.json @@ -7,11 +7,19 @@ "dev": "vite" }, "devDependencies": { + "@tailwindcss/forms": "^0.5.2", "@tailwindcss/vite": "^4.0.0", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.2", "axios": "^1.11.0", + "chart.js": "^4.4.1", "concurrently": "^9.0.1", "laravel-vite-plugin": "^2.0.0", - "tailwindcss": "^4.0.0", + "postcss": "^8.4.31", + "tailwindcss": "^3.1.0", "vite": "^7.0.7" + }, + "dependencies": { + "apexcharts": "^5.3.6" } } diff --git a/app/postcss.config.js b/app/postcss.config.js new file mode 100644 index 0000000..49c0612 --- /dev/null +++ b/app/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/app/public/assets/fonts/PlusJakartaSans-Bold.ttf b/app/public/assets/fonts/PlusJakartaSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0ff3da5bf5a5bd6ad513a9d9c7ae19061d3200b7 GIT binary patch literal 94772 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 BP^SO@ literal 0 HcmV?d00001 diff --git a/app/public/assets/fonts/PlusJakartaSans-BoldItalic.ttf b/app/public/assets/fonts/PlusJakartaSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ebd7f015b6b372dacae9956ab83c62bb2f4107c1 GIT binary patch literal 97000 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

A`83*{jFt)>)XzyGG1T@NVRixe3v$ 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

8xU*bV;_tC+lD{*|LuR5BJN+dZ%5xZ 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 literal 0 HcmV?d00001 diff --git a/app/public/assets/fonts/PlusJakartaSans-ExtraBold.ttf b/app/public/assets/fonts/PlusJakartaSans-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d22fa6934ca747776479e791893e34907431d31e GIT binary patch literal 94780 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 literal 0 HcmV?d00001 diff --git a/app/public/assets/fonts/PlusJakartaSans-ExtraBoldItalic.ttf b/app/public/assets/fonts/PlusJakartaSans-ExtraBoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..74608e19b3e4f6fa558535f16035cdb347fcd243 GIT binary patch literal 97032 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 OAljN|K>Gn5e*PCayAAIE literal 0 HcmV?d00001 diff --git a/app/public/assets/fonts/PlusJakartaSans-ExtraLight.ttf b/app/public/assets/fonts/PlusJakartaSans-ExtraLight.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2a72c18fe80961a5d0112d9343632ee5570b5cd3 GIT binary patch literal 94760 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 D6}@|l literal 0 HcmV?d00001 diff --git a/app/public/assets/fonts/PlusJakartaSans-ExtraLightItalic.ttf b/app/public/assets/fonts/PlusJakartaSans-ExtraLightItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0818b49d58072c7cb4538d18a11dda6b330f2bb2 GIT binary patch literal 97152 zcmeFa2YggT+Xp)3>?YX_>6-#c*o1^YfF!${MkkftL$7H-AS94N6KMh>Dk>r>DpC|t z5fKsTDk35(c0>fkfCa(&A_@w*|CuwJ-2f_Y@%!F;@0a}kGtbO<&h%%>b7p1f_*+cs?4>Q^&!>i<$l5Mw&>>xQSKM!j>{dNced|0v4B+ z7v^_(zI+KGfg1?%>M}8Z+9d6HvKRc};J23LPb@yaCO(1?4!5W0r1HwDkM3MChmah^ zkvMcxMe(F@#yb{(A895Y+i2~AP1>Ds5?WhJd|?x9Eh!=%WH>Phm)jo~TzKwN8%>Cz zq_*AV-wn<9*95P-{G}G=O zj2Hp^PlWC%T|v@}A#Cc{aaEKPQc{&)N{x8#hgy@V0EbAOOd&Os1E4jQLoOlJge_)+ zYkwx)g-vX9Bxxo~Q$<6_YC>u|k=~HP@-&q)#@q7_pugf@!Mw~b6RM5XCKIkzYInd~qTPoaioYiGDUnyr3-mt2 z3Pn?rZYWSRBi@FAisob>3S8&cNUpX+(FW2+o17;d1v?uY?k`(Pl!nGhpo5()i zN6}`I#ASIS4c=~a0~$@QC>|e@N)IU7k3`dTiuMORU(sPCo(|P%R9!SpS2QJ78meeU zV#s+#bHw(wqBU1I)PNd(SNR)Vd8Zzz&8^DclSGmS6zxTV$vj1y&_YzXp_K-aUdrDa z?IT;!4bYlW743sG#4Fktt-Yb5{U8|uiuMNufhN;P6{#TkXiw#&6f*0y`;%fak(AWA zd%|4=cQt(bfgTI06z^4#9`GGY#vvS6XxH;|hHNEW!JCh_OGsf|`1O6Sj=la<_q5c1 z;)=Jv{~)B;nM%P^h7?bbskf30q@)VZE8v?isY>Lj8t!URiITtm^L%g@BBV)wz|jYx ziub!AOg$!%=l(z$eBDdndZkuB_0F)YSA}M+3s01O71B~k+K@#2S0Zf{GIdp;6Mzz= zCjoU_ft)9j-Xs@!%tNh};F%S!a-^#YRDV!oKutwTD^My{#i7?$u}r;a30CB;47MmY zEBMDr-u}p054d|HErQoQWKr&g(zg<3OFSD0yF#W-#BL=vq)@=>ma_WsI#ZKRrXYPH zPx+9HQiNkgic4fVtnd@@W{|$HMUA$B{jZhK)o)EjEK`xfDwNU$po&bFIZZ&$${`u9 z5*-7#UZSFmMEQ?}TQ52BOqALm*K3x{%XILF+OU!=*rh7B;$4xe5*dT&83bQv)W<}m zMU;Wae?OSxfa&nJB8&=fPXv_*+dbu?L`B)#Ns>gupN4ex+s+(Zzm>PTZja#J_OEUM zc9d-rNkc1Wi}DifupIxTD8FIwPav%U2dEK$Qg%)mvtBp$`jX`yUmjX*cc5)u*#By- z+;iwGp+A=0>!(xH_$1VxkYc@eb=8qBAEM3QNa%fJ-H%7xD@1vU{;V4IID{``&q|tI zBO7C7D;fvB0+hGjvJ+)pxVN0dy4bH@PR%jCh*_DK5y%l*+L~tt>>4r$Gn)d^0DVzw zGK*}WUFa-&7hOtM(@pd(`V~Ek*-9(sU}|>qhGf)*aTDq5`9WqoSjlMkPe$ zMU9MlFzTtO=c8G)G1@meAlee$Fgh~2MRb?w(b2`Rt7D&!eKB@->?^Ua$G#c+PE%tG zpB8?1AC)X-6Y}rM7S>6pTxRX*+Nty--AyZL1szWdX#pKU zht)n^dw=cRpO?9K|BN~vU6Vz~sYRz2oLc4NJ2mOF*QsaV+w_#rDIYW~tZ`0tcRq#t zJ^b%HWv*nTyJ&p-eCB|=W@cD{82={a%R@pnGy@=0gU zHkeUk!2$eE=hKJTyMl`+^Hj{%yYOzj2VcTf`q3s=@^#|*wSW9!JbR2k#W(Pcd=uZy zxA3ie8{f}A(aFIFM@$ze$O85%-EX#|a= z&G;_9j_=W0@#nM$Xe)XzT}B_m8s$Cu0sWf(!a`Y;Sd*|EtV0%J{c$^6%bsN~LGBIQ z#Le7+vih9w(Bk=R`~iMeBm7%U<2C%Kww!;8b;$v(1wW>(;wQ8?K8MfM9@J9#C;Sm@ zHJ{Bp@PoXJPvGVJA6lAsy&` zl7Q7nYr2bM(6>k;T~B(^W26f`O!851YrR;qm^CMNutah@Yf0{8c5)AEN0zfL4Tbk#E^+ z)SvxEJ=i(w%YLN|xd*lKKpI7x^JLnBr_y+yLY`%n$D zy3_zevDErfQS5DiQ_FOEbEXG^dY}PV^w@h;?BS*06)<7i1(oPlnU)NGUUrB`k&9&03Rt zv2K2l^(8A<9(kAzC41OB@)Em+Y-cxt z{T16uzGl0rg;Uyq{Y=BT7Y*Y^+K7A7Xx@mn#CqGGP9%Y}nwV%`;!TH;26P1Rq4~s2 z2M~?6CPtb;JZKK_q+N-DwkK`q9@38PC7JXPvD1wtnQkU2bPLwETZw~iB2}ybnZ&%v z1~!RoWEEsB8%rK%C1f2NPo7{C$YX3A*~F^IW;TU9&!&PN$AGn!00(H?X#EuweO z2k86Eg9Wn2tOaY!I-nzdG0(3( z&wFWJeqP~T&Ac351HAIRCVEZty2op?*B-AUUZ=f&@cP~4X$mq~O)X97rfgHC>1or8 zrdLhxm_9X~HT`1dW?yq7bDY^>?r83A9%L>wZ#3^P?>E11K4JdGe8HP}`*=6>Zt89K zuJE4az1VxX_Zshw-oG`7YS5*@q6Y6ZxZ;!MljYOfXPD1epGu$EKDYba@3YqDS)ZLg zulv03bKE!DH^H}!Z?11Y-;uuKeW&=&^IhV*()TIf-M&YBPy2rFd&$q>=jWI1*TZkH zUywLtYR0Amp=uT@foH9*@`*u`^**^n=llMQ@7U8GSJNNc8FG z@1uWf64fNVNq&<#P3~^8xyha;2b&yjaz4fqV~uGU(=%ph%=nmjF-u}r#H@?i9J4#- zK+Fd*Ct}XTdd4=7?H4;Dc3f;_?CjXZvG-xdyfyYv>~~FVO?xz*)O2RkMNOAA-PQEn zrr$Qb7-xv{j|-2Bi?heIkLwcGKWt^Sh^X9(I8#Rw>Zg1Ycd6(w>n~!QfzWJ2qyPLn!{G;Y4 zo1bg`OFWPFi4Tj9iBF7g6JH%aH~x$P27>VKk@y<6NzUM&nMOD~B&2F^&+r#Z~cDud3y^FoS zeWbm_US*$cUu?h6zS_RQ{-S-a{cZaZ`ziZ(_KOb9;p=GVNO1IY3~>}YCOd9+Jm}cx zIN`XE>`3mI+&y_va$#~=^7Q2S$#*5MNPawdQ}WK_{mJhoA4~o^`FsjV@lFX%X_AtV z(mEwOrFY8El;V_0DL17oOt~lJ;gly*HmB@PIgoNH<-3%NsamRU>hRR((u`?oY2(tK zOgozPb9!=m&-A(J_oVMl|GjlY>!GdhYrVb=Y16jN*fulUY-sakTaUK6ZEtD2yzO`G z;@b^uH>Ta)?Otj3S^J>&x$OtHU(^1h4y;39hYlSkb-263{tg#AdUqVu@%D}nc6_qq z_Kt6K{G{WVju$(5bqed$ywk8w6FS}B>CH}OGh#A^XOw5`$~d2KIn$Wwn;DuJl^LJu z$ZVIHliBOK|3fn;XU@-Dlesx_f99u|r?bMd24s!QnvhkQbz9cDtc_W3WnIqp&JN0s z&W_Jc%kG%nBRelUKf5G*a`yD>x!FsypUi$W`?Kt?a(Iq8Cp)J{&Vrmfb5`Z7&)J#t zYR-wAUvqtPQ*%e=F3eq-`$F!a+{3xw=l;^!qqA@4#+~Cjx9Qxu^W4s_cK);r>oTRw z>@LT;obNiW>%ndj-MV(0+HHQf`@22fZD+R+x|_SV>OQ0U!tPIYzucpBkIEj~dwTX9 z(DRX=pY^=lE34P?UfX+J?A@yOz~1wFuj~CmAJ0B*`*iMeQ=bieKI!w1zQKJv^&Q*y zmcC2-KGAnq-;etK(9gS{wO>lV-u))@yRF}u{*(L9>VHT7HT|FJ|6>1_`XA|kvj1;+ zJTElQn%6EbJ8wu{e%{o)*?AA;ZOi*O@3R3-2lN;)VnFeL=>rZ8^c$Elu0bG@`?Z zej~<=xM{@QBi4@CJ>ugLKacbs89p*;WQUR6M~)g?0EyGO1WxntzVqsXYlQG-U^ zK5F}@uST68?K3)hbn56KqbH7DJo^68TSmV!`oqzm=X>P0%}tJ$WST{}9biA>F4) zqOt|ukzB-@WFoO(PF_bl{a|+x&tOL=Tk^U+ce*40;<@6heHDD(&iCm|5`i^jq|;`1 zAbod`bheRns7D8*K04wV>}zmA`3)h7+<|ffM8339y6v7&WgTZJp1sZWZp1|FS)Yq+q>!Log8Vagz53=z(>4f2=P%{@eCugtHal z+^GHU#=C?J<;SiC>xF(`5*d0!7+L!}yBh6D5)scl~7=PSkD(-*)ir zp#7m4z6||a9I^2w#KG@WaHClp;=qm}2g*D7-=TR!gdGbs`jc=5lV&mw5!VBdh5uPJ zLVN=C;?;)3{TK;ldr7LaAA@@@^pFFfcN_^!fR6GH>DtqDBru`&(p5Zuc-QaRcWbwU ze>?c!p_kBRZV+rF^vyF#H+mEF%rl|uy$Kiw_fY9}`u~yL2K;SMzim+VqWoL`?Q|!^ z)d_KRLR|k2{dcF?19KpHE$DHK*@3kmGjnYXGn2L~1MTL&%uTn{UcMUmhMB=XAQ|}n zmcg)p1as{S`UV+IYoYruz?$SPwCxJgjlE3K-14$ekOqyc%Tw|6`5?D`?#u|_& zYy|8cWH_F+2Eu`sKnoxSumPPE+QKfTFXC&DFKJ1qLgzmL?S2snK${DI&OZpceGA5m zDA4iX8xFpq;LD)n@l9kAzE#`=jDWngCs}kJz7mZfgUO4v?Rb0Ao!fv1k*8j;pCs+E zKIzUMgZ%>Ogt==LGvXUT489%gAR+V_#C-@~rFH`kkuby&hVKcn_#%}8zC7>^0beTk z?BGiQUkdor!IuucZ1Cklr%nX$y@YV=)M7Woz5c??K*LzKsI zq@5s71o07s^$F=sKdHR}I|4ifz$EfI>SG}p160#DQTAWr*yyoPq+Fxh{@(_XVCK0v2!{*3iFc3kT)Sd*sLfWE$ zW;6`$u-dQiUKbz)X^)^YkY)v}lWv0FbbO(U1QGxZ2%;L?8r&M(8r(z4t>ielm3}~i zutmb zZP)>KTXq)Ve2(?S=cFrJO`2%a;NCz=*rOtR@Nu*oPI~j%Xy=%hV}I*7dZhLuzEZZK zZ^K=KbnPLnr27nMLGQ=f^enz=-jA=Fdq@a-3w81v>f(^Z7<@l#0kj9Qfq_69paCTdHR!SKpi9WZ zl#xehH}V|tFntX;D)Ai3`6=ik9!Gn5gg!?erLz#e2pt^-zK%ws?pStik38~qX?|51 z_P}l?o*6@PtYlGEMxK?7%<2boQTL3YFnjjyVI|4^diR8hE%)%r>(?D7Hgea>-LMpU z1330%8;J*Y)|#OK5xZ)|4qCBWHjo5em(%NpIX(Z76MOZMBSth8`}N}1z#~%X zdc2nW{L(5KR47cJ!u-l&>RDJgaT2*A&7X?O$|sU@V=D3sNlj_V*nDyfX97yeVQIcA z&4Xpt6D!ER@`|D|vTG6?WNT$f*%-2^vNFj=*1@!shhaL%(#qw zk-2FkO`KXl&U{d&lvqKEz4{b=FgB%2DpEX_JigLw2$P|Y4U;ZCuVzV$9rG0RBFqSw zT-Jz1y2b7zP1c?lc6W$pq9z3;cB%+dv`n$DhLR@!&CHs~+bh8HS9}e9S)!9?OHY%> zA$&XShJTasC*x`3yD%3SXBgWV8ybE!oHV>|=wi_LGR$rtMtkmpkVI(WtbvIzElk4> zd&00+Wj*pG;);ep_Ou(9!C$0L@JGX>;1K>ZukklY9vLR}BMYz-vm5D&U3UGkQ+5cM zjnf75F@n5?vG5J@CPvkF$a~}i@)1qKSL<}z4qvXbv5&3??L+hM1$#Ihjj!0_XepgU ztLQX3lg`2ZrA7FzeK%c8AE!^yC+XAl8SF)Sjy_LcpfA$xbSK?SU!t$jSLti?b@~Q< zlfF&gp&!vB^iz6*eojwgXWlpTTlxe22fe_W;k$SOv$16CU~9`dune3e=*+sYo~#eP zl@G+uz2R&WD`2nSi}~y9AbT6%%|Bp=*(dmV{u!%bU$C#)S@s?Kk)3D1uuJSRcEEA& zgI#{XydjU|(bxqSk9}}-9~rNU33q2`0T}Qz5Vn6J&2u&hp=DiF#Uucqo2_l`UUnbou%K= zAL)7QUTV%-vP5QQDXcYXhrLXh*v-_1b!WX;UzW!Pv7y)-G@8AH{Xnl_N6?$>5PJ{1 zgFa?Q*>QG~onl|IGwdAup8dprX1}uE*cDE(^U0S7@(}DbXpCKfal8djbhQ%fSW2Ra z)Irl|TiTIk(ay9x?M?gBL39`$MGNUzI)RpB$K6zV6P-0PWLi(poED^9lD z$?j(NvgPbS_Aq;tt>F!@`_RI}cm$8)vAj8Ng*hZe9RGBgVn0_S7O8e}En)YtW$b>o zf<3}k{b`Q$K7o>Fud3})khmh`b{uwSm14j0B<$C!!XEHxWCocj+rb&^()t$rw0?y4 z;b-jGx=4P*+P#)i%Bg{RP%mnx4X7{mr-9V+&*w+(Q@d`x(_iRC?ESio-CvY(X26aS z9KK==m@o6k-Vuu`i73|OhFi$(tX_#>AKY{7dG-Q(k!@!?+3x>93)0YUiGGGc6C-Q` zG&YeW6#bMpZ$}tw%G(k~f8psc-@{yk)A!)lTG;d#yn%B?FrEEhCW+(^%KeS2`Q!Wv z?16cjKZAWRFY@htC*RFq;&1Rbu_xvo{;?LUg=!78a4k}^YSCJZ)=X=OkRq|C?;-4- zS%sa3>#*Zc>?G3nNAAGB!9Dx{cJN^r5kHLGG$H6~8(}A6W9+MGqQzGx8{S(6?h1boCQTTfxtnf(}TTK1zrbi#GxQ=e#CZrg|VB1%B}? zTs{}?5}XPWIU3DNWLT7sm%e(wjJ5mWqFCd(VhX~n#pN=hmc{#-m|yDQi8mSKD2&g- zPD$*Xel4+ctDV+f^VB+M9kotchL)*iY1vv%UAPSUC&PFZ_CQVH zQ~5MLozLJm@tOQ)vCB*D_wv$AnuliAytM|JkLIiSY5tnXaTrpP#j|-1&*h!5o3<j%e@#8dVt-ehmaes~iqhORT#oSKRtT4qsY@B)%ZfQ!l zdRNvrR%Tzar?7ue)c2>@<+vXE9NkOKPrQrPug@YxY~h&CRiHl_gMDQ~F)H=K2$hMQ zW?9KBZgG!ezKFk7qp|aX$0faCC`uh9l;0X6(rvi*tjeS}9EI)`U43 zCk!ceZC1gYqD_T4U7HT`X6dMWh7UXbrVQ99^_ zbqN(Y!E-zdgpaFFIEvZgHmrpn!)P)M^Q|7lj{cCN1bm36HXEUrX{ZyVZw}1zx+gQ? zx>=hcpWGy$AbhNv1&@Xn5{%V@Ny8acr21}{bG5r*mT5~Qhv2OSRqDojAKcTmWiaPz z_rfgGmcm3yfOirolnkhepl)`1Yl3iV<6xF)<6%~5B{0QXUPyDP-1k}~%1`WmMe3E* z&`5HJG1%y5G#NF+70h#gGMqDfX*g#1(D0UFpJA6_i(!M|F~h@#WrjNp^9?f%RfbYS zkzu$Y&(On=ZD?mmHncRv7{U#~20w$zplMgMU$vjKbJ~~KXMPm>(+_C}uv2}PwpH7t zJ*7Q{9gq)bOSL<+h1wi#22xq3jl)jO;o3m05B7FuqmN0)p3at#b}Pn-AoLcV*c19Y zc8dPMzu~9(3G7aPA7jCO^i4a^Q*6X&u?Az$a(*{ojDBk-`k_)@#E0`d^!wSo9d_zB zt$E)WBFZ}y6f$R3ak6;vD{};V5(*iI8F!bX%fr|dTnU)2Y zua*hZN6Ua;1B~vSV0&Yn?+DwB8tnkv12q~6+k{y_d)Qv6=XS6IQQMF>%n;gWZLtt| z9`lD+U~k4u;$^I?p2P}^@$vj|m@A<#Gw=a?6n5U;%x?vq$4ByUsQrbY`|}ZeEJmOO zp!=aEjKO#`A9PK7e<^>qX=78?W2l0H2 zYO_K2-~%!0R`FR#Q4&rc*XFj*)Th?44Ca% z2bkhp3uCD)4W@%7!%Si}n5|d>%y`xUW*ln4V`Yp^e^c$F8(yw5iqNib=q@Tk)PEWu*Nu%VK zv1-EkcDfMjr$w;mVI_t0;W)82o6dnf1FNf|Ctxy1>rF zN)J*;J7CQR38QVW`hx_~RICHjVcW4HOvWgefVE)~z63C`5PAbfZh`)Qk-^XFU67iqkaOfa@&oyaoF^BcDZfO1Cs#1+GwixIQcr54-qZ*C?*nKM z4gM!}6YtYY^mlrNp$RaJ8JQl<5qB>EV!wpopJjab!OyP^^6mnFcTuTh1*;!$#qwnEG_$v?Mt z{pYk5@BPKoj9hv^kBZEoe)O=~7mpTaJhJ$d20}MK|iJU5sA=K$zB86D!mt}ffi;m?jezV3-njAuc6cNg<=L~ zs_)`E;Cs;U-K_UXbS@dIdZ`bfgSH^|#m) zu^ivT?#IcO2k8o&&wH3YLRZp9=_;JdT?5H{j6RNUfa~ZJLBCz0fo6gQjsm zbd3j~Z9E8l<6F=;9)iyCU96Dahpr7hG4yTdm7#M(4-LKBahw=#18wAIviEL__10N@ zso5!dbm-&IyVI}nZS)Kg=WEa6Ya;r7oZc!CBLVbu7!~MwF+yOC@GE5F5_C7eLwj=t z`Wtlo=tVgC5d(S>5A-EoWCHpVGkTN;=u>>rtN5c|2}I9gLEjRB`5VR^%;7KwLEDA# z2&WjMAyF~-VjPQg9mXkW1;v;(9=bt{V9*a@G=q*1BOCOD80D}s#1|;&Put1yuMB!a zjD{>zjEpRYOcdiJ>q1tsu9%DFihh%nL&w@3Uzj_yo|Iy?D#q4tNEe((n_%<`9@|i}^$k_6Yfyt;DIcN7*WTWt@U}_*(29naUn#>(~=m zc|VD{`O~DDZD7x^jp&y)K?AlKI`v>Z|x} zx)1tQ%xy5w$2jxF0(6Q zHV5r3BQv4V#u-*J182KExF`3Lr&;C951L(lCb*ghlAG1+@Hx^Sr$oQQSHe&-K+GGV z`IYlX=zpzZUdfwqInRVHSk6145tj2%=!FN0nJM`KbJO2(UN#x0(^B!R@iu%3Pv@<9 z8=-%YTCI+}6V9z=IyEn3u+Y7bSxWnYUZ2cy_4^pt^`0LiBbj~8*m%A1U_8#+mhy=> zb6d_Q@yWb`S6){;H0x@O6J{nup>Gro(-Fnlq+o!`OlBR?!igqd-*c5 zgWres-u)PN9>i(nhcG%nB31;@9LOXo_Q!+w!Gq`oEv4{)aYBeIK}$I0%Gp^d(PHR~t*D9$M# z_s?jy#Q1f?wi3rLXxJtZvWZ9Qe2VJN`Y^20!5R;7>ROc^+pUFNjl+ z`0nS6?_QDkuB(x?{35<3t>Kr*t2i(DJGqr#hJMRP0{9ht)33$-NCe-FDR~}e%DJX# z*lD2|H4o@lJc+mFMMi2SGFmf}4w^UaRgyY6%uQY+TgVG!E4~;%sriwoG=H)OTDq6C zK*JPg7knDwSHXPd7NUbrMuUT=5 z+5>vpXz~kmwJ|uM*%Vs5W?FMCUTc9>ek&~jXE>9{0?me1zk@8tY0eZaRZA0^KCupz znnyRiBk{p{^Lwm3f6#KtHmx(UYF)@(T2~UKbt8?n?$EX^Bll`O$P*-=Jf`);Z5KkO#@*T3_-2be{XQep-JmPa6Qu!ys+2Hbfh$4TBzHgfqK?O~i( zUWv2HtF+ZPv%D4>lgG7n+7sG(?MdiQp4K*Cu6c}Pkvqv}KQ zwOK0HSu(dsb+Rd^Ui7w{OqJnGXNFTfa#Y4->TN1WTe3%vo>4vOOc`~OEj`!RIYE3J z*DZ&+vrMM+a-$u_&NAI*-BORGm!R>QtBCyEXvuiBheIzpyWLyVkkz#Qr6+qEu(ZcJGjI#X7L z^fY%JTaiDd*quSfWXs9YV^Yz}x6nNFw>-M)4ZvI3`s-cw+V@tr^fY#@Dk&{0HtUw| z)lFCqb2nE;{oH8z(AZsPm6obZN2)9Wn%eE62I@Ny#eYWW9T_+p~;)^{VNo zEXi!{CoScr3vfS|(27(i*-})^rO2AoE6Z+^;*apImXo9N zm1hSqh#I%jLUF<(!ow3N$X&UdvRH`?w-JB;~yyV5Ngh}lJhRX!H} zNRPgL$T`)C%a9t+uYfu!^tikPIiZ4cet}l zhm&18oa`xzJ;j|}I-Km%;qc3M)sbYq+QWXehl(LX#gO41gYHl<=nf})ww|DjY_|mI z4kx>O;$&Banc-fTy2HsXpE%iDtI%7!hb|pXcIj}kXDaqgcXsJ;vP*|#NB1wQO4xPm zPKRW7IvhUvP6?2V^_}+mPG?e7Gstj-jdtbU40H#YxU1)KqtR~b{GCCnrjp^_RCI?k zcdn*_v`cnjyXQ_ioVio%`Kqf?w$AS6uzR~X93J_qzfrbg*FA*;>@J7HlrMTB$>bvK zE>bZ_Iro*kE|I^=ZNJKmvXh;f4BU-I+12?Yxy3R-y`M>HZ7y^PhN-Zw8!{HvjcZs! zWGn7mVPjI1YLqiUhglCxMCdRU>-~;yDKCAXFRnk(+j4A5N^H6;_!Ya-AYas@%Tygx zrhE63r6eZHT`saz>&kNPO0rb@$a1v;%vO~+XX)L7%#S@udZKCQo<7Cy&D&urt}7K^ z7wMi(C6$@F?3s(NZmF3{4m0aXo6HCzRT(K(txnl);oDS}ZSGmNsf^fEMv7G{RJPme znX0feT^&!7J*BmAjNq{u^|q*64)fT$(ZS|MJB(xXn$#`%qS-~`HCF}txzUpGY7f1) zvDtNbge|#5PlW}TURS2Et|E7llFzrkTlEEY)d1}7-HYyU7{|#Mb<3fR!>r9q7}B?n zat5TT%I@A}>JEo_oLes4Xc>^-RUXdpR5jV%hY#K1FqX(S8z8Tx#g&!1%Ut4;cVmez zQo5x_Q{qa4^iVBWHbFEdePHk@ac{vkU7YMnob38I?^Ti@_NikBzfT=i7a{~j6-1U^ z5ayD)My-O&QmsBqk5Z*WzJ+w?Z+VocMy+f;{1Vkvl`TDuCHj0!x1<*<8E+h~Ka`f7 zG$q*`N^Trd8q|=bJM8B1uF~;yqh%;pd)SQ=q`yqLO$7^EdU{V7TTxtGR+?W{R8nXx z)srDDhp|-FkXg6n6E_-L^#o+roP@(zF2z`{lx!tF z*{YJVRdm@(b&#E=BuS3BSno^K0h+y2?9^DCm1`(>Tkk6cLyj{v#g#2bY^>{S4a(h@ zT`G=Tk8)i=^|Ym^w^L+XSnp?=%dc7QtB{lRxq#iCZJZ>sYd22TExlhgO3QA<2^pv{ z&AO%6xQoVPy+P=fdR*5abb+^}=mHO0GUx+^?oeHVP4xmcSMQGnq;#m2R*DjZ6n9b3 z9nLV+^w8#N8`=cjds4N$|uLwz92AqXJM$8Y7%M6)SK!^ z=i92A$Z_u`bcf=|RdbVESL=jMMLL{esMeX|-a2)MlS5Tkj$U1Q+tVFR4pnzK?yXaI zI2u&D%YHyTm(10*UNThFiY|MwC7+Z%DN9qiOLNbi?f{3H3n*KK z;kI5fR7=f`H04uM9f_u=Pa1SfJ~g{&XY{Iq(%dUZcQ}kw_3mk^tBrb1b+$F*RM~2b z(`CTAW!Ei-dAgf0xM;hZKX_cB`nl0ExT`(vS9>^oraKcNU#Rc2*LSL{rmHrP?%oD; zhguQq4#l3UL?+i=WORpO*BuVybXgK+-O|h1MI+O7;^hokiBztu*`UcwhcjedzC^!+ zu}$^84)?xScc`Vg?r?^#YBblqMsI!L>;F}1ZSC&i@&nxlu zuuKreCHToC!BAEr1MrgJiBqGVB1B1uFa=@KLlvZ#3|FT_$dXTlE&24&C8>um8D$KT zl5vPrr!o#nh&TkH;t-@Bhfaw&B%g>w^67C%QjbG2$~Xii$_ZVytO(f2UdWB)8|N)^ zq0^P-F$h`F-ZDt#knbm@OPxBtQOQ9Nwj5z$>)|G)%X)xY4y3T9-W0Z+8^M-3c-V3< z#R^*gK9Q6u-APHA`k0=SslrQB;iakY(o}e9D!eomUYdGe|3r%~wklnEPX@Q*Pg49z zD*hy?@5giOIqK(IJgu-ae_~Pj)UpI|aM*uxb#Y}?NqJeFPvE5Dijwjo@!=NV=87a& z@Kt_dX@&#X=7Q?d(&8$~V$x^nB21rx{K5$?r+M7;N#oG)#3OTYSrNX_D0*TYZ5mTD zwi>bFnO+GtRTwsBWypyg3N^=PQho)NKE-47czva_Lbhli(PHdf22t|-@YrMEpSfK{8zP`S*^(Mn4y@)eV6F#4x&d@W5iPAaZM zcA zMWKuH?=n_jw06<_oo*o!RpZL5E5&kK@u;NBg$nNmbKPMKW17yWTqNXjP)Mp;f5l zs+vj5s4Hn4>vu0{r?al4ogU7TcDiLrJ00~(+Ue;k={ldfOgMd6nZ*q>L4E0_H zp4q(QOxP_32Yk~5>wHIDodWUPnd)Q}QnGl*jdtc-_}dzcD=(jrUr;^;-R8ssl}=p= z;IOH3v#E63GQBb7Dkv^3pXy?^tLSvuNpjd#0oY|P2DiS0z~QiY$%1jDBvh%yq>2Q% z(awYk|JH8)Sn0_k#YdhxenC6=1?}V)v;+I*#VHLF_PO^W`aLK<>K+tvvQgX?!X*zQ zyl@hJMbtW>xT1_SoS0uR0Vf;9+xlr%{j3Keywl*&G1whfcP=utO)yS>2Oq_`@bKVf z!O_A0eP(bl?idNyO;a#ZZnn#SZ@)H(Oeog5PSvT{p`7qw@T7{~(Kx#nbY)nn)qS|8w&{k_Hy^ zyEB%c3qe1CmOg(A{Y}tm{3PAKW1a}YuWSX~i1~idTS5DSUJlw}SsC;{L2n7#7_=T~ z6LI}J^xv80H9@$GO!e6Ay|)`3v|Pwk(A`0c|7CN2&@8SYp85D}x1A;2* z%>R%N!V`Diksu>L0xt!g5Bx6h>%f}7gZ?|>(!&fq7I>JDz;^==!rT|Q2j;at+X6Sk zUz$OYBG<|c2;5Ld>;8YAk6ZYG>jGCf1 zCk2iV{CmwJ8UCM}|A{n=6g_I7ZVndhBv3c|2^mrJ|CUdWz+9x^-!VIdJb)1XJ`?RT zunpR0a$tgJrGd>vi~XTit5`bPP;HQ9d zSD9Z1oV?0M=lTDJ|IvUCk-I-K4+R_u*c-4bU~9l8FJ~;0xv|zOiH^a>bIo*Bx$V35Y92S80Hb_6D>pdLYhCw5T;7AREE%2^2AAVvh>fA zoL8hz7fGWfAeKz|^qll57e3?&?zX15DOJ#CB+no&?yl=yE6kmeGg8uXB;8!n_enZm zzBNditE5k+q|>E2SNe>WH1r_|ZHtWSqNJY}H1!an(Mrj=QutGE5j*au5cDYFPtznl zMAEG!{gC8&U(mQqLGU~!XxtPd-pZCfCP`PySOO(IQ_>Tp87+Nom$bNHn$k6b#!W-G z5t7RE>F99yH!T?NXeQr?_JgeF1P7rSvZBgTOvK$K1FM+dyyDA>sl}$u~j{h~D?S zBk7m$gyJq}VIGj?3TfUdP0=4x+}R||)ws2v(gE_Vqf(x5OA>s1q}fpVpOv&lnysbJ z8EJkh&9%}W_n;uOO_KJKW@BkGX>wtbOE7T@BhJlFCImM(&d0q23voAN1Wvx+hql1* zg@O5PhGa6YW#U_d_YqSM+?FX?&vpN5&$+zaX{Rr4Q~l#V)Y@PDIp25Mg8y3D-3QOz z(o~=OFJqH$xoPOmOq*wSUdry-?5f+P(X; zYv>!R<9gv=69zo=IR7YKloTHdwo%~=*AjO&H$^sE0=hPSD92THI8<{{DU^*_YW z4yoB8Tr$QTh+VXMK>7*#f-6?t*WJ7}jjpGNNyyPTgn7gnqD(o~m3li@amuI8mS2z4 z$tQCQZdtaFPspN3wKFIBJG$%7QtL|FKSA9;RNTX27!&l=T|u1@n`OLmQ(7FUWSWx}0q>QA`c>$=YWh^)yAvR;++ zf%6>h!gI=icvHwDQsrz9QhsVgJJ7??CD|FK;B}U1tz1jON7*i(8>Oz7YVoc!h8qpX z#rM~5*5`1Rs?$~>{gsq4u>!?yp9Hrq29wdaQ8661D@NirzJ~N`7EIs4t#^xX`B~b=Fc|Z*D5TSZ-?+Owi$PqMX(oeb6FJIhI`9m*-qSA)|~CZ zon@`qD?E|g*go7;){ec-JMs+n9`4n8oqZ^7(PBq%i`ED1C~nX?%s$24Sx4D1+>-Sj zJ1*|UVyF2jrS5WT}H855ceYDx8Xj(Ew&WD zK5_y6ztG?DTS%9gku<=qg+9cDn+gL!p9%%2YL}(1RmV%2cO$&^V0rs7S_bHb@(q|0ytx+xd8DWk=Jj+Zwqquqc`;NsS0v>woQ+;+#&hSEqdZnH2u+;zfl zIArh)>|DaFaU=*g#w~}5+uLC78e z&J*{*hZC!8mlmvlV$kwp@!wFcjWw)%;=$Vj{~Fe%nc&ykZZ_7-F|q}F9!(=6BvEJ4o z0k0sIz2sG-LYIX7^Cfxgb0kn`D6K(+h6||5a6V}Iw2(0q?u<2p7LsPd&9V4p1SxMO+#oCT zKSJunEyLcRh3uJd->_Ky3JEmfR#~B;5^`w59mM!u3Mq{y=nR8E3z;SC1D@Z7AO?`+&;pWtbNi=RxeH8R6x(dIhxSFme2BFaa|GSW6 zgOubZQii#d;RaHMeWeVG-;W7^qzM^rAZ6HB%5Ve7u$A~jdSmfxcTI7#s2MklCXi^{ zESd&7ou%VxYsj-1@;s1mc@L;R?g1?T4gCmYcmX7wLBbb-7E+BK98w*Kn>IHRD`a~! z@e_A#;@1LSfSlvzd`P%aN_b->;ks<=QmxCgF3GwK>(Z;stuC>;tO_X&gOsL|Cb*BX zHEDo5DccY;?xk!Cx*ep~e2w(_Nm-4Pvf50_YMhkSreb^`RyTc4)d|B@?sYw%W)w%`qa@xLbc`u`6EyZ!t0 z^XcOJ_k7B8)phH~V$`_NNRAkdF;)!0*fI~}K$;u@I>^31OZN0R=;Ob}UC<$zODsWObuWI$Xf@^! zYh+LJq3mN$$lj#}eZwN$hr5<-q~eZR6SW9QrNNNMPBcW^6-&d!FZ9qx_=TSCG(wE3 zG*XPJ)QX!}AD~gViS;2Gjo*#fLYv^`)NM2d_onWmv0}`nQeJ5@A+NMK?n6C74n7J#jM(71Kt7|bYA?_PAQ4CcY=9kb0LefK zkP4&$=|F3s4bT?A3Y)eE@S9h(BhU%R05X9rAREX55FhOfAV%61=mvBLdH_9vUO;c4 z56~Cr2lNN>fC0cjU=T1E7y=9hh5^HY5x_`b6fhdd2MT~fpa>`i#sFi1aX<+$9+&`> z0uzBUpd6S4Oa>}|N}vj;2BrX0foZ^WU0;n^;11wUUz_Y+6;5lG3@I0^ucmdc7ya;RqwgWqWoxm<& zH?RkI33wTJ1wd=0XpI!QJNg>1A9x)&0K5Sl1l|PR0^SCo7o+b0?*bnH9|9i%hk=g) z=sNL>(dXz<;8Wlja2z-RdB6^z!$)mz*n{BSRqgZ6a!;`vA{T>1Q-uY z07`+0Kp9XDOadkY6+k6W1ylo5fT_SVU^*}ZxCxjE+ziYDW&?A8xxhT&7GOTG0JsfU z4Ea0@d@Ch!5qf`(ufVV5ZABllgB0;S(Ckrel21*LP)26gE`@s^9ZMq6Z$$!)0V@y% zL<3ELEFcHS1v&#=fUZC{pgYh5=n3=!dINoczCb^qKad9u00shsfWg2JU^eh5unJfW ztO3>nj{%PZ>wqVK^}v(BQ^3=}2H+WBBk(M+33v|J3_K5P0bT&M0xtsFfbGBzU?;E( z*bVFfUIJbQUIC!*B(I_G{{N$VyoY|_ec*496M7lHhJFR8CCwNCD8K*?Xn+AQ0=|GB z;12`<7T~{7#@JfO+GD`u0Qx|NK9HdgWatCgQvmuvhCYy?4`k2c*VQ)x&jFi(=YcK2 z3&2+3MPM7S9oPZv1a<+tfjz)W(7C(}yaMb6UIq36uL1jk*MS4T8^A%}P2eryZQu~_ z4)8AU9`HW!0q`O45pWpz7&roa0vrWC1&#s7ffK-Iz)9e9pawVvoCdxCz68Dkz6Q|I8$8o&Lw&X>!ELn?fd6DLK3nNLI@C+ z04)?KZ7HR6q3!Eyc`aR7T3SkJ`vA32N@)wFFI{NED^M)`zh~y^>dJPYzt8Xgqdk)I z)wyTRoY~HtnYn}e5Rz~kLK5z?N|M4L%;aSQ2(x(Hi;#raQIc$o{I8sVeog_IK#8C^ zpt+IP>vmJU4?Has2b$Lzv1J^@Ns1L zI5K=389t8OjNjnb$nZU7j6?FD@J)UA1$?6)m;a7FiTdg1&`q@P#35h)C1}T^?~|91E4|B63|l65NH^*4741y0<;pe3N!*bigfS8 z_x+$xf*t^&y*?37!xjFOt^qC;R42l3m6kFU`)7x zG2sHngbNrGE?`W!fHC0$#)JzP6E0v(xPUR?0>*?37!xjFOt^qC;R42l3m6kFU`)7x zG2sHngbNrGF2I)!!Iuremkq&}4Z)WU!Iuremkq&}4Z)WU!Iuremkq&}4Z)WU!Iure zmkq&}4Z)WU!Iuremkq&}4Z)WU!Iuremkq&}4Z)WU!Iuremkq&}4Z)WU!Iuremkq&} z4Z)WU!Iuremkq&}4Z)WU!Iuremkq&}4Z)WU!Iuremkq&}4Z)WU!Iuremkq&}4Z)WU z!IurOanL%@de8>YM$jhEX3!SUR?s%kcF+#cWuTp)%R#$9yFpig_JH<+CP0&*D?$4} z`#}dl2SHbX4uP%)9R?i%9R*zjItDrpIsrNfx)yW_bRFn4=z7o@&<&uopc_Fqfo=w! z1Kk3`JOpEP2)=9xzHA7-YzV$=2)=9xzHA7-YzV$=2)=9xzHA7-YzV$=2)=9xzHA7- zYzV$=2)=9xzHA7-YzV$=2)=9xzHA7-YzV$=2)=9xzHA7-YzV$=2)=9xzHA7-YzV$= z2)=9xzHA7-YzV$=2)=9xzHA7-YzV$=2)=9xzHA7-YzV$=2)=9xzHA7-YzV$=2)=9x zzHA7-YzV$=2)=9xzHA7-YzV$=2)=9xzHA7-YzV$=h{eY05PaGYeA*Cv+7Nu&5PVwP zc?9|u=w;9=pkISt1^ou}8tAv6*FnDn{T}oO&>NsPK~shR#_9mZ>Hx;-0LJP7#_9mZ z>Hx;-0LJP7#_9mZ>Hx;-0D7bV#_9mZ>VSlPQECFAPm_Y677%<#sSVT)g8wMNf0W=q zO7I^g_>U6&N2w14|51YfD8YY};6F<6A0_yY68uLA{-Xr{QG)*{!GDzCKT7Z)rBTpo z&>GMfXf0?Qv<|c$v;nj+5`vE&f{z}8j~;@L9)gb^f{z}8j~;@L9)gb^f{z}8j~;@L z9)gb^f{z}8j~;@L9)gb^f{z}8j~;@L9)gb^f{z}8j~;@L9)gb^f{z}8j~;@L9)gb^ zf{z}8j~;@L9)gb^f{z}OPC=jRK&adB)kD$^`1>sAM$k>5n?dJ5w}5U1-3GcHbRKjE z=uXgGppSt*4!Rq359kx1dqMYs?gxDm1Ya6{%5(5jo`awA9Q>5$;HNwXKjk_2DbK-A zc@BQcbMRB1gP-!;|Gl4r^u7!F9_ag^CqVG0CHT|Q)1V)Keh7L7^dr!ZLC=DI0(uVg zQ_%CEpMic3`UU8}K`($XHcBsnLZDxQ5SNi&2E79MHRx5)Z$PhsehYdX^gGb+L4N?f z0eTbkN6=d!jIq-HfH1~Ne+K;p^jFZ|KyQOE=1TtnT?D-Y`d`pLLGOaz1HBLW7w7}f z6etXeV7xYf7)S!iAS1?a%(mnd{Jj8_1Cfr>z-pmLA{ z@+AC*3*2wG6`sLupgTa{2R#9L5x@Nk--va=pP)Hm2>t}k3q$ZHE^vS1%h2pOtSOj* zLr0EXz+HF-{?}B`RGb zB~HB?Bk5Be9aCc+9lz!O$HS4g@zD(l^gJ#Jbf;Uag(hF2Y))lYJ0I~@h9BB=74vV) zmfo5&KlRk#*-uc;5%HA#wo=NqG#Pgreur3L6n|60_u=RVHF>vV6)~Dlw=VzZb^P7(Up4;YhUyr<{Gf(!#hp=_Uea3{ z&h4eyJ*uzCxC=LoYU#?q*7%PZ9?{`ZyPJ$B^yMVqsqr7i+Nnsl78-V0m4p7dsq@Bz?c3_?j$v=G-(J@3^tVzAUK6>9`|sW{6d4Td zMGnbR(<4QN~v_Y)oEA!T&%9c=9K%) zj1kYh zlWr(MA2&NddgIkycr19$eu2M9-t*R1N~4G%OeVkz#2= z<44^>`H;LzJvV_{lcVW8#Cu#J?^c}k;5aNF(~ElQ?{azi=O%Q|-4=ZgHkjl+wUBqa z;Zs^V6TGJu_<0@w1n;Q@ejGQdM)jKDJ+;8M;+)28_)gq5r|HXUis0w^YIcm-YZvyb z#N<#9F8Gh(zQGtyJ-EP6#MzyCaDgAjsS%A|m#=HE`Z*hZ6g~yVsho6rp26LD(e^dL zdvGEDpkWg2iy78NF3K6`<$$&qm6m#Hyl7#CK1C7zo7&Ec(9=@)mxpc-{oNfSHx8MY zbgw*hWC4!t?C)zou)3!A)XEiiRNC@39ck@8JXRCfaVB}$t!whEa~#PzO2X2k-F2Hz zc8{E0x}-g;X0Xz;?!>_I^Lv`9r=_~M9rb#SzFwnNe_sh-QNgw;;k&BUD*Z`tk3r-4 z(75bF`(>}sXD&omQe^f}*TIqM+O21Y2ln-&cRswT`>GLV-!+57Cx;T{^zct{`M6Q> zjU7pLuRT7v;?BLz-r>s3&f(fk*Y>Z!zN_b&rFl8_>ed5mYDm|9q%I@%ihn0{*}{j1 zJ3FC3-L@Nt`mYoUKp|JxHOmIC8BR)A7=FgY25MY6^A@eXGP!2$vHp>}_B06!{@%4>KS&Z7D#~(*mEk%Y}S#<>och)kl3T^KR!~o?d&jDV9~)bQlR(b z%HS2l87YewhJR{et+~15hm%L{+rH|~y*%~Sl}LSX&Gmg1{WZ1E7u&z@U*xfa3N;`CyZv3GlAPVqx>m6T_I<}@T`iPsa9!nPGiRwwVVEknaW$!=QQ?w z5k3YSWuWPE8oRm#j@rrl6`{{gCi)wZFB)S-zII|B5YvZnq0dfMui^8#MjUVp3qCrbrH@3{6LQ$=`sU zE7}u1!An5k6NWo^4w^6`==o1!H;39g7=FpMAs>V^-$s)f?{-|44iG}`fwa0WFFUtq<@Oz>$v{A z4XcEnz<2Q)E%^6ExNpw2d5GhJe_!Mc&ff_BO*;7#kq0#S_v++NL|)-Id@$?|p}B>S ze>?(T8~XFya$Lwi9(j=Cq<;^uae{wqM6^8OKgn^yzZDiEImEx0k0^qFd*nNs{6{!0 z__s&ii}D-7I{7={g~#-vnk)Es;v6pFd6CsrUaJ0z@zg)4)H5TisjO6Ppmwz`82+fU z&8~B7ceMg55PVstVnYMc&luLb%{RW+>G7*XhdYgs!YUt}Ck(YFUwO zR`OOPdiBn?gt~E)nq@! zaUuI)gl@WJP_l*4J3M3_+8zdl6C6E`V|f^!}1q# zgZo?9lWSO6RBH8!2?~Gg)&6aB9did8T1V&hy9N{M#*#<+<~DS!7?6smo~v8wg4UFt zn0p;DP!B$VnU*Nei_-19jE<`K&$XU~&K=L=a|7AR+{}l~P$m;vXmciexi$QNi79n| zyr&2qL(LraMEJ{=a2q>)Crug+eze9L@w9>{Ns7U+UiRSmbn2ec(Tt_kU$NXk_}8yZ z{RPcETX|MtyRy(b-5AE%Vf0h*=#k&X$osfW{VnWs=QA`b(zZYV*CahpazoC>+~T|f z^ZoY}xwgB4ne3Mx;Rlq*7c9(Qm|{|r7P+h}^$wgs*3|n}o+XX<6%jK@Mp>cHf-O#C zZ!wjjA2_rIenQ0`=6IvVe^SLik8j@lvL8dk1Yx5>vdspzOhG2vL^>CZ1-wr>P0tyQ zV&{6auKbwWoa5+|7W1;8`uSr%>Ii%bJ1cA!6I_* zFo(mu88ax%)7fBJc6J&l{F=~;^_l0-Hxq?%*gdM@YMo>g{Pa(#DHh}IcU~<;kj+lhg48Vq@s_ z(=Cj~Ei>wu4#bh>Q+vXZe3V%a-PC+XPkFp1+%+ei+;ce`$#Hk%9D~u;30XDgn zm&qyYd{!mvMnpz6hNMF(+dFT}wapejo3<8uY?khZ#QUb!lPt_$n|W?;=jC(+E6Qp) zNn$MHIA-qY(Q=BzCq+C4I+@imPVk?`3GkR4>PrQ_6Fa=A?Zw7Kf%7qu*viZN91pT#cunEYon`3EVEMfDT21@P0JOL&s#F{q#MnVAp9b~6)918@KS0ZPCKf{xlL%`xhM>k$*jKu)rdh+yL*o0U;hwA4xI2%J_8ea0>N=6^9*1*&$KGaq z50I1Ytlx67d)W=k0$WdXE<3x7a>>)!*n;=9=xx1zvl&L!}D>Ku4F{{-DJ9+kuA zo`U~Y?1vZlYV75vQHgNOS^0YosHdF$x!bhoUD74mM!F8f$I6!jGNc|AWL=>>k= z@c9@&ABhFNRjnmFAI6|2=Q5l;h{=!Pmuook!Fv%Qhvy@jZ!Lcmjr>PU4j**||1l=w zL&AQC5h1J5m9H9qv$}a`4gon4HM(?pzmUEtO)=UN5(2K4Im@>Oc3i6H(+aZF3ewUG z)2aievd>=ek+tAU(`o^g-eFit;4^bA@R_+5IM20aC2C6oKWGqs-t^kE2kR1ADR5sy zSnot!?ITZK;D@!+q1qCw71!Woi6%#fAH_^W;KgyJc?L0k8eu!o`j(*e$%x)zt~`P9 zH9?DG&fW$)q#rd;d0FL$wnQ{?^S{#?dHTFI{nxZ|K>lR1pU8Kd{dD;|q_?Y)V$y>D zsyIAWyRRl(^g0RikneoNnGLT91$QkVWtPAz3C7oh50eSO~m+ zn=A9j!F8UtD|=tgT=dKOG4GnbpGa@r;U2B;+}(7?6Q0r9j^(H!W0427o;ohBGJ8Eq zklpDY(O zed~S7N2wE9)>lwa+himAHsOQHDveemVr6AYx5(z1sN{t>xfzp8D;Xv%Xjr^npSRRfIHO8*Hz#^3O^GSY#ZnRz78iy?@riXzE>4v^ zRe=Km{68;GOA|wdKbLQiDGZ+B#V}w ztX3XAB^O&=B;r9-vso-rF>mwE?&PY>-Gj9&s%vVlYwv8_5v*MsOmZw(-&Ql^^fh1A z*3o!*a@8_lO3!dvca^Ix)s{KlT0icq9H>cY>#yjo^0Z`>WUg)rjCoN?ToYcZFRG;{ zybys?E(Lyt;d4Bf)A=XW`8vmW|0?*e#9MTzG(7MPkyB01^@wbfU8c*K(D==9{HMv6 z)%eM`74ml)M8wd8($mX7W%#&z)@>s&s{YBKzau=4=&H}qI3;@XNF~H zu}-vD6SXP}x_XQJ)P`Ru>_z2g8>DX`3e-mJI?5%}DhjP8$tv$*T0i<#^Z|9vh(Crr z@Ta(~U+20^V%AGGS_T^-P2`Pm#dv)y<#-wDy&gTy>(esiSC5`LK)ikM*!AdHyi$T; zui-`MPUHn~5UOP~^;h_8UX21UZ}0Z1x$UlwIidPba_7C;`!W-sAjZf-pz5b zYPTCFRtXpURM!OmKAg>s@e?li_lb4z8S*C#M|J$@S_)p;-Rb&U6cfnqo{8Nas&SsxoIC&h) zZ%qGP>S~hEhvHH~pJOQnHT?~DYsiZh^3f+p@%i=^+yNmc8}zj)n2gq)8)u{ssu z_y;N;;kKbNfem0A!LKh9Xa`*IpF%$pEfc+beVORx@51O4t+W5)vl$^@UnUWb3;DZ+5c{i3;sjIkG>PD z3evYkU$-89Dq=f06aT2^Q(0_FUHB;KX}k1a=aJP7%{+!xM8{p+*m_kKiluw znak>(dvlrF7yhPmVo~^MJle`o$J?0nZB+E{Pc@=;BQ;|Zl{SCt9qrw~j+I&P2{ke# z_|ZeD{9BoSR{mWK(O2x7N3c}d3mp+<-N=NJjC@cW=P&ze{pU+rVr%#h->UywY4|O6 zf^7+ZT4p2R+rlT=9yxrgY7Khx;~W|lRddMya{ScuL@q093V++d`q@3<)9gTaQ~0Yw zZ>;N5e(2ps7DlJjtJdPa5iUIN3q)@5K8iI6v}>bT#~x z;WLoO49>_!_8!j3!jD9(o3Ms1dDU|N zZ;j7)EN`i47;j8WRSJUknl+293z~-={#EwGYI~Y#e)G!Y!o~_mXVsjNilVvg9;Y*~ zDX^oWvB+I!&U5EOMEHS;!n$Ii304hKaIX4Nn!s9@O1&`r4TW9VbIBwx*rxujOGieI zt1g+&^c-V3@88UGMT4^A-^=xnY+N0+1l~oytskNfqF3b3U&8nebLJ(rcRi|np>en* z(RoQ5jI=JXIakz%ALS{djq$RVvrs2c`n+y^lD7fiQWD3poHGrVIS$*!V^;X&sNhr`1cvI8hRl zPPJ9&9YbSvQpXF)#4GfU@vfB{fl_@}jJJ+PC`$E)QX{#s(v7A{ z^(LzKY`@0zpXFCwK4$)UQ7YEu=Qb@r0u}k0j*9$DM@4>OXt{iaW~bXnqIMFfkUJd} za;Kw0u7<|d^Yfa%Nxbd~xiK_WXB4A`>S~N0eNWEN^gaI9sJ=-Y6>?*!%u%7QhC(h$ z5c<6U zoMgx0kWTz0U5`_L60MJlahFfiTdRk9G*@VQe?Ng%*P+sbz)Y zX+?EmUzGKZYxNShoMySYuVr(cQ4R-d*3{Rn&o9YpUskpJ@WPaAdwRnB;EF2pcaznuRb?F85CFSsh z%L=$p%;dmYkAJOdHTg@tmEOYJ^lo+#-;$vQKG_Dudo#rvHqRQOaaz_zCi!OgBC%0#PiZS;gbu31Fd_z8+I;r z*xM)C8^>ze_qH{x^};u8L8@gafdUZ)ia&c0-J2`U9{AdK2P^xx)Kw4Fr&+UC)V5vL z;9c#j8_zGvXkDHhoak-1Y^kHrU!3l$X`k$9S?h*5EVTucXPyer^X($fY6LbOSB#S? zcQNUNx+1u*S9gN6ATCg*NuizL*dfBbR1wdeE^VStOPlx5LfTHl=eWIz`<%|+m>Kci zt!CPcfJ#M+cKoCVO^)~`W#;MH)lkv9rLKQ}w#fstXDlc>+}FB2;92Es*%qi?mE1nr z8Q8J3YH3FjyLxKwd6=E--8ANI-`gHoOR;pMD(6#78Sk?r-SHq+qg*uTS8_U>)2=-(D_ ztm?|hl&VG!c4oU5&C3tut~oPS)pBHg$Buw&G|+NclV|mO8Sl|bZrR(}uzj#HzpF82 z$t`<>iF3;5%o)7)f#Hq!ja9VoX{{Ucw(f32X-M|+_1Ij^a901K1iJP#m-lR{6P-wf%>HXZV)^pg;I@XE)d96XNp73$u194My@M^eX=82Y zWNX7ZpXeoY=@xx-x>$W&GIX$I_B6el+P|n=GP!cpI-Wz`avtF2vm19oQ2E7hQEu@# zjkd&(SsC|>1UI3?9gmVPB6ufDXG%uPR?%X~%SUnIEj3<$NG~V)8%dx38%jviA9H}_ z+0uxi2f5EI^tqMKiAZ;W3f-gVYMopw{IoCgoJA!?f2C(;{(4br(xr2omX1J0Ix)1J z``bdN+b5&?3smsNP%rnE1@C!Hu0RE^9wo0<@E%W!%Jp(zSMcgk-VX}it(!GojtbuC zDDl#Y*q37UMdQ}vuoUmH1%Gtiv=uQafs=IdUt!<4dM9+*H588uUGykdNJs;h4^ks9Gq->8Ox102gVwLv(w|4clAb@Wgj%R$rdl;UQgG3j8=mGrnU4ku9G( ziitp@iFVKLXuDk5nV9J5x2GT$o|tZ`>rF~LrCi&_-mumB2k-`@a*1^`du`zy$_YuN zb;WsN&DBji@HIJ?=RK2f&%$fP!!O&u%Adho8Q?E$Med8muCdq}IyN3+`%0{<$9^5! ze<)8M@6&xN>Qk-eHO*Dy9f?_Kg;(`<>WU%Y*(=4|#lTs(xl3 z8N?yhS+tt2(@+Atrh0}Z+kT=~!^Xy@rJpq|@mSi6d0d$9`ku`wFjM+8tE^MLxnfUJ z_6!|*=AGG|saK<7bl@w~^!UU2UGbWrFW{xb#{{f=(x}3{WNsUdV(o1f^aUL%B+v*X zBusL@Pe>qCNSKZa2?CuiVS?}SoGxKHDkKP0NKjNAOvaOjpW_`v5mCl6;iScEI7x}& zTn_JHDKFH+KEZnfQCBEZA>_=&g`6lZQjUiLWNDHqasH@(c)^TilPl? zQH#^&AqY^XW7iNoVv}66!|qHrZ*A}{ubAVoJLdK`yO&g(Dly@B*yL$)t!WB>mGuoS zb1tb4f1iYT@Ifa4@%DD?!%wGRKW)QjpJ)qzU19rs!k2BgZ%6Z=`n&Yb6gEv@4-B4Q zcp{DKz;~Xh3Rq;%c6_L6rxEFrAE{77AKsl7@rWjSn z_kDNM$IY&_gz?%k%i1c$RkJoa%zrcJnhg zc#3s#^nHO&5ii;fPFRsILcBPuh!a-4Jb?FeTyXEZ0ca!)v{;i&mfXO(>AXy*C{gI~PyCJ( zT7Mw46e!9M=(_^_S5)ppI-Bf@Oh$D!{6Mn_;+MBYx!>T?M^QG%K1(RHUdF{|L$zmXNre2mgDLY{+rcOspGk*z!(3-Er9i*yd2BJLWT|N0!A z&fu0b;jPH8!gf;RG*Y1RIBC?Ybn^2SwAL#Qc2WBooR^U(!Rhj}n}+SfrmBud(U@Mr zA~lm5{8G=0$O*{$k7&E<#OX)Tt_~}QH#)ZWq}kJ6v0;ZomdgEUaQ_k9 z3#jhvQ>K=bB2n6IHEnNOVt-KCHEeQpeMO)8VtXuktfy06zJT_KF+eYmq|M01v>f1R z(*91-nuYE{Z=o}O{~~_>1%6);FI{L`7PXS5X{VNgswI^tG-Q6NixS!l?-}>;az@(N z;z4+>im&H5(qwBnj+V{&@4>eiakDWNq=-HV`$=dMFb-FnYIZmVir8e=yWjIaw)pO( zg%}_4io6%XKVTK?`t+}(7eg;88S$)k%FPN(Yp2}U7e6IG-uS}@!$UjlJLV~mD=Z`X z^*@JyL*pz7{&RdfoPJeR}9(d3qwZ zsG~IU@m?Ly#11~}b2}KG#V@=EcH^8avcI_}0l&I!WT*Pb`}}vf2-wjewk%?Q_NV+# z)0lnCm{T}6LGe4J^HW>%a&6Q~@X%@+p(N~egS~g7F44}87>+it!y%uo;rvLBs6sC}gfRQp2v&)cCV@*vKujeD$Q=zhKU|Q+C{=(my?a=F^BW#hxdVPm=)i z<2-=K7t%+cs6Xo`>&k)^sCwL}D-@lyFY3#O#sj@g#CSlc-X;Q_uc5*wr``~?l=?xf zWJEs*Ykw1?gLK8&2DH1ZZyPU z%x}wh3o?n7g6LX_@RLoVbm}~z)RD{mG=W@`>+&Fs)8=&Q2S0dW#Db~Q- zB;n8sc(aOc)NrH=JQ(8_`mhLWiBXHrxTvcxs#1KmLx!6++ZlA3Dy5X&GbcMdf6@Zv z549$06?YFiPZoI^H!llgAYJqw@RC#1K40tr5_YKReko=G%x+S2xu-gh(q|DqiXha( zd#U?G4k2*?$2(N~GtpiOem#vwohp8RlwT)DF;3#jEiPRr1!yX7XQZtr11OI-x^X5L zwu5BS1bx~bE&+SfVF93|2hjao0#M{v)dJ{VH8n_pXUZketQRL~qgrrW4V=S)Qm%gpwAD@gO<|yh|M3#zoX@c#v4#utv}7MhrXle9;-b zU03yea2BIZ5Ie2T?qiK$0*)hZ--vBd{m+O`RrC)?CM%i@Tr0E)2igW4!I*nh6vpkz z+z%vaurF^V@UN!jf%*%vaSlSws!(@FqCcs<@e6JC?w9<7C5e8MQy4E8IO6yVGyYaQPq4lyx_h?<~Wlc4!lUpXcX$`bx zqKCdJIwso!SrZmfCm7&-CYK&uX% z*JQjEdyxhAYH5Wg+lrd}eJ(5Z)C%2Gw`osZlvdKZgevWJ!zrCch-$0&c^&@>npvuv z9?#V@<*iiczm>Oik*h5l?`7LGUO9$duABXo!z_<`Rzfl&|EhM!@Lm_{ z5IByTw+e8YD^`y2rx;AyA>nCjyU}9Z6Ftn}wHs?&E>XhTafYfoc~1U5zVaPc+;O^3 zOe<~5>jThU;4|||_{_WtZl2eublw99?t?31)}=mP*l`cNGa<@Nb6U0BPQ+>$&0SUW zu&#unWv>{o;p;@g<}vi>Mj^LYS8kZYLKzwFM!$%6DCXcVzL$Z{1LGW}Ze4X|t6C)G zw@m%^)k`)l8Zketc_EKHRo(&+r2@3QK+ddeiRF9oe9JL1RwlN?cID`TSq ze-R@M9CFFDm4NKcj?CD`lRDar;$(_$|H%)f7ikZKy7dH`QNo{kD{lXZWbh)@Ymll~ z1EF|ZbTqnjy58~bgaZo_E&DpemY2H0t8!9Y(^CGT?RZ*!tD5wxzU1)j@kwhrrn7G) zm`TQB+?P%{`=s6d;W?Hc4WIkaEc1TKFYS(6x_!1)pBXz(Uai7blV05>k4*cfmvlQ% ze#n=6V*5MJPnA=4wVfwws*go2JzJ_+l$)7u<(%SuZECtpuF9HcK9JBm9-neYn!iO& z8Fv1(ZE7e!Y1O;lggX~SWP_J5*6(oU0Mi5qyy^}0g-TJ^nz?p35(%Dq``YgCcexjV zkIUgjBnYn@=Vf~SX8L}slwuF()9;D+xC(ONWlX5=RkTcW%-=_E}4 zXFMt-2$Uq8&`Fql1iTa%V6YH+9-)I47ohwD6%qvcK6sI9phAb!zl^4~iI2@f!tuMK z=;a(05(LWa#!(^R_&MUmj5|&TZ5|${gFq9(tJmQakJggSZsy~R(BZ_(Q5^&-bPy=% zaFX*19ZozCUYfDT>7dQn<8%<{Pr<9#;p`_N61Q($WZyzP#|A?>@1i=q@yDjkCO#d; zmY(RL=?hgubt&Z;L%znrvdR^8wT?koa8s&1t)t4Z)FrTv%^QbNQO83oDbe z=Qld+on@__w94wHs{FFK+4GtLl^qmqqV#{n%lA{Fh8!gu5c(9)tw68njH2Jw@lL)K zMPH(wnS3{uV!V>xs0|6llrIgvzA?)Clup8g%4?3}JDo}IL|rR>l!d>}Q}-92LYJ>gYTH!nUQ$)m z6OcRla~n4IG$^(8OI%sYyPFk{tGyzly}`cJo4D?*^!c`Nx2@M#G1!ZHYVBU?^X7=C1YMmQnpD-%2C={*cMxEZrjzi@Er@vawS%d3w0p77at^h9`!#E ztV(s8cC>Fw*tEdDU~j_SCYOdtzoml7N0$hm!7l zc-)G3u^Ui*p8=&SaN>^PJ*WdhijaMMHOcPPP$65OJ?JI$yrz3V+SlZE-Gjvc{>u?>5ym zL#7SW0=m1~MCB(=quUUIVRe{rN+}eL!jd2OYLPbaWzL#*igeMl$}z`jcbY7%wz58- z$?2$`)4o2rYNVMBg&%QsSS%ebwk-T`^GX^|cushm{0=X@-G=+Q7tXce_;*!YL~MBK z9RFS%F65BcPI53WNu_A+^@AOfxoQc_o?+D%Ku6nPW1`eqhy4fXw;ADlfZ?X zXuYY`a3Lp($LoVSqSdFEHqn|xwLzdHBZ>+MR7Xe?oT1U`(*|CjNDrV|eG;gUAW$xW z&u)bT#QfA2zJa4cf`}S&9XKi^2$Ur7(`#y--owvqQGJ=C^;L>-4?jsl5(Fyhv_MHh zBKK`Xt2i-hKXqc(eoCNR0*^!p35R*?lebKcewW+fFpr+{cEwSlgFuB2eJ8I2L=JuYBPpGj+ks3Tw zm47R4Dk1Am=if!KeJqW!VlrohenAO{*XIFvap9?USW!qnwx|Z?&*H%*6I_v zY`!=ArBrv%E5-zyQDWJSf^`n5G@Qo%Hg(^kW*m-Uk=GIDK-8I5$*>PWla{9(*&#(S@ve)4+t8LTF*)SehPrX{)Khp)!i!M_Naryz|I-YcsUA9~BC!Z*84^Qcm! zm;2VITQdgzr2}<|ne)t>o8Vr}u{#_lxL2M5r>WdAFsF6>D?J`;YF*qOxD!5A)o2rI z3_tE_FCs^)eCk)+;}JIFWr_Upo*6Se%;tEmISv;uhKrnW9Hpbfc@8*^NCC$&Q-K^_ zCYpTsCTTOJtLQY@Q8ZpMP^%`F{0*7(R*YL|lvm4&P|{jO)zTo8bdI9J=7f^QK>KEs zyOZXCGvsn~hFpQh%cT{uJ7Sg~pNDG;CE-bC$s&vAIrK32>hYPIgO>%z9 z$W3kjqik7Q`#$3RGB{P$BnlLrm^pG`R;eV{!=x_%?p1`VOxyh%aYl~ggo{}o-Hq&lSlouc#7K} z5f;?4-4wr{flfZHp}bBD-kpOS#jFkKLK}geT7piVcGb%?lh3BPyqMv}@6_k7vE(z~ zc%0_ev+m$$bxQaLZEW4Yzq^07{r)o7>?>TeT-pVEY29d6M>F$y{YdW*(NFp`_IrkJ zo=r(L12YaGh&B5eM-zmmfBk=_>G!bDB)s?kNK@L>HA8<<+ER(C>4#eMLoCP4u-r`P zWF0jHI>VZ6$o=p#`>+&fC)g}0&;}-ESjTo_r_VoV&&x1>&-l!j*=UCf@j4Yc9jqw- z?dU-4?ql-V%9`?`(k5HNT*YfGsZTFXA9j^B6)2XX(1_Sm#@i*#3--)UQ&}n}>ofl+zuBBDp z)qeLtWk*?$zoN6eD8P1C4S8zE{8d9W{&9b~qpz}l(B5meHDc%%H}2W_j!TS6 z=q2#7s1oWU+^OgvocAkJ7Z*qivhGQ<(<`FvbBl_kufsAeXv_2t>bl% zvZBSJjfiz8ai^Hs)MEPC{DHNBoi`129U80gY-mq?!SueVb)&!M#LCV?W1h;TK9fD! ze*cc;=l2HPW5)-U+_a}8*>2Ch>}=nvn{aQ<$-cHLM;6i>@_V58PSLMXTcvj*TCjO> zN82Vv%2hUD2haO-vIi$~#10?{w;R)&2j9V}J9ZZ8R?qm&U+VjEqt~CYp@F>(_GJhA zmRu32Tz0U(ZCkr#>xTBN9hR!m1y z&}<`mTpPEhsPpoT8_t>@--Z`8ig$Bap?N9vKxt0+SfdOR@fs8jY^F%`0w*humX~uF_2%$D$u_0P zsTUepL_VXAnYspOveJnGlWg^>N3hbHwg#1|#7#rkJWw_0N?JHq`E&R>6MM|~wp6=5 zVC`IsYu=g@`$xRv4c;z`BxSH{dtUhWDRTAN7We9Qnl|yX4-TZ6MBe#&Umt11J$(~7gp|KTNA?fmW<3^^bzRw6x3+eq$3I@XCfUEC$v?ibl1brfS&22RW~`}yf2-ZU zp`m9@?Z&2ViX)?R&^!Lgpr9Uz*LGRhcf!{y>>I{#K>D`bHr0q#U(${C=;mYH7c&n{ zJ9B(LVB*^hlxb?Fi_l0^>Ga@6f90S%!BJDUzRtVUo?Bba8oE07^)#;Yt?6%A=U;OG z0nV;k^bB3ecu|3Oyge;7v$wi-ji<7=x~$EUo|e9)rE^cv?imZTFRK{~bSz`%%Q`DO zEoB{*HLX++*5IQC`f^)NFf2cdb8pdNqjNm*YMo~-3vyao7Ly70wZpDO^`)<^3ygc$ zbk@S2><}xqrPZu$gaQ5Qn|b zz~0-@y9G=(tnv^QjhC#d- z+tKe#%ATwIF?`O%zHG!5w&Qiy_A#|h`_QI4^=;ZU7Id%f;B6YwHpz0yHhnTXd^&+W zQ`tRW8px&_QHEx=>1t?QjyjG$k819;HjP)n(Pe+}jXEu`z9GS$IM!D`?yu~vDsA_q zR$R{3DB*{TSIx;D^EZzBO54Y^Rvqvzsm!ruMVobjy>4^RL(Lksq8X{vZBOQCpTgfo z_hIcC=N22rJw3o4+U+%&8yqbxw9*=v>w5AM=-WCHpos*RESp!CQ8zHPyXV zZP|@ItI@KZ-AI|A>A^k~ecNtkKM!A_u;+~7GOcabL%-DjpW1d><9cspf3>mFg+@~| zV9)iHvHJG*i7xE780o>=2S%@~?5b$@Rd!c)pl#Rr#ye7}ZTr`FEBdN!ZC+~I!OlG` zb}!oYFdBHrFgst~S?*~m@2C)Mdozsc2q2`IsvXX|L(#GD#b?%0K z(Pj-_#Hr>4DYk92dWO$%p+w`r|!F=5RwT|R56GM8FP zy(zZ&ORC+ixs}<+o>TI!w>T?u7F#MxlRdTmsyv_5eAot=X~;_x(##i;Y_&y1dkY`5 zFqy2P=epBUTcX%ZHKmmSSE*@%$#m>V(|ZX=jGks&n}V263dS(ItpelmIa~3K$!#uM za|x`4lO?PZDe#ea0um7-qmkHZb^FXO&HH)6`xQ2Kf_vT%6aJ$pb$toT4gaBZ{r*;2n^%FgQXl(kx+Wd>5RAf*gLfmWuph$_Z+wc{3MLBZba zZBNfnKjwdU?)-|(>NZ=e&DLbMRMgv*R$soyk#)z@QdVk{ue`--4LB^0#){HP8oC8(qh;Y7LNqa5 z;Zw^B&fc7s2RKhe=<*0%NJhqNsgyj0_Y)taICmC-RVIIVTDglWx- zb;dO?*rpjeUWVtdZ{J`U0aaWQl!P(m^OR8R2%#DrP>$^qLI~9 z&DzM2qgGgitd3SjrHz?IYqXV7fvfFo0J>0#tL;o^^MBUPe)`evj0OJ>8X7FL3c7EF zR=lMRe`HJBamkj(IzObXu}Ajdq@3Nmt3&d`D8kJ)2OQL3^aY;wsu1C5BvyZpbn$RhV;pef6PKT*Hv9+dtpv7fM zPcnUa%EUYg_a{`glvXcG%&#j;ar*k|J$^~be5}0qKj$)QYkBox71V0tE&KkuU(Pc(SGc@pF8Z-9*8KJLGv9h>AURm5xf4ZEN7>{AgJo_dJ$>{k&Fc)rAu0~+!Ydypds zRm6{{uI0#88uAx11z?u$f zndh6QfJR5z*B}$;I3Y6xE`A57PAV~18_kfMOp+V%j3!+w#-p$#^u(Q$qv#QDMOs#T z{t(|L`Brug-+UDX=lRt)RP2X)Z-USb-L8QF6;nbVYa~(<|C5G=sHC+ilO1xyi z-facn%fu($EK+QP+}F50?}Dx9zK%h(hnM->)I#@K!YVN@EgGprEJsmNB?$c*=FN^p zzS5S4rnMR6Db1@ru0gx2BhOZq%(zm37crwCq-mV@(X2$4squ||Qa7smZJ4%|tusJSzj|gU2 z-Ky&LD?9zms%-6}P8^uPdoo?iy{^$t+Sz-h;aB>Ae=f=LuCG4ifhaFY+TW+yeISwyAOmzlvDT&^bun2iY z?WYwiBJ5fv!t{{H;I2HP8xEMR9jzJt)9RYl2TUh70>NK@TD|K}8~^78 z`y2NE#($1K*k5?z1tz_L$`W}tavJxeevhoz2_L71JzX2FJ0RD7@B`FotjC7fi}HNr z<Rah}t0{+V+=9Oaa&^_G`;4f&q65}^s_H$0L^ILt(BKI3!#~6e1Tgk(>bO!)> zV)Fr;wYROjqN%X7WS!?k$JWO?YxW;*YB>otE#*nx5ryG(saD< zbC0fC_w6MeU)!?&+Yh%wjvV>2VT#N7I>~|maD>l9g#X~9d*D#}XxlVKbJRSX%%E0I z3uyf6yT`nN#Kj4@C5x0rrM86J#HHR`Q*MzXVX-lLQN|o&ZbD&Eu5!G)?pcf7VK4qs zUANs?{OsZyb5?E6v&BxT8HQ#bx~T${He!zT3v>tjNvKNwEb~4?ao+DJ376l!OJ}gFPOjcZhu@& zGix>N==7SlICAGKW9Q<8tXyOEJl|Z!y}cm8x_GqD9;9BVHF77bK|%&3JkKTki1(tT zgTy7M8i=%cs?ih|aQLR3z}}f97Y>JUPwJ|k z50s1U{)+ClKY35uPfBmC?W!E~&rO{-9&F!MXLk&HgZ=ihZl}NXgV*FoKOo1ARzBqI z$oCxTYp?=~30k`KW$*kn-tTg7+G8F44~ye zt1oU@kiQO7oSeZd2}=iJzW{glrY~u-@AO~4y*{|_{_*8!Hh9W=o%uES(){_JrXn0b zt=m{%y&}z&>MSv)TCzP2tL|94-ySvHY{@HNhQuK*D8P0)<&mm-sbRMb1Td{mTf*iRKMfw()Ax7&CDvxTKK+m z$kn#YxzyFR9JO^M@}zt%PScp=7g2L>f!)ioqH`1M-V7_Mk&0M&lkd>LMei7yRc0ilfWn+P6t6L(Qyg zDgNNADC32Z2XSM;JBXU2!XdA^kU;FdP?NeXC3@&hM%bEadyK=CWfn){gmKKGf&8KK zicCl5Y7ZjU8MeI9`Udy%8e?%|X?khyXj8LyY_43KwyQRoqlwPzbF=s)KqiVp;k}O5_#k$|yeVJ9Be0Kro zncq`Y)sOI*Y#2mK8bUtPv4+?_y*5YVPxNAOQD=QR4_}uvUX|hRf205825)fh?aTU4 zZ1A@1y?vc(ONm#d2rurW3s@ZyY-68u14=*X32^q!(5=hCIQg_CoW* zs>SG$HnB8mvz*2wXjKM(bQe){8aMNFyp>*YL7@z@#VRgcrs#!*EpOY^RMEH5-?p=< zvTuX8VOz6%q_$}rUPxgn87+0@<@l;y-qZ|VR$g|7o24~f-s;=fR}tLV;@{X?QPH@) z$vaZhxUI=IQZvX>%1iRg=U%pX^9_r$7G$AD?Z6?p-Kc>kinfVJGJK?Tw;7!z_V$=f z7MxJ|g8z`hN|dYoPd3`F&3MMqSnZkjr14mahn2J2Dl5a6v+rEI7!I-{roa5f6h2Nq z$93!tb_Yr@l~xZgy?+XRI7=w5Ewr}SN)W3HmS$HK_$+0O9`;6ozZi>Fg|)@D7HjFk zs)DlWdWVf()Py%WIt_2dMxMKJ)R9M`Ul6~VHgeJLOH>{{J~<*ShQDL1pt%D2f5)w^ zTOT*h{ntCBckDO#e#7`x23=e4s=pq@9$}vhk5Apf9>7v1!;R=I5@NWb^}=2>Qo_T0 zW&9oGoqSh5KF1%I?z6xAvV96cW~_{1)$3K*1l};#<$c@emPj3|oN!QQUvu@yGjH+^jHP;Ex(!p>cv z*;nOlsShXTVM8f1%!hsx(2qtJ8hy!+RduA1_s#rwOz+fcy4K=f`H#P1XLpds;T`r@ z$R0zH|CM{Br?DpHnbr<73yU&o8pYo-O%okf=<=Y(TEz?hu{AC;gZ*szjaz*FEjJ7g z->}6$bzcH)mm`sWG zhDKjmlZEY7o|IEe1&-{-iXe;T_TG+ppGj_%en<1a2tvowG345W za!KWpe}2EA6|=$;5bkVnKH|MMJAAK2kya^FkJBeD3P|6Pr`n#f+waD#(KN%Kuw(Bm zEb#An6*5^F6#f1v52I+lef|;9X7&3+y^W*zPj=BKmCqXZJ%2-8E)u&fqN9HF%4pq~ zjva2O%ItyGeWUK$EoYYWP4=Zaa}TWQ-oLV{{pz8SQ>Bi~m4`kCX9t^9jt{N8Yj4oE ztRlT*xNh^Q-m&X@mv@*ehP|t}vx9np#A{*Y0;^F>92^JVf`BO05RV~bchGa%?J?jL6yQpJSc394#Jq~@=m<3VO0KGO`qVPkBjwF+SmbP_6KwR&=6PP_3Q52gqvWy7CQuy26Tj3%s!Yy}QLv zQC*3{8yoH4(naSkeJ6_v4VM}d%d8u51-3NRugNso z?8Eldv_#}8fT}? zyRyd7RrbxwO6gc-CF)cee8)ebPo{c|?N{iRqbps)HgOGzseK6h_KMR3p7CS7tFFs& zn6Kz+-nrD?ytljSs-nuAW!u9ph5bnhSJG$ls(ZIDzjLx>Y}NeUfx4}ydPmO=4)o5i zTUyQ*i>?NxWr0mj!zTRg(&%BZtDT5?thL+N_m%J!6>OUlzN`9jh4rAXvWK6yhd=o- z^iz^yEOL)LA0=Ievi`6ZfuIjRhJdk#dVzCf9wY7JsdeBMmcc{wHL2CFF%MFBo{o2%Dwz;;AC{nw^ zc4e{6;Tywes2ie-+{r^lU`2Mo?rOc6K;_hGPL|mc^-c36H?H`B#oJmYcpbyN{g)@V z(ayeZg{@V>XX(?<{-<@L&%UBj=~=R2D7?_l9ubvOrru4W=u9#q=@~TsAuEXEVYtUT zYjJN6Xze!lhN{axVe>B9eADXvCN^#gpQcZkt8LfH_FYZvTh2|+@c-Zg!uYwv-LM>K z4tb(th*vO@;?SIIRqw(5^F4jrs^)rJUb>aOc4NyN&wuW-?_<~C5_()rk2{G^Hm&n` z*0+SOk^3<{f@~_=A46L{@< zzdF?)E!ky|@ifnI7T<%$Up&VH2p0H)(GUXlNNczKv0=SGc;&#;<<2J&Gg#C2je8Yo zC!|)7Hn;wNtz8RvR7IBVQ#ak6glFf`olbX>ex%dg>2%(mgggk5M-VUpVgMs(!0;3> zEDR4vG-Oavm_c1Os~8klaKCjNanRLq$JHGLl@A@pl~2}h*>xOPU7gXHUHyDb`ey%A z_jbBN66af$kG`GTRp(LXR-JoJol{jCo78i3O;tx^_M+Fg&m{5Q<$`DW#v@*sEi=(a z$IZ;LsWJ-we_;I4$3~^1{$AH8iqt5Wv%oXc>A>MzrNDYa1#G)7_Uf zC;A^~4_jc^8>?0zhXC_Ou)xG4;#PbM!&+Qk26ah$Iq}4=KJUU2YkfAxTTR?Q>38ZL z)8|rnAMqN3la|6VNc40v9Z(nX4`4vbFdUv>Ut9;N+SGrh&!q0-r;P)+wfy5)&qUwB z3zt{E$2S{2(_Ybfa$=TPR(@SlsYl(iCh93L&cXJhlO~;7Ay!1s*d}8i;pLtHbgMi1 z2az^8JvxJ1k~qpZdO7+S8-09D9ereVabLi!CoZMnovl=i0?s+`%3gYE!CNMJ+w|sw zNBB$32#2H3V--UfV;(;L5DYBaIFvRHPp!}(R~$$fgMh>V<6DOYpnTgXh`_-%hF`E5 zgDvr#a_)N1UtiLmL9U{uHl#+YZ-%dRsPCRODGPbDTy|i2Y|M0kGn~RL-(VKz3}|^7 zt!xpipu`ix562Zx;$h)bsdZm6tf3^jlKzXWcf|Q(iKlWB@7KA-*`6t$+_2qULrK}i zIhbF_4m&-y9>h()8azp=;)A4QEX+)=Pf;uDmE{8uvBYZ)hv{Bgk5cyRz!UR@!@BEC z>JxmWrcmf;VIgXE&@FUA%pG2HQ@o~dX*J;i8rp%gho2#AKv;iTVDN^Vy4F${=%=qZVtp}>P#_Y}e`mkTMS$tfvisecLvA82f(yhe0# z1-vf;ofAV)=;SefX2;J%Pu?hbyTI2)v{XIXTv&KC6oLmBGHjs^dW>7Vt=gCAuQr-P zW-@+YCdIg=bh~Xw(Ow^Wrc+UGgH~^)4=UYQZKEsH0TTs{>R0ssmOFiWOSf5XhHU)c zzmp!<`t5B(qGUmqCx7{#iBin!uT7L?dc3qFZCPkT!O0-6^e6z##u$vmZ;sd)h~}tY z8p&_^>OJ*s3AUkN14H%#3~)BU_2VoHsm-^^`C~0=%F6e}^h2gYX@!>iO@}P!SaQ$r z3hl!G)o3_o=bHz=6t^QYLqRWh!wQBNd51!tWJ{a|9G=WV-&i`IKCe;7)q1A515E`U zo~`g^7dc7_>_yH}TH@tNi~>)!+uxXPFLD(7>|sZVNR56@$?hqhf+oMa2G>B)8Mb>O zPNbwp)K`H7Ke=nXzNSC`1@3BRF$$ndnSbT!Vf?ommVNg&7{Bip(gKV?mIoR>&8s!M z$oVZB4pDggEUB14JXH{gi%+m@HvEb9kR8ucj+tg7)fq8HP_l~7(xW&{0wp}ES8)lQ zJTs7|k9tRuQPrm}!-%JaWSI zbji#4EP+bHae7-^14y@oyxUNYxT1vAHIR`$R}Yz}->mK-np6IA{>u!`uzzPbE@ntr zuWUE+1L-uq7n7YYlj*W?0bSRvK5L?NMs=~7dd-_F?{)SSAIn$&TiOpB@!TRYIE`w= z$a+bT+GnKu&FbBBrMg-|9?L(*zz=J0@9}`F5?5-PX=Q?Dl3FdviSFeLJJG$I>c8{z zyXTegsZ-%s?g2FT&&AW9EnY#}{gVG2!&*^8N1*RYSoS=F0KWlNHUg_&1ajD%ANAKM zNv@UxUwJU>Dq4_Z%$-x@D-VQSp@mbDa_5HPzw_VncPfeGI?}9Z`SvPD4!*s=jW}`> z?|ID3$6ord{CGZirA}OC|7k42YopzsBCp@!EEyLXH!tJ~{+@fr?y|eXO||lC zTAdt!0gOKjXLzo}>O^S#f6G>f!6a& z0cy5qT8r&uhRs@WWNu_EgQuXJ!eF9pa12W^J74L*}oEMX3uDvR? zb$ArE6%p8{^$4seiw9t%XF2|g=g3XPx@1JTr*VD`@5>^PUyOUadC?PYz&r&!Le_4J zb!(Sb4j=4(*d!h_J=9&^{dISj;tGcmPIV3ZR%XHUi?x7&4c=T$nEv5KYw3g~(n(3Q zEct^Z`og3J(|@Nvl}6`HUAgr4_4H^imdJLg8**V|^Zr%+%ALS40W%{C2Q=6wg$F|9 zd9Zkg`3Lvq(7QLAw%4fXT|&6SszoUdy9ZtbWCr#=l*ki;`AV<4?KL9MM!9 zNu6cZ3MBts%y%TE{y{J%#gdDdn@fKZYhggTdiF~p_u_sgP*Tc3)I;qEv2IsHTcTt<7#I$)E;tT!!uo*ekTqn5C7sd! zK=9C^-~-%K=OLN!NpUZa*tUc>+?xrtsZy`bR#+u`rt4+x1RLl_37!yDCb~lCb1@3K z)x%at%om!M=nJtm7juRbcxMq%x@X8%N$`d4AMOjGV%!-*i{?-p?GSfr){*87&53zK z)E0Ax$gm9c_G|T;V&2g5xHm*?F?R?yS2Nn(gWY_k-G)_FLk`ixVGa@P8|D$s1k{gX zP?AQ>BU(G$Bcgo?E)n+82HY>jYnt7W_*B><`p?TfB6=Y15*d*ZdtMwB|0Bn`?h$SK zjvmoX|9_9@-EZj4z$H;6lj+UNB}d=*q}bVuB@S)#82B{4gC zMnphb{irM~Ti0vI5;J1bY(j{|0)jR&lMq2*NArMQ?WT7EkZgduvNBn=2QUgj5AR-< zr<{q4Nz|sD`ehNFg2q|Sz|^$FQv^f(z9ZnVvk{M11Bsui|iaW zL?SHSrK5n-WQ0MfLX)H3XDSH4?zsZE_#Rh>=hi8#{(frZnjFAS8lPpMf{G7w{%C65_*r8kCsr8{QGS7c%k zBEz7^sAfugi6o+4(3{BEOA!k_4mlg8 z9caM=wfJ;y#U4D)W$ImVCcCIJpl1pbfc+C&X?I7IMSbOpsI{k@7%*I@RsNtEk{p9x$-qOB5bsAH2@GpK?NyHq zYd2<#l%EVi%XXWUh#W^^UG!5C@qMfhBvBiPKIn;cF7yFNtqRbqhoEJv(TyV9ou~tp zqn|3CLD^D|SP_UGWoX%h@Sa^bl)aS@k<`2$`q$R|YwPRR?r)vHkH7bg*Zy8tU%zhO zd@cj+I6Mryc$9xMe<@dtz&O8o=k<}u^*fvO?-3LNdSO+SUWu)pO7I+!)}vu&ilBc~ zZ=)XCHJ)}+kJb5h-jm#qi(6l>K{Z)Osb`>pK}>w3Zk!gpd{FbbHG2=pHZfMr(_x1JRF-go%#bKI&mu*qO z&aXh{L*>3$1iA_M6TymatY}?ZclUimkiFMk*BgWVDPW&bR*m2h2!5J6D|J3TzcGGo z)OdV>-@s%zEP4zd%ht=bA4VN6hg_abz$VK$mHl&+->&1(G5j3$DitfJ8kk!$FKU=2 zdRPJ^B`{YjW6AdaRYR{V5{6@dx)pmU4oRJ{pWD!|bE%a2_U%nzLVr3>N(_llXHG*$ zCq9e|gvih*mKZK-Bb4d%S&{X(nrlFt^|lji=v4y`F|y@_GFyHSJrKd;r$ zrA=9@QK9A_s&sdw9m4Pg>YP({%cmk+2_noe*|q19E5*jo;yJKQhR0CEb9M9M| zIoEk4-jbGvYevO=%l7SPDf$n+Dn7w}e`u*TFCp_e;xmFb*mKjdm5tpPFlGm{?T+*e zOQs_!V2X&I%$!V@*HxO0Z?~top1GCyz%B0|=o$+ri(ZbRF>ybm50DWw@O)(NW;*9F zHswBrqjN4F@R$^CzyKbBoqMB@ZFmji@LS_PY5LkU0yhsgGCU*>(nI2T9&OyyAL5z^ zQKHC_$04}{4Hc6U*E$!I2x=dbLI9^nf$gZSp|mlM5quQ2cd;%*&0ZeILgGFZs~6K_ zWP=Efp)%{QUdi3#VhK*p#$Gbu4%1UwcTLzte=+Uyv^L7x^i&Zq*0Etmyx-(& zDhk)yV*^d}1RAlqi=W3CLqcER9P~fOq}aE>+botm@(4=!ZIG>$@!C+xS4&RtYuoXA z`%M!voD-8wVWY9WT=WDjZreDAJ>50AydIDtoJ;$|LC(KHMlE79PzjJTOAjSvktNV! zT*iHu%UL7q&w{Y;jm>ay@SkGv?pfjaAA%)d4&sFBKVl7%70^R@{hUn;G@6aQ+g@f# zpBPNf_LdjC$&Yg-1sw;j5_R11 zaBY?`rs9kR)85CLewMs{non}Dg^CCJW9=+P2imW_i@FS-BGT;O5{`X$nMg5xiXvfH zfv2(${ZD#B9QRMqs4Rs`h4oHjv9T}|uEbYCW4Rohc~xF7j*RhEyy&7k;B`H(2Hy=g>zd`v$vHC!0eP!#~*E<^4iJo4(`I>g_j?=gmdG%4x`F2;rDvuMI&>a#|OP3Pr4$j!u=r7_&2zNB>I504a^ z1u`@jYb?KzAS(I3LTp2~9ucEjE!Q6F_7v{d%X{5A!aX92dVN?#xW8%W9`+6HF|nbS z!(PEX%vjv()(P&n$a~$g!2MQvuiFc_-zM+%_c87<*8zC_eSv#C9^C7?1o!YDaj)wG L+~0**jN$(Ph<*BP literal 0 HcmV?d00001 diff --git a/app/public/assets/fonts/PlusJakartaSans-Italic.ttf b/app/public/assets/fonts/PlusJakartaSans-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..392a6fc9cea79bdb53e1d3a5cae689fcf02206af GIT binary patch literal 96916 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 literal 0 HcmV?d00001 diff --git a/app/public/assets/fonts/PlusJakartaSans-Light.ttf b/app/public/assets/fonts/PlusJakartaSans-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2faaa670af31298963f9563b26a7a96ebca4a9f6 GIT binary patch literal 94788 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

mtvS)Bf5-XW*ZQ_fJ<`* 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 literal 0 HcmV?d00001 diff --git a/app/public/assets/fonts/PlusJakartaSans-MediumItalic.ttf b/app/public/assets/fonts/PlusJakartaSans-MediumItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1f65ded794c053df4910d0c13aef70eb917fe2b5 GIT binary patch literal 97116 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 z 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�ce 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

VDj@7c4x=P{SnsMhd0-V+cMU=Cjc*f!O9?w+LB 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 + + + + + Admin invite + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Admin access +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ 🧭 + + Admin invite +
+
+ You have been granted admin access for Dewemoji. Use the link below to enter the admin dashboard. +
+ Role: {{ role_name }}
+ Granted by: {{ granted_by }} +
+ + Open Admin Dashboard + +
+ If you do not expect this invite, please ignore the message. +
+
+ + + + + + + +
+ Admins can manage users, subscriptions, and pricing. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/api-key-created.html b/app/references/email-branded-designs/api-key-created.html new file mode 100644 index 0000000..44a3609 --- /dev/null +++ b/app/references/email-branded-designs/api-key-created.html @@ -0,0 +1,102 @@ + + + + + + API key created + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ API key +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ 🔐 + + API key created +
+
+ A new API key was created for your Dewemoji account. +
+ Label: {{ key_label }}
+ Created: {{ created_at }} +
+ + Manage API Keys + +
+ If you did not create this key, revoke it immediately. +
+
+ + + + + + + +
+ Never share your API key publicly. Treat it like a password. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/api-key-rotated.html b/app/references/email-branded-designs/api-key-rotated.html new file mode 100644 index 0000000..50b1263 --- /dev/null +++ b/app/references/email-branded-designs/api-key-rotated.html @@ -0,0 +1,102 @@ + + + + + + API key rotated + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ API key +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ 🔁 + + API key rotated +
+
+ Your API key was rotated. Update any integrations using the old key. +
+ Label: {{ key_label }}
+ Rotated: {{ rotated_at }} +
+ + View API Keys + +
+ If you did not rotate this key, revoke it immediately. +
+
+ + + + + + + +
+ Keep your API key secure and do not commit it to public repos. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/email-verification.html b/app/references/email-branded-designs/email-verification.html new file mode 100644 index 0000000..6fdf45a --- /dev/null +++ b/app/references/email-branded-designs/email-verification.html @@ -0,0 +1,98 @@ + + + + + + Dewemoji Email Verification + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Email verification +
+
+ + + + + + + + + + + + + +
+ + + + + +
+ + + Verify your email +
+
+ Thanks for joining Dewemoji. Confirm your email to activate your account and start saving emoji keywords. +
+ + Verify Email + +
+ If the button does not work, paste this link into your browser: +
+ {{ verification_url }} +
+
+ + + + + + + +
+ This link expires in 60 minutes. If you did not request this email, you can safely ignore it. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/license-key-issued.html b/app/references/email-branded-designs/license-key-issued.html new file mode 100644 index 0000000..d50409b --- /dev/null +++ b/app/references/email-branded-designs/license-key-issued.html @@ -0,0 +1,103 @@ + + + + + + License key issued + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ License +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ 🔑 + + License key issued +
+
+ Your license key is ready. Use it to unlock Dewemoji in the extension and API. +
+ License: {{ license_key }}
+ Tier: {{ tier }}
+ Devices: {{ max_devices }} +
+ + Manage License + +
+ Keep your license secure. You can rotate it anytime from your dashboard. +
+
+ + + + + + + +
+ Need help getting started? Visit your API docs from the dashboard. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/license-key-updated.html b/app/references/email-branded-designs/license-key-updated.html new file mode 100644 index 0000000..7e0c15e --- /dev/null +++ b/app/references/email-branded-designs/license-key-updated.html @@ -0,0 +1,103 @@ + + + + + + License key updated + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ License +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ 🧩 + + License updated +
+
+ Your Dewemoji license details have been updated. +
+ License: {{ license_key }}
+ Tier: {{ tier }}
+ Devices: {{ max_devices }} +
+ + View License + +
+ If you did not request this change, please contact support. +
+
+ + + + + + + +
+ Keep your license secure and avoid sharing it publicly. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/new-login-alert.html b/app/references/email-branded-designs/new-login-alert.html new file mode 100644 index 0000000..ccc748e --- /dev/null +++ b/app/references/email-branded-designs/new-login-alert.html @@ -0,0 +1,104 @@ + + + + + + New login detected + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Security alert +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ 🛡️ + + New login detected +
+
+ We noticed a new login to your Dewemoji account. +
+ Time: {{ login_time }}
+ Device: {{ login_device }}
+ Location: {{ login_location }}
+ IP: {{ login_ip }} +
+ + Review Activity + +
+ If this was you, no action is needed. +
+
+ + + + + + + +
+ If you do not recognize this login, secure your account immediately. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/password-reset.html b/app/references/email-branded-designs/password-reset.html new file mode 100644 index 0000000..12a8acc --- /dev/null +++ b/app/references/email-branded-designs/password-reset.html @@ -0,0 +1,98 @@ + + + + + + Dewemoji Password Reset + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Password reset +
+
+ + + + + + + + + + + + + +
+ + + + + +
+ 🔒 + + Reset your password +
+
+ We received a request to reset your Dewemoji password. Click the button below to choose a new one. +
+ + Reset Password + +
+ If the button does not work, paste this link into your browser: +
+ {{ reset_url }} +
+
+ + + + + + + +
+ This link expires in 60 minutes. If you did not request a password reset, you can safely ignore this email. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/payment-failed-action-required.html b/app/references/email-branded-designs/payment-failed-action-required.html new file mode 100644 index 0000000..31e74ce --- /dev/null +++ b/app/references/email-branded-designs/payment-failed-action-required.html @@ -0,0 +1,103 @@ + + + + + + Payment failed + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Billing alert +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ ⚠️ + + Payment failed +
+
+ We were unable to process your latest payment. Please update your billing details to keep your subscription active. +
+ Plan: {{ plan_name }}
+ Amount: {{ amount }}
+ Date: {{ failed_date }} +
+ + Update Payment Method + +
+ If you already updated your payment method, you can ignore this email. +
+
+ + + + + + + +
+ Need help? Reply to this email and we will assist you. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/qris-payment-confirmed.html b/app/references/email-branded-designs/qris-payment-confirmed.html new file mode 100644 index 0000000..275e017 --- /dev/null +++ b/app/references/email-branded-designs/qris-payment-confirmed.html @@ -0,0 +1,103 @@ + + + + + + QRIS payment confirmed + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ QRIS payment +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ 🎉 + + Payment confirmed +
+
+ Your QRIS payment was successful. Your access has been updated. +
+ Amount: {{ amount }}
+ Plan: {{ plan_name }}
+ Payment ID: {{ payment_reference }} +
+ + Go to Dashboard + +
+ Thank you for supporting Dewemoji. +
+
+ + + + + + + +
+ If you need a receipt, you can download it from your billing page. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/qris-payment-pending.html b/app/references/email-branded-designs/qris-payment-pending.html new file mode 100644 index 0000000..ec3f00e --- /dev/null +++ b/app/references/email-branded-designs/qris-payment-pending.html @@ -0,0 +1,103 @@ + + + + + + QRIS payment pending + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ QRIS payment +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ + + Payment pending +
+
+ We are waiting for your QRIS payment. Please complete it before it expires. +
+ Amount: {{ amount }}
+ Expires: {{ expires_at }}
+ Payment ID: {{ payment_reference }} +
+ + View Payment Details + +
+ You can also reopen the QR from your billing page. +
+
+ + + + + + + +
+ If you have already paid, please wait a moment for confirmation. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/subscription-activated-paypal.html b/app/references/email-branded-designs/subscription-activated-paypal.html new file mode 100644 index 0000000..8c758b0 --- /dev/null +++ b/app/references/email-branded-designs/subscription-activated-paypal.html @@ -0,0 +1,104 @@ + + + + + + Subscription activated + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Subscription +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ + + Subscription activated +
+
+ Your PayPal subscription is now active. Enjoy full Dewemoji features. +
+ Plan: {{ plan_name }}
+ Billing: {{ billing_cycle }}
+ Amount: {{ amount }}
+ Next charge: {{ next_billing_date }} +
+ + Manage Subscription + +
+ Need an invoice? You can download it from your billing page. +
+
+ + + + + + + +
+ If you have questions about your subscription, reply to this email. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/subscription-canceled.html b/app/references/email-branded-designs/subscription-canceled.html new file mode 100644 index 0000000..fbc14a5 --- /dev/null +++ b/app/references/email-branded-designs/subscription-canceled.html @@ -0,0 +1,102 @@ + + + + + + Subscription canceled + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Subscription +
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ 🧾 + + Subscription canceled +
+
+ Your subscription has been canceled. You will keep access until the end of the current billing period. +
+ Plan: {{ plan_name }}
+ Access ends: {{ end_date }} +
+ + View Plans + +
+ You can re-subscribe anytime from your dashboard. +
+
+ + + + + + + +
+ If this was a mistake, reply to this email and we will help you out. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-branded-designs/welcome-onboarding.html b/app/references/email-branded-designs/welcome-onboarding.html new file mode 100644 index 0000000..a557e43 --- /dev/null +++ b/app/references/email-branded-designs/welcome-onboarding.html @@ -0,0 +1,110 @@ + + + + + + Welcome to Dewemoji + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Welcome +
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ 🎉 + + Welcome to Dewemoji +
+
+ Hey {{ first_name }}, you now have a home for every emoji keyword. Save, search, and sync your favorites across devices. +
+ Start here +
+ 1. Add your first emoji keyword +
+ 2. Generate an API key for your workflows +
+ 3. Sync your list to the extension +
+ + Open Dashboard + +
+ Need help? Visit the docs: {{ docs_url }} +
+
+ + + + + + + +
+ If you have questions, reply to this email and we will help you out. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-designs/email-verification-light.html b/app/references/email-designs/email-verification-light.html new file mode 100644 index 0000000..00677de --- /dev/null +++ b/app/references/email-designs/email-verification-light.html @@ -0,0 +1,89 @@ + + + + + + Dewemoji Email Verification + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + Dewemoji +
+
+ Email verification +
+
+ + + + + + + + + + + + + +
+ Verify your email to unlock Dewemoji +
+ Thanks for joining. Please confirm your email address to activate your account and start saving your favorite emoji keywords. +
+ + Verify Email + +
+ If the button does not work, paste this link into your browser: +
+ {{ verification_url }} +
+
+ + + + + + + +
+ This link will expire in 60 minutes. If you did not request this email, you can safely ignore it. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-designs/email-verification-v2.html b/app/references/email-designs/email-verification-v2.html new file mode 100644 index 0000000..a007049 --- /dev/null +++ b/app/references/email-designs/email-verification-v2.html @@ -0,0 +1,89 @@ + + + + + + Dewemoji Email Verification + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + Dewemoji +
+
+ Email verification +
+
+ + + + + + + + + + + + + +
+ Verify your email to unlock Dewemoji +
+ Thanks for joining. Please confirm your email address to activate your account and start saving your favorite emoji keywords. +
+ + Verify Email + +
+ If the button doesn’t work, paste this link into your browser: +
+ {{ verification_url }} +
+
+ + + + + + + +
+ This link will expire in 60 minutes. If you didn’t request this email, you can safely ignore it. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-designs/password-reset-brand.html b/app/references/email-designs/password-reset-brand.html new file mode 100644 index 0000000..f4ac554 --- /dev/null +++ b/app/references/email-designs/password-reset-brand.html @@ -0,0 +1,98 @@ + + + + + + Dewemoji Password Reset + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ D + + Dewemoji +
+
+ Password reset +
+
+ + + + + + + + + + + + + +
+ + + + + +
+ 🔒 + + Reset your password +
+
+ We received a request to reset your Dewemoji password. Click the button below to choose a new one. +
+ + Reset Password + +
+ If the button does not work, paste this link into your browser: +
+ {{ reset_url }} +
+
+ + + + + + + +
+ This link will expire in 60 minutes. If you did not request a password reset, you can safely ignore this email. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-designs/password-reset-light.html b/app/references/email-designs/password-reset-light.html new file mode 100644 index 0000000..8ab89f8 --- /dev/null +++ b/app/references/email-designs/password-reset-light.html @@ -0,0 +1,89 @@ + + + + + + Dewemoji Password Reset + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ 🔒 + + Dewemoji +
+
+ Password reset +
+
+ + + + + + + + + + + + + +
+ Reset your password +
+ We received a request to reset your Dewemoji password. Click the button below to choose a new one. +
+ + Reset Password + +
+ If the button does not work, paste this link into your browser: +
+ {{ reset_url }} +
+
+ + + + + + + +
+ This link will expire in 60 minutes. If you did not request a password reset, you can safely ignore this email. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-designs/password-reset-no-wrapper.html b/app/references/email-designs/password-reset-no-wrapper.html new file mode 100644 index 0000000..e3b0876 --- /dev/null +++ b/app/references/email-designs/password-reset-no-wrapper.html @@ -0,0 +1,98 @@ + + + + + + Dewemoji Password Reset + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ D + + Dewemoji +
+
+ Password reset +
+
+ + + + + + + + + + + + + +
+ + + + + +
+ 🔒 + + Reset your password +
+
+ We received a request to reset your Dewemoji password. Click the button below to choose a new one. +
+ + Reset Password + +
+ If the button does not work, paste this link into your browser: +
+ {{ reset_url }} +
+
+ + + + + + + +
+ This link will expire in 60 minutes. If you did not request a password reset, you can safely ignore this email. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/references/email-designs/welcome-onboarding-light.html b/app/references/email-designs/welcome-onboarding-light.html new file mode 100644 index 0000000..1734b6f --- /dev/null +++ b/app/references/email-designs/welcome-onboarding-light.html @@ -0,0 +1,101 @@ + + + + + + Welcome to Dewemoji + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ 🎉 + + Dewemoji +
+
+ Welcome +
+
+ + + + + + + + + + + + + + + + + + + +
+ Welcome to Dewemoji, {{ first_name }} +
+ You now have a home for every emoji keyword. Save, search, and sync your favorites across devices with a single license. +
+ Start here +
+ 1. Add your first emoji keyword +
+ 2. Generate an API key for your workflows +
+ 3. Sync your list to the extension +
+ + Open Dashboard + +
+ Need help? Visit the docs: {{ docs_url }} +
+
+ + + + + + + +
+ If you have questions, reply to this email and we will help you out. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/resources/css/app.css b/app/resources/css/app.css index 3e6abea..b5c61c9 100644 --- a/app/resources/css/app.css +++ b/app/resources/css/app.css @@ -1,11 +1,3 @@ -@import 'tailwindcss'; - -@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; -@source '../../storage/framework/views/*.php'; -@source '../**/*.blade.php'; -@source '../**/*.js'; - -@theme { - --font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol', 'Noto Color Emoji'; -} +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/app/resources/js/app.js b/app/resources/js/app.js index e59d6a0..656145b 100644 --- a/app/resources/js/app.js +++ b/app/resources/js/app.js @@ -1 +1,9 @@ import './bootstrap'; + +import ApexCharts from 'apexcharts'; +import Alpine from 'alpinejs'; + +window.Alpine = Alpine; +window.ApexCharts = ApexCharts; + +Alpine.start(); diff --git a/app/resources/views/auth/confirm-password.blade.php b/app/resources/views/auth/confirm-password.blade.php new file mode 100644 index 0000000..c0df2f5 --- /dev/null +++ b/app/resources/views/auth/confirm-password.blade.php @@ -0,0 +1,27 @@ + +

+ +
+ @csrf + + +
+ + + + + +
+ +
+ + {{ __('Confirm') }} + +
+
+ diff --git a/app/resources/views/auth/forgot-password.blade.php b/app/resources/views/auth/forgot-password.blade.php new file mode 100644 index 0000000..ad3eca7 --- /dev/null +++ b/app/resources/views/auth/forgot-password.blade.php @@ -0,0 +1,25 @@ + +
+ {{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }} +
+ + + + +
+ @csrf + + +
+ + + +
+ +
+ + {{ __('Email Password Reset Link') }} + +
+
+
diff --git a/app/resources/views/auth/login.blade.php b/app/resources/views/auth/login.blade.php new file mode 100644 index 0000000..2938ec6 --- /dev/null +++ b/app/resources/views/auth/login.blade.php @@ -0,0 +1,53 @@ + + @section('title', 'Login - '.config('app.name', 'Dewemoji')) + + + +
+ @csrf + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ +
+ +
+ +
+ Don't have an account? + Register +
+
+ diff --git a/app/resources/views/auth/register.blade.php b/app/resources/views/auth/register.blade.php new file mode 100644 index 0000000..553be9b --- /dev/null +++ b/app/resources/views/auth/register.blade.php @@ -0,0 +1,53 @@ + + @section('title', 'Register - '.config('app.name', 'Dewemoji')) +
+ @csrf + + +
+ + + +
+ + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ +
+ + {{ __('Already registered?') }} + + + + {{ __('Register') }} + +
+
+
diff --git a/app/resources/views/auth/reset-password.blade.php b/app/resources/views/auth/reset-password.blade.php new file mode 100644 index 0000000..a6494cc --- /dev/null +++ b/app/resources/views/auth/reset-password.blade.php @@ -0,0 +1,39 @@ + +
+ @csrf + + + + + +
+ + + +
+ + +
+ + + +
+ + +
+ + + + + +
+ +
+ + {{ __('Reset Password') }} + +
+
+
diff --git a/app/resources/views/auth/verify-email.blade.php b/app/resources/views/auth/verify-email.blade.php new file mode 100644 index 0000000..d3089dd --- /dev/null +++ b/app/resources/views/auth/verify-email.blade.php @@ -0,0 +1,31 @@ + +
+ {{ __('Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }} +
+ + @if (session('status') == 'verification-link-sent') +
+ {{ __('A new verification link has been sent to the email address you provided during registration.') }} +
+ @endif + +
+
+ @csrf + +
+ + {{ __('Resend Verification Email') }} + +
+
+ +
+ @csrf + + +
+
+
diff --git a/app/resources/views/components/application-logo.blade.php b/app/resources/views/components/application-logo.blade.php new file mode 100644 index 0000000..46579cf --- /dev/null +++ b/app/resources/views/components/application-logo.blade.php @@ -0,0 +1,3 @@ + + + diff --git a/app/resources/views/components/auth-session-status.blade.php b/app/resources/views/components/auth-session-status.blade.php new file mode 100644 index 0000000..c4bd6e2 --- /dev/null +++ b/app/resources/views/components/auth-session-status.blade.php @@ -0,0 +1,7 @@ +@props(['status']) + +@if ($status) +
merge(['class' => 'font-medium text-sm text-green-600']) }}> + {{ $status }} +
+@endif diff --git a/app/resources/views/components/danger-button.blade.php b/app/resources/views/components/danger-button.blade.php new file mode 100644 index 0000000..16a418a --- /dev/null +++ b/app/resources/views/components/danger-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/app/resources/views/components/dropdown-link.blade.php b/app/resources/views/components/dropdown-link.blade.php new file mode 100644 index 0000000..e0f8ce1 --- /dev/null +++ b/app/resources/views/components/dropdown-link.blade.php @@ -0,0 +1 @@ +merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition duration-150 ease-in-out']) }}>{{ $slot }} diff --git a/app/resources/views/components/dropdown.blade.php b/app/resources/views/components/dropdown.blade.php new file mode 100644 index 0000000..a46f7c8 --- /dev/null +++ b/app/resources/views/components/dropdown.blade.php @@ -0,0 +1,35 @@ +@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white']) + +@php +$alignmentClasses = match ($align) { + 'left' => 'ltr:origin-top-left rtl:origin-top-right start-0', + 'top' => 'origin-top', + default => 'ltr:origin-top-right rtl:origin-top-left end-0', +}; + +$width = match ($width) { + '48' => 'w-48', + default => $width, +}; +@endphp + +
+
+ {{ $trigger }} +
+ + +
diff --git a/app/resources/views/components/input-error.blade.php b/app/resources/views/components/input-error.blade.php new file mode 100644 index 0000000..33f4a48 --- /dev/null +++ b/app/resources/views/components/input-error.blade.php @@ -0,0 +1,9 @@ +@props(['messages']) + +@if ($messages) +
    merge(['class' => 'text-sm text-red-500 dark:text-red-400 space-y-1']) }}> + @foreach ((array) $messages as $message) +
  • {{ $message }}
  • + @endforeach +
+@endif diff --git a/app/resources/views/components/input-label.blade.php b/app/resources/views/components/input-label.blade.php new file mode 100644 index 0000000..b21401a --- /dev/null +++ b/app/resources/views/components/input-label.blade.php @@ -0,0 +1,5 @@ +@props(['value']) + + diff --git a/app/resources/views/components/modal.blade.php b/app/resources/views/components/modal.blade.php new file mode 100644 index 0000000..70704c1 --- /dev/null +++ b/app/resources/views/components/modal.blade.php @@ -0,0 +1,78 @@ +@props([ + 'name', + 'show' => false, + 'maxWidth' => '2xl' +]) + +@php +$maxWidth = [ + 'sm' => 'sm:max-w-sm', + 'md' => 'sm:max-w-md', + 'lg' => 'sm:max-w-lg', + 'xl' => 'sm:max-w-xl', + '2xl' => 'sm:max-w-2xl', +][$maxWidth]; +@endphp + +
+
+
+
+ +
+ {{ $slot }} +
+
diff --git a/app/resources/views/components/nav-link.blade.php b/app/resources/views/components/nav-link.blade.php new file mode 100644 index 0000000..5c101a2 --- /dev/null +++ b/app/resources/views/components/nav-link.blade.php @@ -0,0 +1,11 @@ +@props(['active']) + +@php +$classes = ($active ?? false) + ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out' + : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300 transition duration-150 ease-in-out'; +@endphp + +merge(['class' => $classes]) }}> + {{ $slot }} + diff --git a/app/resources/views/components/primary-button.blade.php b/app/resources/views/components/primary-button.blade.php new file mode 100644 index 0000000..782ac61 --- /dev/null +++ b/app/resources/views/components/primary-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/app/resources/views/components/responsive-nav-link.blade.php b/app/resources/views/components/responsive-nav-link.blade.php new file mode 100644 index 0000000..43b91e7 --- /dev/null +++ b/app/resources/views/components/responsive-nav-link.blade.php @@ -0,0 +1,11 @@ +@props(['active']) + +@php +$classes = ($active ?? false) + ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 text-start text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition duration-150 ease-in-out' + : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition duration-150 ease-in-out'; +@endphp + +merge(['class' => $classes]) }}> + {{ $slot }} + diff --git a/app/resources/views/components/secondary-button.blade.php b/app/resources/views/components/secondary-button.blade.php new file mode 100644 index 0000000..b32b69f --- /dev/null +++ b/app/resources/views/components/secondary-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/app/resources/views/components/text-input.blade.php b/app/resources/views/components/text-input.blade.php new file mode 100644 index 0000000..16299e9 --- /dev/null +++ b/app/resources/views/components/text-input.blade.php @@ -0,0 +1,3 @@ +@props(['disabled' => false]) + +merge(['class' => 'rounded-xl border border-slate-300/80 bg-white/90 px-4 py-2 text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-brand-ocean/40 dark:border-white/10 dark:bg-slate-900/70 dark:text-slate-100 dark:placeholder-slate-500']) }}> diff --git a/app/resources/views/dashboard.blade.php b/app/resources/views/dashboard.blade.php new file mode 100644 index 0000000..dca6e52 --- /dev/null +++ b/app/resources/views/dashboard.blade.php @@ -0,0 +1,26 @@ +{{-- LEGACY VIEW (NOT USED) + This file is the default Breeze dashboard and is NOT wired to any routes. + The active dashboard layout lives in resources/views/dashboard/app.blade.php + and pages in resources/views/dashboard/*.blade.php +--}} + + +

+ {{ __('Dashboard') }} +

+
+ +
+
+
+ Legacy template: This view is not used by the current dashboard routes. + The live dashboard uses resources/views/dashboard/app.blade.php. +
+
+
+ {{ __("You're logged in!") }} +
+
+
+
+
diff --git a/app/resources/views/dashboard/admin/audit-logs.blade.php b/app/resources/views/dashboard/admin/audit-logs.blade.php new file mode 100644 index 0000000..61e4251 --- /dev/null +++ b/app/resources/views/dashboard/admin/audit-logs.blade.php @@ -0,0 +1,64 @@ +@extends('dashboard.app') + +@section('page_title', 'Audit Logs') +@section('page_subtitle', 'Track administrative actions and changes.') + +@section('dashboard_content') +
+
+
+
Audit trail
+
Recent admin actions
+
+
+ + + +
+
+ +
+ + + + + + + + + + + + @forelse ($logs ?? [] as $log) + + + + + + + + @empty + + + + @endforelse + +
AdminActionIPTimePayload
+
{{ $log->admin_email ?? '—' }}
+
#{{ $log->admin_id ?? 'n/a' }}
+
{{ $log->action }}{{ $log->ip_address ?? '—' }}{{ $log->created_at?->toDateTimeString() ?? '—' }} +
{{ json_encode($log->payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) }}
+
No audit logs yet.
+
+ +
+ {{ $logs->links('vendor.pagination.dashboard') }} +
+
+@endsection diff --git a/app/resources/views/dashboard/admin/pricing.blade.php b/app/resources/views/dashboard/admin/pricing.blade.php new file mode 100644 index 0000000..3e8bb37 --- /dev/null +++ b/app/resources/views/dashboard/admin/pricing.blade.php @@ -0,0 +1,145 @@ +@extends('dashboard.app') + +@section('page_title', 'Admin Pricing') +@section('page_subtitle', 'Manage plan pricing and rollout changes.') + +@section('dashboard_content') + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @foreach ([ + ['label' => 'Plans', 'value' => number_format(($plans ?? collect())->count()), 'note' => 'Active tiers'], + ['label' => 'Pending changes', 'value' => number_format(($changes ?? collect())->count()), 'note' => 'Latest snapshots'], + ['label' => 'Currency', 'value' => optional(($plans ?? collect())->first())->currency ?? 'IDR', 'note' => 'Default'], + ] as $card) +
+
{{ $card['label'] }}
+
{{ $card['value'] }}
+
{{ $card['note'] }}
+
+ @endforeach +
+ +
+ @csrf + @forelse ($plans ?? [] as $plan) +
+
+
{{ $plan->code }}
+ {{ $plan->status }} +
+
+ + +
+ + +
+
+ + +
+
+
PayPal Plan IDs
+
+
Sandbox: {{ $plan->meta['paypal']['sandbox']['plan']['id'] ?? '—' }}
+
Live: {{ $plan->meta['paypal']['live']['plan']['id'] ?? '—' }}
+
Last sync: {{ $plan->meta['paypal']['live']['plan']['synced_at'] ?? $plan->meta['paypal']['sandbox']['plan']['synced_at'] ?? '—' }}
+
+
+
+
+ @empty +
+ No pricing plans yet. Use reset to defaults to create base plans. +
+ @endforelse +
+ + + +
+
+ +
+ @csrf +
+ +
+ @csrf +
+ +
+
+
+
Change log
+
Recent pricing updates
+
+
+ @csrf + +
+
+
+ @forelse ($changes ?? [] as $change) +
+
+
Pricing change #{{ $change->id }}
+
{{ $change->created_at?->toDateString() }} · {{ $change->admin_ref ?? 'system' }}
+
+ Published +
+ @empty +
No pricing changes recorded yet.
+ @endforelse +
+
+ + +@endsection diff --git a/app/resources/views/dashboard/admin/settings.blade.php b/app/resources/views/dashboard/admin/settings.blade.php new file mode 100644 index 0000000..27d1c3b --- /dev/null +++ b/app/resources/views/dashboard/admin/settings.blade.php @@ -0,0 +1,93 @@ +@extends('dashboard.app') + +@section('page_title', 'Admin Settings') +@section('page_subtitle', 'System configuration and feature flags.') + +@section('dashboard_content') + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @foreach ([ + ['label' => 'Billing mode', 'value' => ($settings['billing_mode'] ?? config('dewemoji.billing.mode')), 'note' => isset($settings['billing_mode']) ? 'DB' : 'Env'], + ['label' => 'Rate limit', 'value' => config('dewemoji.rate_limit_enabled') ? 'On' : 'Off', 'note' => 'Global'], + ['label' => 'Public access', 'value' => ((bool) ($settings['public_enforce'] ?? config('dewemoji.public_access.enforce_whitelist'))) ? 'Whitelist' : 'Open', 'note' => 'Origin policy'], + ] as $card) +
+
{{ $card['label'] }}
+
{{ $card['value'] }}
+
{{ $card['note'] }}
+
+ @endforeach +
+ +
+
+
Feature flags
+
System toggles
+
+ @foreach ([ + ['label' => 'Maintenance mode', 'desc' => 'Temporarily block public API access', 'state' => ((bool) ($settings['maintenance_enabled'] ?? false)) ? 'On' : 'Off'], + ['label' => 'Extension verification', 'desc' => 'Require GCM token for extension calls', 'state' => config('dewemoji.extension_verification.enabled') ? 'On' : 'Off'], + ['label' => 'Metrics', 'desc' => 'Allow internal metrics endpoints', 'state' => config('dewemoji.metrics.enabled') ? 'On' : 'Off'], + ] as $row) +
+
+
{{ $row['label'] }}
+
{{ $row['desc'] }}
+
+ + {{ $row['state'] }} + +
+ @endforeach +
+
+ +
+
Public access
+
Allowlist configuration
+
+ @csrf + + + + + + + +

Changes update the settings store immediately.

+
+
+
+@endsection diff --git a/app/resources/views/dashboard/admin/subscription-show.blade.php b/app/resources/views/dashboard/admin/subscription-show.blade.php new file mode 100644 index 0000000..b2fc1c5 --- /dev/null +++ b/app/resources/views/dashboard/admin/subscription-show.blade.php @@ -0,0 +1,65 @@ +@extends('dashboard.app') + +@section('page_title', 'Subscription Details') +@section('page_subtitle', 'Plan status, provider info, and timeline.') + +@section('dashboard_content') + + Back to subscriptions + + +
+
+
Subscriber
+
{{ $subscription->user?->name ?? '—' }}
+
{{ $subscription->user?->email ?? '—' }}
+ @if ($subscription->user) + + View user + + @endif +
+
+
Plan
+
{{ $subscription->plan }}
+
Status: {{ $subscription->status }}
+
+
+
Provider
+
{{ $subscription->provider ?? 'admin' }}
+
Ref: {{ $subscription->provider_ref ?? '—' }}
+
+
+ +
+
+
Timeline
+
Subscription dates
+
+
+ Started + {{ $subscription->started_at?->toDateString() ?? '—' }} +
+
+ Expires + {{ $subscription->expires_at?->toDateString() ?? '—' }} +
+
+ Created + {{ $subscription->created_at?->toDateString() ?? '—' }} +
+
+
+
+
Actions
+
Manage subscription
+
+
+ @csrf + + +
+
+
+
+@endsection diff --git a/app/resources/views/dashboard/admin/subscriptions.blade.php b/app/resources/views/dashboard/admin/subscriptions.blade.php new file mode 100644 index 0000000..888614c --- /dev/null +++ b/app/resources/views/dashboard/admin/subscriptions.blade.php @@ -0,0 +1,196 @@ +@extends('dashboard.app') + +@section('page_title', 'Admin Subscriptions') +@section('page_subtitle', 'Grant, revoke, and audit Pro access.') + +@section('dashboard_content') + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @foreach ([ + ['label' => 'Active', 'value' => number_format(\App\Models\Subscription::where('status', 'active')->count()), 'note' => 'Subscriptions'], + ['label' => 'Revoked', 'value' => number_format(\App\Models\Subscription::where('status', 'revoked')->count()), 'note' => 'All time'], + ['label' => 'Pending', 'value' => number_format(\App\Models\Subscription::where('status', 'pending')->count()), 'note' => 'Manual review'], + ] as $card) +
+
{{ $card['label'] }}
+
{{ $card['value'] }}
+
{{ $card['note'] }}
+
+ @endforeach +
+ +
+
+
+
Filters
+
Refine subscriptions
+
+
+ + + + + + +
+
+
+ +
+
+
Grant access
+
Create subscription
+
+ @csrf +
+ + +
+
+ + +
+
+ + +
+ +
+
+ +
+
Revoke access
+
Cancel subscription
+
+ @csrf + + + + +
+
+
+ +
+
+
+
Subscription list
+
Recent subscriptions
+
+
+
+ + + + @php + $sortParam = $sort ?? 'id'; + $dirParam = $dir ?? 'desc'; + $toggle = fn ($field) => ($sortParam === $field && $dirParam === 'asc') ? 'desc' : 'asc'; + $sortUrl = fn ($field) => request()->fullUrlWithQuery(['sort' => $field, 'dir' => $toggle($field)]); + @endphp + + + + + + + + + @forelse ($subscriptions ?? [] as $row) + + + + + + + + @empty + + + + @endforelse + +
Subscriber + + Plan + + + + + Status + + + + + Next billing + + + Actions
+
{{ $row->user?->name ?? '—' }}
+
{{ $row->user?->email ?? '—' }}
+
{{ $row->plan }} + @php + $inactive = in_array($row->status, ['revoked', 'cancelled', 'suspended'], true); + $pill = $inactive + ? ['bg' => 'bg-rose-100 dark:bg-rose-500/20', 'text' => 'text-rose-800 dark:text-rose-200'] + : ($row->status === 'pending' + ? ['bg' => 'bg-amber-100 dark:bg-amber-500/20', 'text' => 'text-amber-800 dark:text-amber-200'] + : ['bg' => 'bg-emerald-100 dark:bg-emerald-500/20', 'text' => 'text-emerald-800 dark:text-emerald-200']); + @endphp + + {{ $row->status }} + + {{ $row->expires_at?->toDateString() ?? '—' }} + View +
No subscriptions found.
+
+
+ {{ $subscriptions->links('vendor.pagination.dashboard') }} +
+
+@endsection diff --git a/app/resources/views/dashboard/admin/user-show.blade.php b/app/resources/views/dashboard/admin/user-show.blade.php new file mode 100644 index 0000000..9481a7a --- /dev/null +++ b/app/resources/views/dashboard/admin/user-show.blade.php @@ -0,0 +1,88 @@ +@extends('dashboard.app') + +@section('page_title', 'User Details') +@section('page_subtitle', 'Profile, access, and subscription history.') + +@section('dashboard_content') + + Back to users + + +
+
User ID: {{ $user->id }}
+
+ @csrf + @method('DELETE') + +
+
+ +
+
+
Account
+
{{ $user->name ?? '—' }}
+
{{ $user->email }}
+
+
+
Access
+
{{ $user->role ?? 'user' }}
+
Tier: {{ $user->tier ?? 'free' }}
+
+
+
Joined
+
{{ $user->created_at?->toDateString() ?? '—' }}
+
{{ $user->created_at?->diffForHumans() ?? '' }}
+
+
+ +
+
+
+
Subscriptions
+
Recent access records
+
+
+
+ + + + + + + + + + + + @forelse ($subscriptions as $row) + + + + + + + + @empty + + + + @endforelse + +
PlanStatusStartedExpiresActions
{{ $row->plan }} + @php + $inactive = in_array($row->status, ['revoked', 'cancelled', 'suspended'], true); + $pill = $inactive + ? ['bg' => 'bg-rose-100 dark:bg-rose-500/20', 'text' => 'text-rose-800 dark:text-rose-200'] + : ($row->status === 'pending' + ? ['bg' => 'bg-amber-100 dark:bg-amber-500/20', 'text' => 'text-amber-800 dark:text-amber-200'] + : ['bg' => 'bg-emerald-100 dark:bg-emerald-500/20', 'text' => 'text-emerald-800 dark:text-emerald-200']); + @endphp + + {{ $row->status }} + + {{ $row->started_at?->toDateString() ?? '—' }}{{ $row->expires_at?->toDateString() ?? '—' }} + View +
No subscriptions found.
+
+
+@endsection diff --git a/app/resources/views/dashboard/admin/users.blade.php b/app/resources/views/dashboard/admin/users.blade.php new file mode 100644 index 0000000..e54ead7 --- /dev/null +++ b/app/resources/views/dashboard/admin/users.blade.php @@ -0,0 +1,207 @@ +@extends('dashboard.app') + +@section('page_title', 'Admin Users') +@section('page_subtitle', 'Manage accounts, roles, and access tiers.') + +@section('dashboard_content') + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + @if ($errors->any()) +
+ {{ $errors->first() }} +
+ @endif + +
+ @foreach ([ + ['label' => 'Total users', 'value' => number_format(\App\Models\User::count()), 'note' => 'All accounts'], + ['label' => 'Personal tier', 'value' => number_format(\App\Models\User::where('tier', 'personal')->count()), 'note' => 'Active subscriptions'], + ['label' => 'Admins', 'value' => number_format(\App\Models\User::where('role', 'admin')->count()), 'note' => 'Staff'], + ] as $card) +
+
{{ $card['label'] }}
+
{{ $card['value'] }}
+
{{ $card['note'] }}
+
+ @endforeach +
+ +
+
+
+
+
Create
+
Add new user
+
+ +
+ +
+ +
+
+
Directory
+
User list
+
+
+ + + + + + +
+
+ +
+ + + + @php + $sortParam = $sort ?? 'id'; + $dirParam = $dir ?? 'desc'; + $toggle = fn ($field) => ($sortParam === $field && $dirParam === 'asc') ? 'desc' : 'asc'; + $sortUrl = fn ($field) => request()->fullUrlWithQuery(['sort' => $field, 'dir' => $toggle($field)]); + @endphp + + + + + + + + + + @forelse ($users ?? [] as $user) + + + + + + + + + @empty + + + + @endforelse + +
+ + User + + + + + Role + + + + + Tier + + + Status + + Joined + + + Actions
+
{{ $user->name ?? '—' }}
+
{{ $user->email }}
+
{{ $user->role ?? 'user' }} +
+ @csrf + + + +
+
+ Active + {{ $user->created_at?->toDateString() }} +
+ View +
+ @csrf + @method('DELETE') + +
+
+
No users found.
+
+
+ {{ $users->links('vendor.pagination.dashboard') }} +
+
+@endsection + +@push('scripts') + +@endpush diff --git a/app/resources/views/dashboard/admin/webhook-show.blade.php b/app/resources/views/dashboard/admin/webhook-show.blade.php new file mode 100644 index 0000000..f8b3388 --- /dev/null +++ b/app/resources/views/dashboard/admin/webhook-show.blade.php @@ -0,0 +1,57 @@ +@extends('dashboard.app') + +@section('page_title', 'Webhook Detail') +@section('page_subtitle', 'Event payload, headers, and processing status.') + +@section('dashboard_content') + + Back to webhooks + + +
+
+
Event
+
#{{ $event->id }}
+
{{ $event->event_type ?? 'event' }}
+
+
+
Provider
+
{{ $event->provider }}
+
Event ID: {{ $event->event_id ?? '—' }}
+
+
+
Status
+
{{ $event->status }}
+
Received: {{ $event->received_at?->toDateTimeString() ?? $event->created_at?->toDateTimeString() }}
+
+
+ +
+
+
+
+
Payload
+
Event body
+
+
+ @csrf + +
+
+
{{ json_encode($event->payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) }}
+ @if ($event->error) +
+ {{ $event->error }} +
+ @endif +
+
+
Headers
+
Request metadata
+
{{ json_encode($event->headers, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) }}
+
+ Processed: {{ $event->processed_at?->toDateTimeString() ?? '—' }} +
+
+
+@endsection diff --git a/app/resources/views/dashboard/admin/webhooks.blade.php b/app/resources/views/dashboard/admin/webhooks.blade.php new file mode 100644 index 0000000..580bd45 --- /dev/null +++ b/app/resources/views/dashboard/admin/webhooks.blade.php @@ -0,0 +1,139 @@ +@extends('dashboard.app') + +@section('page_title', 'Admin Webhooks') +@section('page_subtitle', 'Monitor deliveries, failures, and replays.') + +@section('dashboard_content') + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @foreach ([ + ['label' => 'Events (total)', 'value' => number_format(\App\Models\WebhookEvent::count()), 'note' => 'All providers'], + ['label' => 'Failures', 'value' => number_format(\App\Models\WebhookEvent::where('status', 'error')->count()), 'note' => 'Needs replay'], + ['label' => 'Providers', 'value' => number_format(\App\Models\WebhookEvent::distinct('provider')->count('provider')), 'note' => 'Configured'], + ] as $card) +
+
{{ $card['label'] }}
+
{{ $card['value'] }}
+
{{ $card['note'] }}
+
+ @endforeach +
+ +
+
+
+
Delivery log
+
Recent events
+
+
+
+ + + + + +
+
+ @csrf + +
+
+
+ +
+ + + + @php + $sortParam = $sort ?? 'id'; + $dirParam = $dir ?? 'desc'; + $toggle = fn ($field) => ($sortParam === $field && $dirParam === 'asc') ? 'desc' : 'asc'; + $sortUrl = fn ($field) => request()->fullUrlWithQuery(['sort' => $field, 'dir' => $toggle($field)]); + @endphp + + + + + + + + + @forelse ($events ?? [] as $row) + + + + + + + + @empty + + + + @endforelse + +
+ + Event + + + + + Provider + + + + + Status + + + + + Time + + + Actions
+
#{{ $row->id }}
+
{{ $row->event_type ?? 'event' }}
+
{{ $row->provider }} + @php + $pill = $row->status === 'error' + ? ['bg' => 'bg-rose-100 dark:bg-rose-500/20', 'text' => 'text-rose-800 dark:text-rose-200'] + : ($row->status === 'pending' || $row->status === 'received' + ? ['bg' => 'bg-amber-100 dark:bg-amber-500/20', 'text' => 'text-amber-800 dark:text-amber-200'] + : ['bg' => 'bg-emerald-100 dark:bg-emerald-500/20', 'text' => 'text-emerald-800 dark:text-emerald-200']); + @endphp + + {{ $row->status }} + + {{ $row->received_at?->diffForHumans() ?? $row->created_at?->diffForHumans() }} +
+ View +
+ @csrf + +
+
+
No webhook events found.
+
+
+ {{ $events->links('vendor.pagination.dashboard') }} +
+
+@endsection diff --git a/app/resources/views/dashboard/app.blade.php b/app/resources/views/dashboard/app.blade.php new file mode 100644 index 0000000..9ef3c7c --- /dev/null +++ b/app/resources/views/dashboard/app.blade.php @@ -0,0 +1,286 @@ +@extends('site.layout') + +@php + $user = auth()->user(); + $isAdmin = Gate::allows('admin'); + + $navUser = [ + ['label' => 'Overview', 'route' => 'dashboard.overview', 'icon' => 'layout-dashboard'], + ['label' => 'My Keywords', 'route' => 'dashboard.keywords', 'icon' => 'hash'], + ['label' => 'API Keys', 'route' => 'dashboard.api-keys', 'icon' => 'key-round'], + ['label' => 'Billing', 'route' => 'dashboard.billing', 'icon' => 'badge-dollar-sign'], + ['label' => 'Preferences', 'route' => 'dashboard.preferences', 'icon' => 'settings-2'], + ['label' => 'Profile', 'route' => 'profile.edit', 'icon' => 'user-round'], + ]; + + $navAdmin = [ + ['label' => 'Overview', 'route' => 'dashboard.overview', 'icon' => 'layout-dashboard'], + ['label' => 'Users', 'route' => 'dashboard.admin.users', 'icon' => 'users'], + ['label' => 'Subscriptions', 'route' => 'dashboard.admin.subscriptions', 'icon' => 'credit-card'], + ['label' => 'Pricing', 'route' => 'dashboard.admin.pricing', 'icon' => 'badge-dollar-sign'], + ['label' => 'Webhooks', 'route' => 'dashboard.admin.webhooks', 'icon' => 'webhook'], + ['label' => 'Audit Logs', 'route' => 'dashboard.admin.audit_logs', 'icon' => 'list-checks'], + ['label' => 'Settings', 'route' => 'dashboard.admin.settings', 'icon' => 'settings'], + ['label' => 'Profile', 'route' => 'profile.edit', 'icon' => 'user-round'], + ]; + + $nav = $isAdmin ? $navAdmin : $navUser; + $exportQuery = request()->query(); +@endphp + +@section('content') +
+ + +
+
+
+
+
+
Workspace
+

{{ trim($__env->yieldContent('page_title')) ?: 'Dashboard Overview' }}

+

{{ trim($__env->yieldContent('page_subtitle')) ?: 'A shared layout with role-based navigation.' }}

+
+ +
+
+
+ +
+ @if ($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! $user->hasVerifiedEmail()) +
+
+
+
Verify your email to unlock billing and API keys.
+
No reminders will be sent automatically.
+
+
+ @csrf + +
+
+
+ @endif + @yield('dashboard_content') +
+
+
+@endsection + +@section('mobile_nav') + +@endsection + +@section('more_menu') + + +@endsection + +@push('scripts') + +@endpush diff --git a/app/resources/views/dashboard/index.blade.php b/app/resources/views/dashboard/index.blade.php new file mode 100644 index 0000000..65560f4 --- /dev/null +++ b/app/resources/views/dashboard/index.blade.php @@ -0,0 +1,182 @@ +@extends('dashboard.app') + +@section('title', 'Dashboard') +@section('page_title', 'Dashboard Overview') +@section('page_subtitle', 'A shared layout with role-based navigation.') + +@section('dashboard_content') +@php + $isAdmin = Gate::allows('admin'); + $metrics = $overviewMetrics ?? [ + 'users_total' => 0, + 'users_personal' => 0, + 'subscriptions_active' => 0, + 'subscriptions_total' => 0, + 'webhook_total' => 0, + 'webhook_errors' => 0, + ]; + $personalPct = $metrics['users_total'] > 0 + ? round(($metrics['users_personal'] / $metrics['users_total']) * 100) + : 0; +@endphp + +
+
+
Total users
+
{{ number_format($metrics['users_total']) }}
+
{{ number_format($metrics['users_personal']) }} personal users
+
+
+
+
+
+
Active subscriptions
+
{{ number_format($metrics['subscriptions_active']) }}
+
{{ number_format($metrics['subscriptions_total']) }} total subscriptions
+
+ + {{ $metrics['subscriptions_active'] > 0 ? 'Live access enabled' : 'No active subs' }} +
+
+
+
Webhook events
+
{{ number_format($metrics['webhook_total']) }}
+
{{ number_format($metrics['webhook_errors']) }} failures
+
+ + {{ $metrics['webhook_errors'] > 0 ? 'Needs review' : 'All clear' }} +
+
+
+ +
+
+
+
+
Insights
+
Usage highlights
+
+ Last 7 days +
+
+
+
Top search
+
"smile"
+
14% of queries
+
+
+
Most used category
+
Smileys
+
8,214 views
+
+
+
+
New users
+
Last 7 days
+
+
+
+
+
+
+
Subscriptions
+
Created last 7 days
+
+
+
+
+
+
Webhooks
+
Events last 7 days
+
+
+
+
+
+
+ +
+@endsection + +@push('scripts') + +@endpush diff --git a/app/resources/views/dashboard/layout.blade.php b/app/resources/views/dashboard/layout.blade.php new file mode 100644 index 0000000..3d56fbe --- /dev/null +++ b/app/resources/views/dashboard/layout.blade.php @@ -0,0 +1,164 @@ + + + + + + @yield('title', 'Dashboard') · Dewemoji + + + + + + + +@php + $user = auth()->user(); + $isAdmin = Gate::allows('admin'); + + $navUser = [ + ['label' => 'Overview', 'href' => route('dashboard.overview')], + ['label' => 'Usage', 'href' => route('dashboard.usage')], + ['label' => 'API Keys', 'href' => route('dashboard.api-keys')], + ['label' => 'Billing', 'href' => route('dashboard.billing')], + ['label' => 'Preferences', 'href' => route('dashboard.preferences')], + ]; + $navAdmin = [ + ['label' => 'Overview', 'href' => route('dashboard.overview')], + ['label' => 'Users', 'href' => route('dashboard.admin.users')], + ['label' => 'Subscriptions', 'href' => route('dashboard.admin.subscriptions')], + ['label' => 'Pricing', 'href' => route('dashboard.admin.pricing')], + ['label' => 'Webhooks', 'href' => route('dashboard.admin.webhooks')], + ['label' => 'Settings', 'href' => route('dashboard.admin.settings')], + ]; + $nav = $isAdmin ? $navAdmin : $navUser; +@endphp + +
+
+ + +
+
+
+
+
+
Workspace
+

+ @yield('page_title', 'Dashboard Overview') +

+

@yield('page_subtitle', 'Everything you need in one calm, focused place.')

+
+
+ + +
+
+
+ +
+ @yield('content') +
+
+
+
+
+ + diff --git a/app/resources/views/dashboard/page.blade.php b/app/resources/views/dashboard/page.blade.php new file mode 100644 index 0000000..afc6517 --- /dev/null +++ b/app/resources/views/dashboard/page.blade.php @@ -0,0 +1,42 @@ +@extends('dashboard.app') + +@section('title', $title) +@section('page_title', $title) +@section('page_subtitle', $subtitle) + +@section('dashboard_content') +
+ @foreach ($kpis as $kpi) +
+
{{ $kpi['label'] }}
+
{{ $kpi['value'] }}
+
{{ $kpi['note'] }}
+
+ @endforeach +
+ +
+
+
+
Summary
+
{{ $summaryTitle }}
+
+ {{ $summaryTag }} +
+

{{ $summaryBody }}

+ +
+ @foreach ($highlights as $highlight) +
+
{{ $highlight['title'] }}
+
{{ $highlight['value'] }}
+
{{ $highlight['note'] }}
+
+ @endforeach +
+ +
+ {{ $footerNote }} +
+
+@endsection diff --git a/app/resources/views/dashboard/user/api-keys.blade.php b/app/resources/views/dashboard/user/api-keys.blade.php new file mode 100644 index 0000000..967b129 --- /dev/null +++ b/app/resources/views/dashboard/user/api-keys.blade.php @@ -0,0 +1,117 @@ +@extends('dashboard.app') + +@section('title', 'API Keys') +@section('page_title', 'API Keys') +@section('page_subtitle', 'Create and manage access tokens for integrations.') + +@section('dashboard_content') +
+
+
+
+
Your keys
+
Manage API access
+
+ @if ($canCreate) +
+ @csrf + + +
+ @endif +
+ @if (!$canCreate) +
+ API keys are available on the Personal plan. Upgrade to unlock API access. +
+ @endif + + @if ($newKey) +
+ New key created. Copy it now; you won’t be able to see it again. +
+ {{ $newKey }} + +
+
+ @endif + +
+ + + + + + + + + + + + @forelse ($keys as $key) + + + + + + + + @empty + + + + @endforelse + +
PrefixNameCreatedLast usedActions
{{ $key->key_prefix }}{{ $key->name ?? '—' }}{{ $key->created_at?->toDateString() }}{{ $key->last_used_at?->diffForHumans() ?? 'Never' }} + @if ($key->revoked_at) + Revoked + @else +
+ @csrf + +
+ @endif +
No API keys yet.
+
+
+ +
+
+
Tips
+
Keep keys safe
+
+
+ Use separate keys for apps and automate revocation if you suspect compromise. +
+
+ API keys are required to access private keyword search results. +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/app/resources/views/dashboard/user/billing.blade.php b/app/resources/views/dashboard/user/billing.blade.php new file mode 100644 index 0000000..94c5add --- /dev/null +++ b/app/resources/views/dashboard/user/billing.blade.php @@ -0,0 +1,127 @@ +@extends('dashboard.app') + +@section('title', 'Billing') +@section('page_title', 'Billing') +@section('page_subtitle', 'Subscription status and plan details.') + +@section('dashboard_content') +@php + $user = $user ?? auth()->user(); + $subscription = $subscription ?? null; + $hasSub = $subscription !== null; + $orders = $orders ?? collect(); + $payments = $payments ?? collect(); +@endphp + +
+
+
Plan
+
{{ $hasSub ? ucfirst($subscription->plan ?? 'Personal') : 'Free' }}
+
{{ $hasSub ? ucfirst($subscription->status ?? 'active') : 'No subscription' }}
+
+
+
Renewal
+
+ {{ $subscription?->next_renewal_at?->toDateString() ?? '—' }} +
+
Next charge date
+
+
+
Status
+
+ {{ $subscription?->expires_at?->toDateString() ?? 'Active' }} +
+
Access ends
+
+
+ +
+
+
+
Billing summary
+
Subscription details
+
+ Current cycle +
+
+ @if ($hasSub) + Provider: {{ $subscription->provider ?? 'direct' }} · Started {{ $subscription->started_at?->toDateString() }} + @else + You are on the free plan. Upgrade to unlock private keywords and sync. + @endif +
+
+ Downgrading to Free revokes any active API keys immediately. +
+ +
+
+
Payment method
+
Card
+
Coming soon
+
+
+
Invoices
+
0
+
Billing history
+
+
+ + @if ($payments->count() > 0) +
+
Recent payments
+
+ + + + + + + + + + + + @foreach ($payments as $payment) + @php + $status = $payment->status ?? 'pending'; + $pill = $status === 'paid' + ? ['bg' => 'bg-emerald-100 dark:bg-emerald-500/20', 'text' => 'text-emerald-800 dark:text-emerald-200'] + : ($status === 'failed' + ? ['bg' => 'bg-rose-100 dark:bg-rose-500/20', 'text' => 'text-rose-800 dark:text-rose-200'] + : ['bg' => 'bg-amber-100 dark:bg-amber-500/20', 'text' => 'text-amber-800 dark:text-amber-200']); + @endphp + + + + + + + + @endforeach + +
ProviderPlanAmountStatusCreated
{{ $payment->provider ?? '—' }}{{ $payment->plan_code ?? '—' }}{{ $payment->currency ?? 'USD' }} {{ number_format((float) ($payment->amount ?? 0), 2) }} + {{ $status }} + {{ $payment->created_at?->toDateString() ?? '—' }}
+
+ @if ($payments->contains(fn ($payment) => in_array($payment->status, ['pending', 'failed'], true))) +
+ Pending or failed payments need a new checkout. Start a fresh transaction from the pricing page. +
+ + Start new checkout + + @endif +
+ @endif + + @if (!$hasSub || (string) $user?->tier !== 'personal') +
+ Upgrade to Personal for private keywords and synced personalization. +
+ + Upgrade to Personal + + @endif +
+@endsection diff --git a/app/resources/views/dashboard/user/keywords.blade.php b/app/resources/views/dashboard/user/keywords.blade.php new file mode 100644 index 0000000..749f361 --- /dev/null +++ b/app/resources/views/dashboard/user/keywords.blade.php @@ -0,0 +1,251 @@ +@extends('dashboard.app') + +@section('title', 'My Keywords') +@section('page_title', 'My Keywords') +@section('page_subtitle', 'Manage your private emoji keywords and language tags.') + +@section('dashboard_content') +@php + $user = $user ?? auth()->user(); + $isPersonal = $user && (string) $user->tier === 'personal'; + $freeLimit = $freeLimit ?? null; + $limitReached = $freeLimit !== null && $items->count() >= $freeLimit; + $emojiLookup = $emojiLookup ?? []; +@endphp + +@if (session('status')) +
+ {{ session('status') }} +
+@endif +@if ($errors->any()) +
+ {{ $errors->first() }} +
+@endif + +
+
+
+
Keyword library
+
{{ $isPersonal ? 'Ready to personalize' : 'Free plan keywords' }}
+

Add keywords to emojis to improve your personal search results.

+ @if (!$isPersonal && $freeLimit) +

Free plan limit: {{ $items->count() }} / {{ $freeLimit }} keywords.

+ @endif +
+
+ + + + Export JSON + +
+ +
+
+
+ + @if (!$isPersonal && $freeLimit) +
+ Free plan includes up to {{ $freeLimit }} keywords total. Upgrade for unlimited keywords. +
+ @endif + + + +
+ + + + + + + + + + + @forelse ($items as $item) + + @php + $lookup = $emojiLookup[$item->emoji_slug] ?? null; + @endphp + + + + + + @empty + + + + @endforelse + +
EmojiKeywordLanguageActions
+
+ {{ $lookup['emoji'] ?? '⬚' }} +
+
{{ $lookup['name'] ?? $item->emoji_slug }}
+
{{ $item->emoji_slug }}
+
+
+
{{ $item->keyword }}{{ $item->lang ?? 'und' }} + +
+ @csrf + @method('DELETE') + +
+
No keywords yet.
+
+
+ + +@endsection + +@push('scripts') + +@endpush diff --git a/app/resources/views/dashboard/user/overview.blade.php b/app/resources/views/dashboard/user/overview.blade.php new file mode 100644 index 0000000..c7e5147 --- /dev/null +++ b/app/resources/views/dashboard/user/overview.blade.php @@ -0,0 +1,93 @@ +@extends('dashboard.app') + +@section('title', 'Dashboard') +@section('page_title', 'Your Overview') +@section('page_subtitle', 'Quick stats and recent keyword activity.') + +@section('dashboard_content') +@php + $user = auth()->user(); + $isPersonal = $user && (string) $user->tier === 'personal'; + $subscription = $subscription ?? null; +@endphp + +
+
+
Total keywords
+
{{ number_format($totalKeywords ?? 0) }}
+
Across your emoji library
+
+
+
Last 7 days
+
{{ number_format($recentWeekCount ?? 0) }}
+
New keywords added
+
+
+
API keys
+
{{ number_format($apiKeyCount ?? 0) }}
+
Active keys
+
+
+
Plan
+
{{ $isPersonal ? 'Personal' : 'Free' }}
+
+ {{ $subscription?->status ? ucfirst($subscription->status) : 'No active subscription' }} +
+
+
+
Synced devices
+
0
+
Coming soon
+
+
+ +
+
+
+
+
Recent keywords
+
Latest additions
+
+ + Manage keywords + +
+ +
+ @forelse ($recentKeywords ?? [] as $keyword) +
+
{{ $keyword->lang ?? 'und' }}
+
{{ $keyword->keyword }}
+
Emoji slug: {{ $keyword->emoji_slug }}
+
+ @empty +
+ No keywords yet. Add your first keyword from an emoji detail page or the dashboard. +
+ @endforelse +
+
+ +
+
+
Next steps
+
Personalize faster
+
+
+ Add keywords right on emoji detail pages to speed up your searches. +
+ @if (!$isPersonal) +
+ Upgrade to Personal to unlock private keywords and sync across devices. +
+ + Upgrade to Personal + + @else + + Add keywords + + @endif +
+
+@endsection diff --git a/app/resources/views/dashboard/user/preferences.blade.php b/app/resources/views/dashboard/user/preferences.blade.php new file mode 100644 index 0000000..6d14a50 --- /dev/null +++ b/app/resources/views/dashboard/user/preferences.blade.php @@ -0,0 +1,122 @@ +@extends('dashboard.app') + +@section('title', 'Preferences') +@section('page_title', 'Preferences') +@section('page_subtitle', 'Personalize your Dewemoji experience.') + +@section('dashboard_content') +
+
+
Personal settings
+
Preferences
+

Saved locally for now. We will sync these to your account later.

+ +
+
+ + +
Matches the global theme toggle.
+
+
+ + +
Controls language defaults.
+
+
+ + +
Prefer a skin tone when available.
+
+
+ + +
Default action for emoji pickers.
+
+
+ +
+
+ +
+
+
Preferences
+
What’s next
+
+
+ Sync preferences across devices and extensions once account settings are wired. +
+
+ Add tone presets and quick language switching. +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/app/resources/views/dashboard/user/profile.blade.php b/app/resources/views/dashboard/user/profile.blade.php new file mode 100644 index 0000000..ef5a4e5 --- /dev/null +++ b/app/resources/views/dashboard/user/profile.blade.php @@ -0,0 +1,25 @@ +@extends('dashboard.app') + +@section('title', 'Profile') +@section('page_title', 'Profile') +@section('page_subtitle', 'Update your account details and security settings.') + +@section('dashboard_content') + @if (session('status') === 'profile-updated') +
+ Profile updated. +
+ @endif + +
+
+ @include('profile.partials.update-profile-information-form') +
+
+ @include('profile.partials.update-password-form') +
+
+ @include('profile.partials.delete-user-form') +
+
+@endsection diff --git a/app/resources/views/emails/reset-password.blade.php b/app/resources/views/emails/reset-password.blade.php new file mode 100644 index 0000000..c7051f6 --- /dev/null +++ b/app/resources/views/emails/reset-password.blade.php @@ -0,0 +1,101 @@ +@php + $logoUrl = rtrim(config('app.url', ''), '/') . '/assets/logo/logo-mark-128.png'; +@endphp + + + + + + Dewemoji Password Reset + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Password reset +
+
+ + + + + + + + + + + + + +
+ + + + + +
+ 🔒 + + Reset your password +
+
+ We received a request to reset your Dewemoji password. Click the button below to choose a new one. +
+ + Reset Password + +
+ If the button does not work, paste this link into your browser: +
+ {{ $resetUrl }} +
+
+ + + + + + + +
+ This link expires in 60 minutes. If you did not request a password reset, you can safely ignore this email. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/resources/views/emails/test.blade.php b/app/resources/views/emails/test.blade.php new file mode 100644 index 0000000..34fedd1 --- /dev/null +++ b/app/resources/views/emails/test.blade.php @@ -0,0 +1,40 @@ + + + + + + Dewemoji test email + + + + + + +
+ + + + + + + + + + + + + +
+ Dewemoji +
+ This is a test email sent via the Mailketing API from your Dewemoji app. +
+ + Open Dewemoji + +
+ If the button does not work, open this link: {{ $actionUrl }} +
+
+ + diff --git a/app/resources/views/emails/verify-email.blade.php b/app/resources/views/emails/verify-email.blade.php new file mode 100644 index 0000000..0de0373 --- /dev/null +++ b/app/resources/views/emails/verify-email.blade.php @@ -0,0 +1,101 @@ +@php + $logoUrl = rtrim(config('app.url', ''), '/') . '/assets/logo/logo-mark-128.png'; +@endphp + + + + + + Dewemoji Email Verification + + + + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ Dewemoji + + Dewemoji +
+
+ Email verification +
+
+ + + + + + + + + + + + + +
+ + + + + +
+ + + Verify your email +
+
+ Thanks for joining Dewemoji. Confirm your email to activate your account and start saving emoji keywords. +
+ + Verify Email + +
+ If the button does not work, paste this link into your browser: +
+ {{ $verificationUrl }} +
+
+ + + + + + + +
+ This link expires in 60 minutes. If you did not request this email, you can safely ignore it. +
+ Dewemoji • Emoji discovery and keywords for creators +
+
+
+ + diff --git a/app/resources/views/layouts/app.blade.php b/app/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..0719113 --- /dev/null +++ b/app/resources/views/layouts/app.blade.php @@ -0,0 +1,36 @@ + + + + + + + + {{ config('app.name', 'Dewemoji') }} + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ @include('layouts.navigation') + + + @isset($header) +
+
+ {{ $header }} +
+
+ @endisset + + +
+ {{ $slot }} +
+
+ + diff --git a/app/resources/views/layouts/guest.blade.php b/app/resources/views/layouts/guest.blade.php new file mode 100644 index 0000000..82bb9b6 --- /dev/null +++ b/app/resources/views/layouts/guest.blade.php @@ -0,0 +1,144 @@ + + + + + + + + @yield('title', config('app.name', 'Dewemoji')) + + + + + + + + + + + + + + + @vite(['resources/js/app.js']) + + + +
+
+
+
+ +
+
+
+ + + Dewemoji logo + + Dewemoji + + +
+ +
+ {{ $slot }} +
+
+
+ + + + + diff --git a/app/resources/views/layouts/navigation.blade.php b/app/resources/views/layouts/navigation.blade.php new file mode 100644 index 0000000..16a500d --- /dev/null +++ b/app/resources/views/layouts/navigation.blade.php @@ -0,0 +1,100 @@ + diff --git a/app/resources/views/profile/edit.blade.php b/app/resources/views/profile/edit.blade.php new file mode 100644 index 0000000..e0e1d38 --- /dev/null +++ b/app/resources/views/profile/edit.blade.php @@ -0,0 +1,29 @@ + + +

+ {{ __('Profile') }} +

+
+ +
+
+
+
+ @include('profile.partials.update-profile-information-form') +
+
+ +
+
+ @include('profile.partials.update-password-form') +
+
+ +
+
+ @include('profile.partials.delete-user-form') +
+
+
+
+
diff --git a/app/resources/views/profile/partials/delete-user-form.blade.php b/app/resources/views/profile/partials/delete-user-form.blade.php new file mode 100644 index 0000000..edeeb4a --- /dev/null +++ b/app/resources/views/profile/partials/delete-user-form.blade.php @@ -0,0 +1,55 @@ +
+
+

+ {{ __('Delete Account') }} +

+ +

+ {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }} +

+
+ + {{ __('Delete Account') }} + + +
+ @csrf + @method('delete') + +

+ {{ __('Are you sure you want to delete your account?') }} +

+ +

+ {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }} +

+ +
+ + + + + +
+ +
+ + {{ __('Cancel') }} + + + + {{ __('Delete Account') }} + +
+
+
+
diff --git a/app/resources/views/profile/partials/update-password-form.blade.php b/app/resources/views/profile/partials/update-password-form.blade.php new file mode 100644 index 0000000..eaca1ac --- /dev/null +++ b/app/resources/views/profile/partials/update-password-form.blade.php @@ -0,0 +1,48 @@ +
+
+

+ {{ __('Update Password') }} +

+ +

+ {{ __('Ensure your account is using a long, random password to stay secure.') }} +

+
+ +
+ @csrf + @method('put') + +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ {{ __('Save') }} + + @if (session('status') === 'password-updated') +

{{ __('Saved.') }}

+ @endif +
+
+
diff --git a/app/resources/views/profile/partials/update-profile-information-form.blade.php b/app/resources/views/profile/partials/update-profile-information-form.blade.php new file mode 100644 index 0000000..5ae3d35 --- /dev/null +++ b/app/resources/views/profile/partials/update-profile-information-form.blade.php @@ -0,0 +1,64 @@ +
+
+

+ {{ __('Profile Information') }} +

+ +

+ {{ __("Update your account's profile information and email address.") }} +

+
+ +
+ @csrf +
+ +
+ @csrf + @method('patch') + +
+ + + +
+ +
+ + + + + @if ($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! $user->hasVerifiedEmail()) +
+

+ {{ __('Your email address is unverified.') }} + + +

+ + @if (session('status') === 'verification-link-sent') +

+ {{ __('A new verification link has been sent to your email address.') }} +

+ @endif +
+ @endif +
+ +
+ {{ __('Save') }} + + @if (session('status') === 'profile-updated') +

{{ __('Saved.') }}

+ @endif +
+
+
diff --git a/app/resources/views/site/api-docs.blade.php b/app/resources/views/site/api-docs.blade.php index 747e20b..ed5736d 100644 --- a/app/resources/views/site/api-docs.blade.php +++ b/app/resources/views/site/api-docs.blade.php @@ -5,7 +5,7 @@ @push('head') @endpush @@ -48,6 +49,18 @@
+ @auth + + + + + @endauth + @guest + + + + + @endguest @@ -65,11 +78,11 @@
-
+
- + @@ -77,14 +90,18 @@
- - + -
@@ -159,41 +176,48 @@
-
-
Copied!
+ + @endsection @push('scripts') + - - - + + @vite(['resources/js/app.js']) @stack('head') @stack('jsonld') - +
@@ -132,7 +355,255 @@ @yield('content') + @hasSection('mobile_nav') + @yield('mobile_nav') + @else + + @endif + + @hasSection('more_menu') + @yield('more_menu') + @else + + + @endif + + + + + + + + @stack('scripts') diff --git a/app/resources/views/site/pricing.blade.php b/app/resources/views/site/pricing.blade.php index e10f341..414517d 100644 --- a/app/resources/views/site/pricing.blade.php +++ b/app/resources/views/site/pricing.blade.php @@ -1,7 +1,7 @@ @extends('site.layout') @section('title', 'Pricing - Dewemoji') -@section('meta_description', 'Choose Dewemoji pricing for Free, Pro subscription, and Lifetime access for website, extension, and API usage.') +@section('meta_description', 'Choose Dewemoji pricing for Free, Personal subscription, and Lifetime access for website, extension, and API usage.') @push('jsonld') + + + + + +@endpush diff --git a/app/resources/views/site/privacy.blade.php b/app/resources/views/site/privacy.blade.php index d0b215a..c09facf 100644 --- a/app/resources/views/site/privacy.blade.php +++ b/app/resources/views/site/privacy.blade.php @@ -5,10 +5,10 @@ @push('head') @endpush @@ -30,6 +30,12 @@
+ @auth + + @endauth + @guest + + @endguest
@@ -41,9 +47,16 @@
Legal / Privacy Policy

Privacy Policy

-
-
Last Updated
-
February 5, 2026
+
+
+
Last Updated
+
February 5, 2026
+
+
diff --git a/app/resources/views/site/support.blade.php b/app/resources/views/site/support.blade.php index 4f694e3..e17ffc3 100644 --- a/app/resources/views/site/support.blade.php +++ b/app/resources/views/site/support.blade.php @@ -35,15 +35,28 @@
+ @auth + + @endauth + @guest + + @endguest
-
-
Public / Support
-

Support Center

+
+
+
Public / Support
+

Support Center

+
+
diff --git a/app/resources/views/site/terms.blade.php b/app/resources/views/site/terms.blade.php index 1f29282..3493ddd 100644 --- a/app/resources/views/site/terms.blade.php +++ b/app/resources/views/site/terms.blade.php @@ -5,9 +5,9 @@ @push('head') @endpush @@ -29,6 +29,12 @@
+ @auth + + @endauth + @guest + + @endguest
@@ -40,9 +46,16 @@
Legal / Terms

Terms of Service

-
-
Last Updated
-
February 5, 2026
+
+
+
Last Updated
+
February 5, 2026
+
+
diff --git a/app/resources/views/vendor/pagination/dashboard.blade.php b/app/resources/views/vendor/pagination/dashboard.blade.php new file mode 100644 index 0000000..986d4ec --- /dev/null +++ b/app/resources/views/vendor/pagination/dashboard.blade.php @@ -0,0 +1,43 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/app/resources/views/welcome.blade.php b/app/resources/views/welcome.blade.php index b7355d7..9491021 100644 --- a/app/resources/views/welcome.blade.php +++ b/app/resources/views/welcome.blade.php @@ -4,7 +4,7 @@ - {{ config('app.name', 'Laravel') }} + {{ config('app.name', 'Dewemoji') }} diff --git a/app/routes/api.php b/app/routes/api.php index af52449..1209641 100644 --- a/app/routes/api.php +++ b/app/routes/api.php @@ -3,12 +3,25 @@ use App\Http\Controllers\Api\V1\EmojiApiController; use App\Http\Controllers\Api\V1\LicenseController; use App\Http\Controllers\Api\V1\SystemController; +use App\Http\Controllers\Api\V1\AdminUserController; +use App\Http\Controllers\Api\V1\AdminPricingController; +use App\Http\Controllers\Api\V1\AdminSettingsController; +use App\Http\Controllers\Api\V1\AdminSubscriptionController; +use App\Http\Controllers\Api\V1\AdminAnalyticsController; +use App\Http\Controllers\Api\V1\AdminWebhookController; +use App\Http\Controllers\Api\V1\PaypalWebhookController; +use App\Http\Controllers\Api\V1\ExtensionController; +use App\Http\Controllers\Api\V1\UserController; +use App\Http\Controllers\Api\V1\UserKeywordController; +use App\Http\Controllers\Api\V1\PricingController; +use App\Http\Controllers\Billing\PayPalController; +use App\Http\Controllers\Billing\PakasirController; use Illuminate\Support\Facades\Route; Route::options('/v1/{any}', function () { $headers = [ - 'Access-Control-Allow-Methods' => 'GET, POST, OPTIONS', - 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-License-Key, X-Account-Id, X-Dewemoji-Frontend', + 'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS', + 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-License-Key, X-Api-Key, X-Admin-Token, X-Account-Id, X-Dewemoji-Frontend, X-Extension-Token', 'Vary' => 'Origin', ]; $origin = request()->headers->get('Origin', ''); @@ -20,16 +33,56 @@ Route::options('/v1/{any}', function () { return response('', 204, $headers); })->where('any', '.*'); +Route::post('/paypal/webhook', [PayPalController::class, 'webhook']); +Route::post('/webhooks/pakasir', [PakasirController::class, 'webhook']); + Route::prefix('v1')->group(function () { Route::get('/categories', [EmojiApiController::class, 'categories']); Route::get('/emojis', [EmojiApiController::class, 'emojis']); + Route::get('/search', [EmojiApiController::class, 'search']); Route::get('/emoji', [EmojiApiController::class, 'emoji']); Route::get('/emoji/{slug}', [EmojiApiController::class, 'emoji']); + Route::get('/pricing', [PricingController::class, 'index']); + Route::post('/extension/verify', [ExtensionController::class, 'verify']); + Route::get('/extension/search', [ExtensionController::class, 'search']); Route::post('/license/verify', [LicenseController::class, 'verify']); Route::post('/license/activate', [LicenseController::class, 'activate']); Route::post('/license/deactivate', [LicenseController::class, 'deactivate']); + Route::post('/user/register', [UserController::class, 'register']); + Route::post('/user/login', [UserController::class, 'login']); + Route::post('/user/logout', [UserController::class, 'logout']); + Route::get('/user/apikeys', [UserController::class, 'listApiKeys']); + Route::post('/user/apikeys', [UserController::class, 'createApiKey']); + Route::delete('/user/apikeys/{key}', [UserController::class, 'revokeApiKey']); + + Route::get('/keywords', [UserKeywordController::class, 'index']); + Route::post('/keywords', [UserKeywordController::class, 'store']); + Route::put('/keywords/{id}', [UserKeywordController::class, 'update']); + Route::delete('/keywords/{id}', [UserKeywordController::class, 'destroy']); + Route::post('/keywords/import', [UserKeywordController::class, 'import']); + Route::get('/keywords/export', [UserKeywordController::class, 'export']); + + Route::post('/admin/user/tier', [AdminUserController::class, 'setTier']); + Route::get('/admin/users', [AdminUserController::class, 'index']); + Route::get('/admin/user', [AdminUserController::class, 'show']); + Route::get('/admin/pricing', [AdminPricingController::class, 'index']); + Route::post('/admin/pricing', [AdminPricingController::class, 'update']); + Route::get('/admin/pricing/changes', [AdminPricingController::class, 'changes']); + Route::post('/admin/pricing/reset', [AdminPricingController::class, 'reset']); + Route::get('/admin/settings', [AdminSettingsController::class, 'index']); + Route::post('/admin/settings', [AdminSettingsController::class, 'update']); + Route::get('/admin/subscriptions', [AdminSubscriptionController::class, 'index']); + Route::post('/admin/subscription/grant', [AdminSubscriptionController::class, 'grant']); + Route::post('/admin/subscription/revoke', [AdminSubscriptionController::class, 'revoke']); + Route::get('/admin/analytics', [AdminAnalyticsController::class, 'overview']); + Route::get('/admin/webhooks', [AdminWebhookController::class, 'index']); + Route::get('/admin/webhooks/{id}', [AdminWebhookController::class, 'show']); + Route::post('/admin/webhooks/{id}/replay', [AdminWebhookController::class, 'replay']); + + Route::post('/paypal/webhook', [PaypalWebhookController::class, 'handle']); + Route::get('/health', [SystemController::class, 'health']); Route::get('/metrics-lite', [SystemController::class, 'metricsLite']); Route::get('/metrics', [SystemController::class, 'metrics']); diff --git a/app/routes/auth.php b/app/routes/auth.php new file mode 100644 index 0000000..3926ecf --- /dev/null +++ b/app/routes/auth.php @@ -0,0 +1,59 @@ +group(function () { + Route::get('register', [RegisteredUserController::class, 'create']) + ->name('register'); + + Route::post('register', [RegisteredUserController::class, 'store']); + + Route::get('login', [AuthenticatedSessionController::class, 'create']) + ->name('login'); + + Route::post('login', [AuthenticatedSessionController::class, 'store']); + + Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) + ->name('password.request'); + + Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) + ->name('password.email'); + + Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) + ->name('password.reset'); + + Route::post('reset-password', [NewPasswordController::class, 'store']) + ->name('password.store'); +}); + +Route::middleware('auth')->group(function () { + Route::get('verify-email', EmailVerificationPromptController::class) + ->name('verification.notice'); + + Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) + ->middleware(['signed', 'throttle:6,1']) + ->name('verification.verify'); + + Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) + ->middleware('throttle:6,1') + ->name('verification.send'); + + Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) + ->name('password.confirm'); + + Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); + + Route::put('password', [PasswordController::class, 'update'])->name('password.update'); + + Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) + ->name('logout'); +}); diff --git a/app/routes/console.php b/app/routes/console.php index 71c153c..f2d3255 100644 --- a/app/routes/console.php +++ b/app/routes/console.php @@ -2,7 +2,13 @@ use Illuminate\Foundation\Inspiring; use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\Schedule; use App\Services\LiveSqlImportService; +use App\Services\Billing\PaypalWebhookProcessor; +use App\Services\Billing\PayPalPlanSyncService; +use App\Models\WebhookEvent; +use Illuminate\Support\Facades\Mail; +use App\Mail\TestMailketing; Artisan::command('inspire', function () { $this->comment(Inspiring::quote()); @@ -16,3 +22,80 @@ Artisan::command('dewemoji:import-live-sql {path : Absolute path to dewemojiAPI_ $importer = app(LiveSqlImportService::class); $importer->import($path, $truncate, $batch, $this->output); })->purpose('Import live SQL dump into the current database'); + +Artisan::command('dewemoji:webhooks:process {--limit=100 : Max events to process} {--status=pending,received : Comma-separated statuses}', function () { + $limit = (int) $this->option('limit'); + $statuses = array_filter(array_map('trim', explode(',', (string) $this->option('status')))); + + if (empty($statuses)) { + $this->error('No statuses provided.'); + return 1; + } + + $processor = app(PaypalWebhookProcessor::class); + + $events = WebhookEvent::query() + ->whereIn('status', $statuses) + ->orderBy('id') + ->limit($limit) + ->get(); + + $processed = 0; + $failed = 0; + + foreach ($events as $event) { + try { + if ($event->provider === 'paypal') { + $processor->process((string) ($event->event_type ?? ''), $event->payload ?? []); + } + $event->update([ + 'status' => 'processed', + 'processed_at' => now(), + 'error' => null, + ]); + $processed++; + } catch (\Throwable $e) { + $event->update([ + 'status' => 'error', + 'processed_at' => now(), + 'error' => $e->getMessage(), + ]); + $failed++; + } + } + + $this->info("Processed {$processed} events, failed {$failed}."); + return 0; +})->purpose('Process pending webhook events'); + +Schedule::command('dewemoji:webhooks:process --limit=200')->everyMinute()->withoutOverlapping(); + +Artisan::command('paypal:sync-plans {--mode=both : sandbox|live|both}', function () { + $mode = (string) $this->option('mode'); + $service = app(PayPalPlanSyncService::class); + + $runMode = match ($mode) { + 'sandbox' => ['sandbox'], + 'live' => ['live'], + default => ['sandbox', 'live'], + }; + + foreach ($runMode as $env) { + $this->info("Syncing PayPal plans: {$env}"); + $result = $service->sync($env); + $this->line("Created: {$result['created']} · Updated: {$result['updated']} · Deactivated: {$result['deactivated']} · Skipped: {$result['skipped']}"); + } +})->purpose('Create/rotate PayPal plans based on pricing plans'); + +Artisan::command('mailketing:test {email : Recipient email address}', function () { + $email = (string) $this->argument('email'); + + try { + Mail::to($email)->send(new TestMailketing()); + $this->info("Mailketing test email sent to {$email}."); + return 0; + } catch (\Throwable $e) { + $this->error('Mailketing test failed: '.$e->getMessage()); + return 1; + } +})->purpose('Send a Mailketing API test email'); diff --git a/app/routes/dashboard.php b/app/routes/dashboard.php new file mode 100644 index 0000000..1e8371f --- /dev/null +++ b/app/routes/dashboard.php @@ -0,0 +1,56 @@ +prefix('dashboard')->name('dashboard.')->group(function () { + Route::middleware('verified')->group(function () { + Route::get('/', [UserDashboardController::class, 'overview'])->name('overview'); + Route::get('/keywords', [UserDashboardController::class, 'keywords'])->name('keywords'); + Route::get('/keywords/search', [UserDashboardController::class, 'keywordSearch'])->name('keywords.search'); + Route::post('/keywords', [UserDashboardController::class, 'storeKeyword'])->name('keywords.store'); + Route::put('/keywords/{keyword}', [UserDashboardController::class, 'updateKeyword'])->name('keywords.update'); + Route::delete('/keywords/{keyword}', [UserDashboardController::class, 'deleteKeyword'])->name('keywords.delete'); + Route::post('/keywords/import', [UserDashboardController::class, 'importKeywords'])->name('keywords.import'); + Route::get('/keywords/export', [UserDashboardController::class, 'exportKeywords'])->name('keywords.export'); + + Route::get('/api-keys', [UserDashboardController::class, 'apiKeys'])->name('api-keys'); + Route::post('/api-keys', [UserDashboardController::class, 'createApiKey'])->name('api-keys.create'); + Route::post('/api-keys/{key}/revoke', [UserDashboardController::class, 'revokeApiKey'])->name('api-keys.revoke'); + + Route::get('/billing', [UserDashboardController::class, 'billing'])->name('billing'); + Route::get('/preferences', [UserDashboardController::class, 'preferences'])->name('preferences'); + + Route::middleware('can:admin')->prefix('admin')->name('admin.')->group(function () { + Route::get('/users', [AdminDashboardController::class, 'users'])->name('users'); + Route::get('/users/{user}', [AdminDashboardController::class, 'userDetail'])->name('users.show'); + Route::post('/users/tier', [AdminDashboardController::class, 'updateUserTier'])->name('users.tier'); + Route::post('/users/create', [AdminDashboardController::class, 'createUser'])->name('users.create'); + Route::delete('/users/{user}', [AdminDashboardController::class, 'deleteUser'])->name('users.delete'); + + Route::get('/subscriptions', [AdminDashboardController::class, 'subscriptions'])->name('subscriptions'); + Route::get('/subscriptions/{subscription}', [AdminDashboardController::class, 'subscriptionDetail'])->name('subscriptions.show'); + Route::post('/subscriptions/grant', [AdminDashboardController::class, 'grantSubscription'])->name('subscriptions.grant'); + Route::post('/subscriptions/revoke', [AdminDashboardController::class, 'revokeSubscription'])->name('subscriptions.revoke'); + + Route::get('/pricing', [AdminDashboardController::class, 'pricing'])->name('pricing'); + Route::post('/pricing/update', [AdminDashboardController::class, 'updatePricing'])->name('pricing.update'); + Route::post('/pricing/reset', [AdminDashboardController::class, 'resetPricing'])->name('pricing.reset'); + Route::post('/pricing/snapshot', [AdminDashboardController::class, 'createPricingSnapshot'])->name('pricing.snapshot'); + Route::post('/pricing/paypal-sync', [AdminDashboardController::class, 'syncPaypalPlans'])->name('pricing.paypal_sync'); + + Route::get('/webhooks', [AdminDashboardController::class, 'webhooks'])->name('webhooks'); + Route::post('/webhooks/{id}/replay', [AdminDashboardController::class, 'replayWebhook'])->name('webhooks.replay'); + Route::post('/webhooks/replay-failed', [AdminDashboardController::class, 'replayFailedWebhooks'])->name('webhooks.replay_failed'); + Route::get('/webhooks/{event}', [AdminDashboardController::class, 'webhookDetail'])->name('webhooks.show'); + + Route::get('/settings', [AdminDashboardController::class, 'settings'])->name('settings'); + Route::post('/settings/update', [AdminDashboardController::class, 'updateSettings'])->name('settings.update'); + + Route::get('/export/{type}', [AdminDashboardController::class, 'exportCsv'])->name('export'); + Route::get('/audit-logs', [AdminDashboardController::class, 'auditLogs'])->name('audit_logs'); + }); + }); +}); diff --git a/app/routes/web.php b/app/routes/web.php index fe113f0..56214a0 100644 --- a/app/routes/web.php +++ b/app/routes/web.php @@ -1,6 +1,9 @@ name('home'); @@ -11,14 +14,37 @@ Route::get('/api-docs', [SiteController::class, 'apiDocs'])->name('api-docs'); Route::get('/emoji/{slug}', [SiteController::class, 'emojiDetail'])->name('emoji-detail'); Route::get('/pricing', [SiteController::class, 'pricing'])->name('pricing'); +Route::post('/pricing/currency', [SiteController::class, 'setPricingCurrency'])->name('pricing.currency'); Route::get('/support', [SiteController::class, 'support'])->name('support'); Route::get('/privacy', [SiteController::class, 'privacy'])->name('privacy'); Route::get('/terms', [SiteController::class, 'terms'])->name('terms'); +Route::get('/profile', function () { + return redirect()->route('profile.edit'); +})->middleware('auth'); Route::get('/{categorySlug}', [SiteController::class, 'category']) ->where('categorySlug', 'all|smileys|people|animals|food|travel|activities|objects|symbols|flags') ->name('category'); Route::get('/{categorySlug}/{subcategorySlug}', [SiteController::class, 'categorySubcategory']) ->where('categorySlug', 'all|smileys|people|animals|food|travel|activities|objects|symbols|flags') - ->where('subcategorySlug', '[a-z0-9\-]+') + ->where('subcategorySlug', '[a-z0-9\\-]+') ->name('category-subcategory'); + +Route::middleware('auth')->group(function () { + Route::post('/billing/paypal/create', [PayPalController::class, 'createSubscription']) + ->middleware('verified') + ->name('billing.paypal.create'); + Route::get('/billing/paypal/return', [PayPalController::class, 'return'])->name('billing.paypal.return'); + Route::post('/billing/pakasir/create', [PakasirController::class, 'createTransaction']) + ->middleware('verified') + ->name('billing.pakasir.create'); + Route::post('/billing/pakasir/cancel', [PakasirController::class, 'cancelPending']) + ->middleware('verified') + ->name('billing.pakasir.cancel'); + + Route::get('/dashboard/profile', [ProfileController::class, 'edit'])->name('profile.edit'); + Route::patch('/dashboard/profile', [ProfileController::class, 'update'])->name('profile.update'); + Route::delete('/dashboard/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); +}); + +require __DIR__.'/auth.php'; diff --git a/app/tailwind.config.js b/app/tailwind.config.js new file mode 100644 index 0000000..3174ef2 --- /dev/null +++ b/app/tailwind.config.js @@ -0,0 +1,22 @@ +import defaultTheme from 'tailwindcss/defaultTheme'; +import forms from '@tailwindcss/forms'; + +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: 'class', + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/views/**/*.blade.php', + ], + + theme: { + extend: { + fontFamily: { + sans: ['Figtree', ...defaultTheme.fontFamily.sans], + }, + }, + }, + + plugins: [forms], +}; diff --git a/app/tests/Feature/ApiV1EndpointsTest.php b/app/tests/Feature/ApiV1EndpointsTest.php index 4e78403..2a23221 100644 --- a/app/tests/Feature/ApiV1EndpointsTest.php +++ b/app/tests/Feature/ApiV1EndpointsTest.php @@ -2,11 +2,14 @@ namespace Tests\Feature; +use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Http; use Tests\TestCase; class ApiV1EndpointsTest extends TestCase { + use RefreshDatabase; + protected function setUp(): void { parent::setUp(); diff --git a/app/tests/Feature/Auth/AuthenticationTest.php b/app/tests/Feature/Auth/AuthenticationTest.php new file mode 100644 index 0000000..f04b319 --- /dev/null +++ b/app/tests/Feature/Auth/AuthenticationTest.php @@ -0,0 +1,54 @@ +get('/login'); + + $response->assertStatus(200); + } + + public function test_users_can_authenticate_using_the_login_screen(): void + { + $user = User::factory()->create(); + + $response = $this->post('/login', [ + 'email' => $user->email, + 'password' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(route('dashboard.overview', absolute: false)); + } + + public function test_users_can_not_authenticate_with_invalid_password(): void + { + $user = User::factory()->create(); + + $this->post('/login', [ + 'email' => $user->email, + 'password' => 'wrong-password', + ]); + + $this->assertGuest(); + } + + public function test_users_can_logout(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/logout'); + + $this->assertGuest(); + $response->assertRedirect('/'); + } +} diff --git a/app/tests/Feature/Auth/EmailVerificationTest.php b/app/tests/Feature/Auth/EmailVerificationTest.php new file mode 100644 index 0000000..e1ee96e --- /dev/null +++ b/app/tests/Feature/Auth/EmailVerificationTest.php @@ -0,0 +1,58 @@ +unverified()->create(); + + $response = $this->actingAs($user)->get('/verify-email'); + + $response->assertStatus(200); + } + + public function test_email_can_be_verified(): void + { + $user = User::factory()->unverified()->create(); + + Event::fake(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1($user->email)] + ); + + $response = $this->actingAs($user)->get($verificationUrl); + + Event::assertDispatched(Verified::class); + $this->assertTrue($user->fresh()->hasVerifiedEmail()); + $response->assertRedirect(route('dashboard.overview', absolute: false).'?verified=1'); + } + + public function test_email_is_not_verified_with_invalid_hash(): void + { + $user = User::factory()->unverified()->create(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1('wrong-email')] + ); + + $this->actingAs($user)->get($verificationUrl); + + $this->assertFalse($user->fresh()->hasVerifiedEmail()); + } +} diff --git a/app/tests/Feature/Auth/PasswordConfirmationTest.php b/app/tests/Feature/Auth/PasswordConfirmationTest.php new file mode 100644 index 0000000..ff85721 --- /dev/null +++ b/app/tests/Feature/Auth/PasswordConfirmationTest.php @@ -0,0 +1,44 @@ +create(); + + $response = $this->actingAs($user)->get('/confirm-password'); + + $response->assertStatus(200); + } + + public function test_password_can_be_confirmed(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'password', + ]); + + $response->assertRedirect(); + $response->assertSessionHasNoErrors(); + } + + public function test_password_is_not_confirmed_with_invalid_password(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'wrong-password', + ]); + + $response->assertSessionHasErrors(); + } +} diff --git a/app/tests/Feature/Auth/PasswordResetTest.php b/app/tests/Feature/Auth/PasswordResetTest.php new file mode 100644 index 0000000..aa50350 --- /dev/null +++ b/app/tests/Feature/Auth/PasswordResetTest.php @@ -0,0 +1,73 @@ +get('/forgot-password'); + + $response->assertStatus(200); + } + + public function test_reset_password_link_can_be_requested(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class); + } + + public function test_reset_password_screen_can_be_rendered(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) { + $response = $this->get('/reset-password/'.$notification->token); + + $response->assertStatus(200); + + return true; + }); + } + + public function test_password_can_be_reset_with_valid_token(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) { + $response = $this->post('/reset-password', [ + 'token' => $notification->token, + 'email' => $user->email, + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect(route('login')); + + return true; + }); + } +} diff --git a/app/tests/Feature/Auth/PasswordUpdateTest.php b/app/tests/Feature/Auth/PasswordUpdateTest.php new file mode 100644 index 0000000..ca28c6c --- /dev/null +++ b/app/tests/Feature/Auth/PasswordUpdateTest.php @@ -0,0 +1,51 @@ +create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->put('/password', [ + 'current_password' => 'password', + 'password' => 'new-password', + 'password_confirmation' => 'new-password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $this->assertTrue(Hash::check('new-password', $user->refresh()->password)); + } + + public function test_correct_password_must_be_provided_to_update_password(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->put('/password', [ + 'current_password' => 'wrong-password', + 'password' => 'new-password', + 'password_confirmation' => 'new-password', + ]); + + $response + ->assertSessionHasErrorsIn('updatePassword', 'current_password') + ->assertRedirect('/profile'); + } +} diff --git a/app/tests/Feature/Auth/RegistrationTest.php b/app/tests/Feature/Auth/RegistrationTest.php new file mode 100644 index 0000000..c4691a4 --- /dev/null +++ b/app/tests/Feature/Auth/RegistrationTest.php @@ -0,0 +1,31 @@ +get('/register'); + + $response->assertStatus(200); + } + + public function test_new_users_can_register(): void + { + $response = $this->post('/register', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(route('dashboard.overview', absolute: false)); + } +} diff --git a/app/tests/Feature/ProfileTest.php b/app/tests/Feature/ProfileTest.php new file mode 100644 index 0000000..252fdcc --- /dev/null +++ b/app/tests/Feature/ProfileTest.php @@ -0,0 +1,99 @@ +create(); + + $response = $this + ->actingAs($user) + ->get('/profile'); + + $response->assertOk(); + } + + public function test_profile_information_can_be_updated(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->patch('/profile', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $user->refresh(); + + $this->assertSame('Test User', $user->name); + $this->assertSame('test@example.com', $user->email); + $this->assertNull($user->email_verified_at); + } + + public function test_email_verification_status_is_unchanged_when_the_email_address_is_unchanged(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->patch('/profile', [ + 'name' => 'Test User', + 'email' => $user->email, + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $this->assertNotNull($user->refresh()->email_verified_at); + } + + public function test_user_can_delete_their_account(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->delete('/profile', [ + 'password' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/'); + + $this->assertGuest(); + $this->assertNull($user->fresh()); + } + + public function test_correct_password_must_be_provided_to_delete_account(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->delete('/profile', [ + 'password' => 'wrong-password', + ]); + + $response + ->assertSessionHasErrorsIn('userDeletion', 'password') + ->assertRedirect('/profile'); + + $this->assertNotNull($user->fresh()); + } +} diff --git a/app/vite.config.js b/app/vite.config.js index f35b4e7..421b569 100644 --- a/app/vite.config.js +++ b/app/vite.config.js @@ -1,6 +1,5 @@ import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; -import tailwindcss from '@tailwindcss/vite'; export default defineConfig({ plugins: [ @@ -8,11 +7,5 @@ export default defineConfig({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), - tailwindcss(), ], - server: { - watch: { - ignored: ['**/storage/framework/views/**'], - }, - }, }); diff --git a/community-plan.md b/community-plan.md new file mode 100644 index 0000000..4339d30 --- /dev/null +++ b/community-plan.md @@ -0,0 +1,124 @@ +# Dewemoji Community Plan (Private‑First → Public Consensus) + +This plan matches the core purpose: **help people find emojis with their own words, in any language**, and let the community optionally promote keywords into global search. + +## Core principles + +- **Private first:** users can store any keyword for their own use. +- **Public by choice:** users can propose a keyword to the public pool. +- **Consensus‑based:** public keywords only become searchable after votes. +- **Language‑friendly:** keywords can be in any language/script (not only Latin). +- **Safety‑aware:** moderation applies only to public proposals (not private). + +## Current language reality + +- Today the dataset only includes **EN + ID** keywords for all emojis. +- Community should be designed to add **other languages** over time. + +## Two‑layer keyword model + +### 1) Private keywords (personal) +- Stored per user (or device if not logged in). +- Any term is allowed, even if not “correct.” +- Used only for that user’s search + recall. +- No moderation needed. +- Created and managed in the **user dashboard** (not on emoji detail pages). +- Must be **used locally first** before being eligible for public proposal. + +### 2) Public keywords (community) +- Users can propose **one of their own private keywords** to be public **from the dashboard**. +- Emoji detail pages only **display and vote** on public proposals; no direct proposal UI there. +- Once the proposal passes the threshold, it becomes globally searchable. + +## Public keyword lifecycle + +``` +private → public_pending → public +``` + +Suggested rules: +- **public_pending** shown publicly with vote controls. +- **public** if it reaches **≥ 5 upvotes** (your rule). +- Optional future: auto‑reject with heavy downvotes or time decay. + +## Voting model + +- 1 vote per user per keyword. +- Score = upvotes − downvotes. +- Promotion rule: **>= 5 upvotes** (simple and clear). +- Optional future: trust‑weighted votes. + +## Moderation model + +- Moderation applies only to **public proposals**. +- Private keywords are always allowed. +- Blocking rules: + - disallowed words + - mismatched emoji meaning + - language mismatch (optional) + +## UX flow (simple) + +1) User adds private keyword. +2) User uses it locally (personal search/recall). +3) User clicks “Make Public” from the dashboard. +4) Keyword appears on emoji detail page as pending. +4) Community votes. +5) Reaches 5 upvotes → becomes public search term. + +## API endpoints (clean, minimal set) + +Auth: +- `POST /v1/contrib/auth/request` +- `POST /v1/contrib/auth/verify` + +Keyword actions: +- `POST /v1/contrib/suggest` +- `POST /v1/contrib/make-public` +- `POST /v1/contrib/vote` +- `GET /v1/contrib/list?emoji=...` +- `GET /v1/contrib/search?q=...` + +Moderation: +- `GET /v1/keywords/pending` (admin/moderation) + +## Data model (minimum) + +- `emoji_keywords` (keyword, lang, status, visibility, owner_user_id) +- `keyword_votes` (keyword_id, user_id, vote) +- `moderation_events` +- `users` / `magic_links` + +## Optional recommendations (future‑safe) + +### A) Multilingual expansion +- Encourage new languages by highlighting “empty language slots.” +- Allow region variants (e.g., `en-US` vs `en-GB`). + +### B) Personal dictionary export +- Export private keywords per user. + +### C) Trust tiers +- Contributors with good history can fast‑track proposals. + +### D) Admin review console +- Moderators can approve/reject quickly. + +### E) Abuse prevention +- Rate limit public proposals + voting. +- Use Turnstile only for public actions. + +### F) Search blending +- Private keywords weighted highest for the owner. +- Public keywords weighted lower but global. + +### G) “My Words” UI +- Show user’s private keywords in the **dashboard**. +- One‑tap “Make Public” in the dashboard (not on detail page). + +## Recommended rollout + +1) Private keywords (local only). +2) Public proposals + votes (no AI). +3) Basic moderation + rate limits. +4) AI guard + trust tiers. diff --git a/deployment-notes/deployment-w4gkwgg4ccww8oc4s8w0soog-2026-02-04-14-34-56.txt b/deployment-notes/deployment-w4gkwgg4ccww8oc4s8w0soog-2026-02-04-14-34-56.txt new file mode 100644 index 0000000..993cc75 --- /dev/null +++ b/deployment-notes/deployment-w4gkwgg4ccww8oc4s8w0soog-2026-02-04-14-34-56.txt @@ -0,0 +1,2087 @@ +2026-Feb-04 14:27:08.924098 Starting deployment of Dewemoji to localhost. +2026-Feb-04 14:27:09.861274 Preparing container with helper image: ghcr.io/coollabsio/coolify-helper:1.0.12 +2026-Feb-04 14:27:10.350477 [CMD]: docker stop -t 30 w4gkwgg4ccww8oc4s8w0soog +2026-Feb-04 14:27:10.350477 Error response from daemon: No such container: w4gkwgg4ccww8oc4s8w0soog +2026-Feb-04 14:27:18.646668 [CMD]: docker run -d --network gkkgk00g44wscgk04ow4s808 --name w4gkwgg4ccww8oc4s8w0soog --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/coollabsio/coolify-helper:1.0.12 +2026-Feb-04 14:27:18.646668 af1c1aa9a3aac61bf00b8a353847b4dfefe334cdf7df01a384d10aa4c06d8ba6 +2026-Feb-04 14:27:20.662969 [CMD]: docker exec w4gkwgg4ccww8oc4s8w0soog bash -c 'GIT_SSH_COMMAND="ssh -o ConnectTimeout=30 -p 22 -o Port=22 -o LogLevel=ERROR -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" git ls-remote https://git.backoffice.biz.id/dwindown/dewemoji.git refs/heads/main' +2026-Feb-04 14:27:20.662969 26e5da1b8dbeb3065ab56c09dd586329b30b9ba7 refs/heads/main +2026-Feb-04 14:27:20.681127 ---------------------------------------- +2026-Feb-04 14:27:20.690518 Importing https://git.backoffice.biz.id/dwindown/dewemoji.git:main (commit sha 26e5da1b8dbeb3065ab56c09dd586329b30b9ba7) to /artifacts/w4gkwgg4ccww8oc4s8w0soog. +2026-Feb-04 14:27:21.314142 [CMD]: docker exec w4gkwgg4ccww8oc4s8w0soog bash -c 'git clone --depth=1 --recurse-submodules --shallow-submodules -b 'main' 'https://git.backoffice.biz.id/dwindown/dewemoji.git' '/artifacts/w4gkwgg4ccww8oc4s8w0soog' && cd '/artifacts/w4gkwgg4ccww8oc4s8w0soog' && if [ -f .gitmodules ]; then sed -i "s#git@\(.*\):#https://\1/#g" '/artifacts/w4gkwgg4ccww8oc4s8w0soog'/.gitmodules || true && git submodule sync && GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" git submodule update --init --recursive --depth=1; fi && cd '/artifacts/w4gkwgg4ccww8oc4s8w0soog' && GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" git lfs pull' +2026-Feb-04 14:27:21.314142 Cloning into '/artifacts/w4gkwgg4ccww8oc4s8w0soog'... +2026-Feb-04 14:27:24.464793 [CMD]: docker exec w4gkwgg4ccww8oc4s8w0soog bash -c 'cd /artifacts/w4gkwgg4ccww8oc4s8w0soog && git log -1 26e5da1b8dbeb3065ab56c09dd586329b30b9ba7 --pretty=%B' +2026-Feb-04 14:27:24.464793 fix(deploy): make composer stage resilient in docker build +2026-Feb-04 14:27:25.186616 ---------------------------------------- +2026-Feb-04 14:27:25.207444 ⚠️ Build-time environment variable warning: APP_ENV=production +2026-Feb-04 14:27:25.223636 Affects: Laravel/Symfony +2026-Feb-04 14:27:25.236569 Issue: May affect dependency installation and build optimizations +2026-Feb-04 14:27:25.255510 Recommendation: Consider using "local" or "development" for build +2026-Feb-04 14:27:25.267114 +2026-Feb-04 14:27:25.279568 💡 Tips to resolve build issues: +2026-Feb-04 14:27:25.299866 1. Set these variables as "Runtime only" in the environment variables settings +2026-Feb-04 14:27:25.314814 2. Use different values for build-time (e.g., NODE_ENV=development for build) +2026-Feb-04 14:27:25.353283 3. Consider using multi-stage Docker builds to separate build and runtime environments +2026-Feb-04 14:27:29.112972 [CMD]: docker exec w4gkwgg4ccww8oc4s8w0soog bash -c 'test -f /artifacts/w4gkwgg4ccww8oc4s8w0soog/app/Dockerfile && echo 'exists' || echo 'not found'' +2026-Feb-04 14:27:29.112972 exists +2026-Feb-04 14:27:29.677837 [CMD]: docker exec w4gkwgg4ccww8oc4s8w0soog bash -c 'cat /artifacts/w4gkwgg4ccww8oc4s8w0soog/app/Dockerfile' +2026-Feb-04 14:27:29.677837 # syntax=docker/dockerfile:1.7 +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 FROM node:22-alpine AS frontend +2026-Feb-04 14:27:29.677837 WORKDIR /var/www/html +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 COPY package.json ./ +2026-Feb-04 14:27:29.677837 RUN npm install +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 COPY resources ./resources +2026-Feb-04 14:27:29.677837 COPY public ./public +2026-Feb-04 14:27:29.677837 COPY vite.config.js ./ +2026-Feb-04 14:27:29.677837 RUN npm run build +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 FROM composer:2 AS vendor +2026-Feb-04 14:27:29.677837 WORKDIR /var/www/html +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 COPY composer.json composer.lock ./ +2026-Feb-04 14:27:29.677837 RUN composer install \ +2026-Feb-04 14:27:29.677837 --no-dev \ +2026-Feb-04 14:27:29.677837 --no-interaction \ +2026-Feb-04 14:27:29.677837 --no-progress \ +2026-Feb-04 14:27:29.677837 --prefer-dist \ +2026-Feb-04 14:27:29.677837 --optimize-autoloader \ +2026-Feb-04 14:27:29.677837 --no-scripts \ +2026-Feb-04 14:27:29.677837 --ignore-platform-reqs +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 FROM php:8.2-apache +2026-Feb-04 14:27:29.677837 WORKDIR /var/www/html +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 RUN apt-get update && apt-get install -y \ +2026-Feb-04 14:27:29.677837 libzip-dev \ +2026-Feb-04 14:27:29.677837 libicu-dev \ +2026-Feb-04 14:27:29.677837 unzip \ +2026-Feb-04 14:27:29.677837 curl \ +2026-Feb-04 14:27:29.677837 default-mysql-client \ +2026-Feb-04 14:27:29.677837 && docker-php-ext-install pdo_mysql bcmath exif intl zip \ +2026-Feb-04 14:27:29.677837 && a2enmod rewrite headers expires \ +2026-Feb-04 14:27:29.677837 && rm -rf /var/lib/apt/lists/* +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 COPY . . +2026-Feb-04 14:27:29.677837 COPY --from=vendor /var/www/html/vendor ./vendor +2026-Feb-04 14:27:29.677837 COPY --from=frontend /var/www/html/public/build ./public/build +2026-Feb-04 14:27:29.677837 COPY docker/apache-vhost.conf /etc/apache2/sites-available/000-default.conf +2026-Feb-04 14:27:29.677837 COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 RUN chmod +x /usr/local/bin/entrypoint.sh \ +2026-Feb-04 14:27:29.677837 && chown -R www-data:www-data storage bootstrap/cache \ +2026-Feb-04 14:27:29.677837 && chmod -R ug+rwx storage bootstrap/cache +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 EXPOSE 80 +2026-Feb-04 14:27:29.677837 +2026-Feb-04 14:27:29.677837 ENTRYPOINT ["entrypoint.sh"] +2026-Feb-04 14:27:29.677837 CMD ["apache2-foreground"] +2026-Feb-04 14:27:30.324025 Added 81 ARG declarations to Dockerfile for service app (multi-stage build, added to 3 stages). +2026-Feb-04 14:27:30.335938 Pulling & building required images. +2026-Feb-04 14:27:30.432707 Creating build-time .env file in /artifacts (outside Docker context). +2026-Feb-04 14:27:31.033845 Adding build arguments to Docker Compose build command. +2026-Feb-04 14:27:31.966946 [CMD]: docker exec w4gkwgg4ccww8oc4s8w0soog bash -c 'COOLIFY_BRANCH=main COOLIFY_RESOURCE_UUID=p4w4csg8kcocs00s480w40cs docker compose --env-file /artifacts/build-time.env --project-name p4w4csg8kcocs00s480w40cs --project-directory /artifacts/w4gkwgg4ccww8oc4s8w0soog -f /artifacts/w4gkwgg4ccww8oc4s8w0soog/docker-compose.yml build --pull --build-arg COOLIFY_URL --build-arg COOLIFY_FQDN --build-arg APP_NAME --build-arg APP_ENV --build-arg APP_DEBUG --build-arg APP_URL --build-arg DB_DATABASE --build-arg DB_USERNAME --build-arg CACHE_STORE --build-arg QUEUE_CONNECTION --build-arg DEWEMOJI_BILLING_MODE --build-arg DEWEMOJI_GUMROAD_ENABLED --build-arg DEWEMOJI_GUMROAD_PRODUCT_IDS --build-arg DEWEMOJI_GUMROAD_TEST_KEYS --build-arg DEWEMOJI_MAYAR_ENABLED --build-arg DEWEMOJI_MAYAR_API_BASE --build-arg SESSION_DRIVER --build-arg DEWEMOJI_MAYAR_API_KEY --build-arg DEWEMOJI_MAYAR_SECRET_KEY --build-arg WAIT_FOR_DB --build-arg SERVICE_URL_APP --build-arg RUN_MIGRATIONS --build-arg DB_ROOT_PASSWORD --build-arg APP_KEY --build-arg SERVICE_FQDN_APP --build-arg DB_PASSWORD --build-arg DEWEMOJI_MAYAR_ENDPOINT_VERIFY --build-arg COOLIFY_BUILD_SECRETS_HASH=b42d944fe14fac01669c573f4231793c6682274480a853ae4ec287bd0f571e94' +2026-Feb-04 14:27:31.966946 #1 [internal] load local bake definitions +2026-Feb-04 14:27:32.118216 #1 reading from stdin 1.72kB done +2026-Feb-04 14:27:32.118216 #1 DONE 0.0s +2026-Feb-04 14:27:32.225035 #2 [internal] load build definition from Dockerfile +2026-Feb-04 14:27:32.225035 #2 transferring dockerfile: 2.98kB done +2026-Feb-04 14:27:32.225035 #2 DONE 0.1s +2026-Feb-04 14:27:32.385137 #3 resolve image config for docker-image://docker.io/docker/dockerfile:1.7 +2026-Feb-04 14:27:33.376189 #3 DONE 1.1s +2026-Feb-04 14:27:33.527962 #4 docker-image://docker.io/docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e +2026-Feb-04 14:27:33.527962 #4 CACHED +2026-Feb-04 14:27:33.557895 #5 [internal] load metadata for docker.io/library/composer:2 +2026-Feb-04 14:27:34.418854 #5 DONE 0.9s +2026-Feb-04 14:27:34.418854 +2026-Feb-04 14:27:34.418854 #6 [internal] load metadata for docker.io/library/node:22-alpine +2026-Feb-04 14:27:34.519762 #6 DONE 0.9s +2026-Feb-04 14:27:34.519762 +2026-Feb-04 14:27:34.519762 #7 [internal] load metadata for docker.io/library/php:8.2-apache +2026-Feb-04 14:27:34.519762 #7 DONE 0.9s +2026-Feb-04 14:27:34.720717 #8 [internal] load .dockerignore +2026-Feb-04 14:27:34.720717 #8 transferring context: 201B done +2026-Feb-04 14:27:34.720717 #8 DONE 0.1s +2026-Feb-04 14:27:34.844975 #9 [frontend 1/8] FROM docker.io/library/node:22-alpine@sha256:e4bf2a82ad0a4037d28035ae71529873c069b13eb0455466ae0bc13363826e34 +2026-Feb-04 14:27:34.844975 #9 DONE 0.0s +2026-Feb-04 14:27:34.844975 +2026-Feb-04 14:27:34.844975 #10 [stage-2 1/9] FROM docker.io/library/php:8.2-apache@sha256:bb72c1c7374fd5d5f3413cad7994854c03b54d121788c5c23771d5d08aaf0cc8 +2026-Feb-04 14:27:34.844975 #10 DONE 0.0s +2026-Feb-04 14:27:34.844975 +2026-Feb-04 14:27:34.844975 #11 [stage-2 2/9] WORKDIR /var/www/html +2026-Feb-04 14:27:34.844975 #11 CACHED +2026-Feb-04 14:27:34.844975 +2026-Feb-04 14:27:34.844975 #12 [vendor 1/4] FROM docker.io/library/composer:2@sha256:e4ff7e012505df43b4404cf73a4590e06a3f752a7f77d9079a89f770d257eb84 +2026-Feb-04 14:27:34.844975 #12 DONE 0.0s +2026-Feb-04 14:27:34.844975 +2026-Feb-04 14:27:34.844975 #13 [internal] load build context +2026-Feb-04 14:27:34.844975 #13 transferring context: 703.18kB 0.1s done +2026-Feb-04 14:27:35.067377 #13 DONE 0.2s +2026-Feb-04 14:27:35.067377 +2026-Feb-04 14:27:35.067377 #14 [frontend 2/8] WORKDIR /var/www/html +2026-Feb-04 14:27:35.067377 #14 CACHED +2026-Feb-04 14:27:35.067377 +2026-Feb-04 14:27:35.067377 #15 [frontend 3/8] COPY package.json ./ +2026-Feb-04 14:27:35.067377 #15 CACHED +2026-Feb-04 14:27:35.067377 +2026-Feb-04 14:27:35.067377 #16 [vendor 2/4] WORKDIR /var/www/html +2026-Feb-04 14:27:35.067377 #16 CACHED +2026-Feb-04 14:27:35.067377 +2026-Feb-04 14:27:35.067377 #17 [vendor 3/4] COPY composer.json composer.lock ./ +2026-Feb-04 14:27:35.067377 #17 CACHED +2026-Feb-04 14:27:35.067377 +2026-Feb-04 14:27:35.067377 #18 [vendor 4/4] RUN composer install --no-dev --no-interaction --no-progress --prefer-dist --optimize-autoloader --no-scripts --ignore-platform-reqs +2026-Feb-04 14:27:36.386901 #18 1.309 Installing dependencies from lock file +2026-Feb-04 14:27:36.386901 #18 1.317 Verifying lock file contents can be installed on current platform. +2026-Feb-04 14:27:36.386901 #18 1.349 Package operations: 76 installs, 0 updates, 0 removals +2026-Feb-04 14:27:36.386901 #18 1.352 - Downloading doctrine/inflector (2.1.0) +2026-Feb-04 14:27:36.386901 #18 1.354 - Downloading doctrine/lexer (3.0.1) +2026-Feb-04 14:27:36.386901 #18 1.355 - Downloading dragonmantank/cron-expression (v3.6.0) +2026-Feb-04 14:27:36.386901 #18 1.355 - Downloading symfony/polyfill-mbstring (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.356 - Downloading symfony/deprecation-contracts (v3.6.0) +2026-Feb-04 14:27:36.386901 #18 1.357 - Downloading symfony/http-foundation (v7.4.5) +2026-Feb-04 14:27:36.386901 #18 1.357 - Downloading fruitcake/php-cors (v1.4.0) +2026-Feb-04 14:27:36.386901 #18 1.358 - Downloading psr/http-message (2.0) +2026-Feb-04 14:27:36.386901 #18 1.359 - Downloading psr/http-client (1.0.3) +2026-Feb-04 14:27:36.386901 #18 1.360 - Downloading ralouphie/getallheaders (3.0.3) +2026-Feb-04 14:27:36.386901 #18 1.360 - Downloading psr/http-factory (1.1.0) +2026-Feb-04 14:27:36.386901 #18 1.361 - Downloading guzzlehttp/psr7 (2.8.0) +2026-Feb-04 14:27:36.386901 #18 1.362 - Downloading guzzlehttp/promises (2.3.0) +2026-Feb-04 14:27:36.386901 #18 1.362 - Downloading guzzlehttp/guzzle (7.10.0) +2026-Feb-04 14:27:36.386901 #18 1.363 - Downloading symfony/polyfill-php80 (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.363 - Downloading guzzlehttp/uri-template (v1.0.5) +2026-Feb-04 14:27:36.386901 #18 1.364 - Downloading symfony/polyfill-intl-normalizer (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.364 - Downloading symfony/polyfill-intl-grapheme (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.365 - Downloading symfony/polyfill-ctype (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.365 - Downloading symfony/string (v8.0.4) +2026-Feb-04 14:27:36.386901 #18 1.366 - Downloading psr/container (2.0.2) +2026-Feb-04 14:27:36.386901 #18 1.366 - Downloading symfony/service-contracts (v3.6.1) +2026-Feb-04 14:27:36.386901 #18 1.366 - Downloading symfony/console (v7.4.4) +2026-Feb-04 14:27:36.386901 #18 1.367 - Downloading laravel/prompts (v0.3.11) +2026-Feb-04 14:27:36.386901 #18 1.367 - Downloading laravel/serializable-closure (v2.0.8) +2026-Feb-04 14:27:36.386901 #18 1.368 - Downloading symfony/var-dumper (v7.4.4) +2026-Feb-04 14:27:36.386901 #18 1.368 - Downloading nikic/php-parser (v5.7.0) +2026-Feb-04 14:27:36.386901 #18 1.369 - Downloading psy/psysh (v0.12.19) +2026-Feb-04 14:27:36.386901 #18 1.369 - Downloading voku/portable-ascii (2.0.3) +2026-Feb-04 14:27:36.386901 #18 1.370 - Downloading phpoption/phpoption (1.9.5) +2026-Feb-04 14:27:36.386901 #18 1.370 - Downloading graham-campbell/result-type (v1.1.4) +2026-Feb-04 14:27:36.386901 #18 1.371 - Downloading vlucas/phpdotenv (v5.6.3) +2026-Feb-04 14:27:36.386901 #18 1.371 - Downloading symfony/css-selector (v8.0.0) +2026-Feb-04 14:27:36.386901 #18 1.372 - Downloading tijsverkoyen/css-to-inline-styles (v2.4.0) +2026-Feb-04 14:27:36.386901 #18 1.372 - Downloading symfony/polyfill-uuid (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.373 - Downloading symfony/uid (v7.4.4) +2026-Feb-04 14:27:36.386901 #18 1.374 - Downloading symfony/routing (v7.4.4) +2026-Feb-04 14:27:36.386901 #18 1.374 - Downloading symfony/process (v7.4.5) +2026-Feb-04 14:27:36.386901 #18 1.374 - Downloading symfony/polyfill-php85 (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.375 - Downloading symfony/polyfill-php84 (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.375 - Downloading symfony/polyfill-php83 (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.376 - Downloading symfony/polyfill-intl-idn (v1.33.0) +2026-Feb-04 14:27:36.386901 #18 1.376 - Downloading symfony/mime (v7.4.5) +2026-Feb-04 14:27:36.386901 #18 1.376 - Downloading psr/event-dispatcher (1.0.0) +2026-Feb-04 14:27:36.386901 #18 1.377 - Downloading symfony/event-dispatcher-contracts (v3.6.0) +2026-Feb-04 14:27:36.386901 #18 1.377 - Downloading symfony/event-dispatcher (v8.0.4) +2026-Feb-04 14:27:36.386901 #18 1.378 - Downloading psr/log (3.0.2) +2026-Feb-04 14:27:36.386901 #18 1.378 - Downloading egulias/email-validator (4.0.4) +2026-Feb-04 14:27:36.386901 #18 1.379 - Downloading symfony/mailer (v7.4.4) +2026-Feb-04 14:27:36.386901 #18 1.379 - Downloading symfony/error-handler (v7.4.4) +2026-Feb-04 14:27:36.386901 #18 1.380 - Downloading symfony/http-kernel (v7.4.5) +2026-Feb-04 14:27:36.386901 #18 1.380 - Downloading symfony/finder (v7.4.5) +2026-Feb-04 14:27:36.386901 #18 1.380 - Downloading ramsey/collection (2.1.1) +2026-Feb-04 14:27:36.386901 #18 1.381 - Downloading brick/math (0.14.4) +2026-Feb-04 14:27:36.386901 #18 1.382 - Downloading ramsey/uuid (4.9.2) +2026-Feb-04 14:27:36.386901 #18 1.382 - Downloading psr/simple-cache (3.0.0) +2026-Feb-04 14:27:36.386901 #18 1.383 - Downloading nunomaduro/termwind (v2.3.3) +2026-Feb-04 14:27:36.386901 #18 1.383 - Downloading symfony/translation-contracts (v3.6.1) +2026-Feb-04 14:27:36.386901 #18 1.383 - Downloading symfony/translation (v8.0.4) +2026-Feb-04 14:27:36.386901 #18 1.384 - Downloading psr/clock (1.0.0) +2026-Feb-04 14:27:36.386901 #18 1.384 - Downloading symfony/clock (v8.0.0) +2026-Feb-04 14:27:36.386901 #18 1.385 - Downloading carbonphp/carbon-doctrine-types (3.2.0) +2026-Feb-04 14:27:36.386901 #18 1.386 - Downloading nesbot/carbon (3.11.1) +2026-Feb-04 14:27:36.386901 #18 1.386 - Downloading monolog/monolog (3.10.0) +2026-Feb-04 14:27:36.386901 #18 1.387 - Downloading league/uri-interfaces (7.8.0) +2026-Feb-04 14:27:36.386901 #18 1.388 - Downloading league/uri (7.8.0) +2026-Feb-04 14:27:36.386901 #18 1.389 - Downloading league/mime-type-detection (1.16.0) +2026-Feb-04 14:27:36.386901 #18 1.389 - Downloading league/flysystem-local (3.31.0) +2026-Feb-04 14:27:36.386901 #18 1.390 - Downloading league/flysystem (3.31.0) +2026-Feb-04 14:27:36.386901 #18 1.390 - Downloading nette/utils (v4.1.1) +2026-Feb-04 14:27:36.386901 #18 1.391 - Downloading nette/schema (v1.3.3) +2026-Feb-04 14:27:36.386901 #18 1.391 - Downloading dflydev/dot-access-data (v3.0.3) +2026-Feb-04 14:27:36.386901 #18 1.392 - Downloading league/config (v1.2.0) +2026-Feb-04 14:27:36.386901 #18 1.392 - Downloading league/commonmark (2.8.0) +2026-Feb-04 14:27:36.386901 #18 1.392 - Downloading laravel/framework (v12.49.0) +2026-Feb-04 14:27:36.386901 #18 1.393 - Downloading laravel/tinker (v2.11.0) +2026-Feb-04 14:27:43.715895 #18 8.801 - Installing doctrine/inflector (2.1.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.803 - Installing doctrine/lexer (3.0.1): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.806 - Installing dragonmantank/cron-expression (v3.6.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.808 - Installing symfony/polyfill-mbstring (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.812 - Installing symfony/deprecation-contracts (v3.6.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.817 - Installing symfony/http-foundation (v7.4.5): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.820 - Installing fruitcake/php-cors (v1.4.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.822 - Installing psr/http-message (2.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.824 - Installing psr/http-client (1.0.3): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.829 - Installing ralouphie/getallheaders (3.0.3): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.833 - Installing psr/http-factory (1.1.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.833 - Installing guzzlehttp/psr7 (2.8.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.833 - Installing guzzlehttp/promises (2.3.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.833 - Installing guzzlehttp/guzzle (7.10.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.833 - Installing symfony/polyfill-php80 (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.833 - Installing guzzlehttp/uri-template (v1.0.5): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.833 - Installing symfony/polyfill-intl-normalizer (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.834 - Installing symfony/polyfill-intl-grapheme (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.835 - Installing symfony/polyfill-ctype (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.836 - Installing symfony/string (v8.0.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.837 - Installing psr/container (2.0.2): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.838 - Installing symfony/service-contracts (v3.6.1): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.840 - Installing symfony/console (v7.4.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.841 - Installing laravel/prompts (v0.3.11): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.842 - Installing laravel/serializable-closure (v2.0.8): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.843 - Installing symfony/var-dumper (v7.4.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.843 - Installing nikic/php-parser (v5.7.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.844 - Installing psy/psysh (v0.12.19): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.845 - Installing voku/portable-ascii (2.0.3): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.846 - Installing phpoption/phpoption (1.9.5): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.846 - Installing graham-campbell/result-type (v1.1.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.847 - Installing vlucas/phpdotenv (v5.6.3): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.847 - Installing symfony/css-selector (v8.0.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.848 - Installing tijsverkoyen/css-to-inline-styles (v2.4.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.848 - Installing symfony/polyfill-uuid (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.849 - Installing symfony/uid (v7.4.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.849 - Installing symfony/routing (v7.4.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.850 - Installing symfony/process (v7.4.5): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.850 - Installing symfony/polyfill-php85 (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.851 - Installing symfony/polyfill-php84 (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.851 - Installing symfony/polyfill-php83 (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.852 - Installing symfony/polyfill-intl-idn (v1.33.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.852 - Installing symfony/mime (v7.4.5): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.852 - Installing psr/event-dispatcher (1.0.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.853 - Installing symfony/event-dispatcher-contracts (v3.6.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.853 - Installing symfony/event-dispatcher (v8.0.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.854 - Installing psr/log (3.0.2): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.854 - Installing egulias/email-validator (4.0.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.855 - Installing symfony/mailer (v7.4.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.855 - Installing symfony/error-handler (v7.4.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.856 - Installing symfony/http-kernel (v7.4.5): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.856 - Installing symfony/finder (v7.4.5): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.857 - Installing ramsey/collection (2.1.1): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.857 - Installing brick/math (0.14.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.858 - Installing ramsey/uuid (4.9.2): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.858 - Installing psr/simple-cache (3.0.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.859 - Installing nunomaduro/termwind (v2.3.3): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.860 - Installing symfony/translation-contracts (v3.6.1): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.861 - Installing symfony/translation (v8.0.4): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.861 - Installing psr/clock (1.0.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.862 - Installing symfony/clock (v8.0.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.862 - Installing carbonphp/carbon-doctrine-types (3.2.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.863 - Installing nesbot/carbon (3.11.1): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.863 - Installing monolog/monolog (3.10.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.864 - Installing league/uri-interfaces (7.8.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.864 - Installing league/uri (7.8.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.865 - Installing league/mime-type-detection (1.16.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.865 - Installing league/flysystem-local (3.31.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.865 - Installing league/flysystem (3.31.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.866 - Installing nette/utils (v4.1.1): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.866 - Installing nette/schema (v1.3.3): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.867 - Installing dflydev/dot-access-data (v3.0.3): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.867 - Installing league/config (v1.2.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.868 - Installing league/commonmark (2.8.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.868 - Installing laravel/framework (v12.49.0): Extracting archive +2026-Feb-04 14:27:43.882396 #18 8.869 - Installing laravel/tinker (v2.11.0): Extracting archive +2026-Feb-04 14:27:44.857683 #18 ... +2026-Feb-04 14:27:44.857683 +2026-Feb-04 14:27:44.857683 #19 [stage-2 3/9] RUN apt-get update && apt-get install -y libzip-dev libicu-dev unzip curl default-mysql-client && docker-php-ext-install pdo_mysql bcmath exif intl zip && a2enmod rewrite headers expires && rm -rf /var/lib/apt/lists/* +2026-Feb-04 14:27:44.857683 #19 1.497 Hit:1 http://deb.debian.org/debian trixie InRelease +2026-Feb-04 14:27:44.857683 #19 1.658 Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB] +2026-Feb-04 14:27:44.857683 #19 2.010 Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB] +2026-Feb-04 14:27:44.857683 #19 2.234 Get:4 http://deb.debian.org/debian trixie/main amd64 Packages [9670 kB] +2026-Feb-04 14:27:44.857683 #19 3.413 Get:5 http://deb.debian.org/debian trixie-updates/main amd64 Packages [5412 B] +2026-Feb-04 14:27:44.857683 #19 3.594 Get:6 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [98.8 kB] +2026-Feb-04 14:27:44.857683 #19 4.841 Fetched 9865 kB in 4s (2371 kB/s) +2026-Feb-04 14:27:44.857683 #19 4.841 Reading package lists... +2026-Feb-04 14:27:44.857683 #19 6.002 Reading package lists... +2026-Feb-04 14:27:44.857683 #19 7.214 Building dependency tree... +2026-Feb-04 14:27:44.857683 #19 7.485 Reading state information... +2026-Feb-04 14:27:44.857683 #19 7.874 curl is already the newest version (8.14.1-2+deb13u2). +2026-Feb-04 14:27:44.857683 #19 7.874 The following additional packages will be installed: +2026-Feb-04 14:27:44.857683 #19 7.874 icu-devtools libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl +2026-Feb-04 14:27:44.857683 #19 7.875 libedit2 libgpm2 libicu76 libmariadb3 libncurses6 libpcre2-posix3 +2026-Feb-04 14:27:44.857683 #19 7.875 libterm-readkey-perl liburing2 libzip5 mariadb-client mariadb-client-compat +2026-Feb-04 14:27:44.857683 #19 7.876 mariadb-client-core mariadb-common mysql-common zipcmp zipmerge ziptool +2026-Feb-04 14:27:44.857683 #19 7.876 zlib1g-dev +2026-Feb-04 14:27:44.857683 #19 7.877 Suggested packages: +2026-Feb-04 14:27:44.857683 #19 7.877 libclone-perl libmldbm-perl libnet-daemon-perl libsql-statement-perl gpm +2026-Feb-04 14:27:44.857683 #19 7.877 icu-doc zip +2026-Feb-04 14:27:44.857683 #19 8.160 The following NEW packages will be installed: +2026-Feb-04 14:27:44.857683 #19 8.161 default-mysql-client icu-devtools libconfig-inifiles-perl +2026-Feb-04 14:27:44.857683 #19 8.161 libdbd-mariadb-perl libdbi-perl libedit2 libgpm2 libicu-dev libicu76 +2026-Feb-04 14:27:44.857683 #19 8.162 libmariadb3 libncurses6 libpcre2-posix3 libterm-readkey-perl liburing2 +2026-Feb-04 14:27:44.857683 #19 8.162 libzip-dev libzip5 mariadb-client mariadb-client-compat mariadb-client-core +2026-Feb-04 14:27:44.857683 #19 8.162 mariadb-common mysql-common unzip zipcmp zipmerge ziptool zlib1g-dev +2026-Feb-04 14:27:44.857683 #19 8.798 0 upgraded, 26 newly installed, 0 to remove and 0 not upgraded. +2026-Feb-04 14:27:44.857683 #19 8.798 Need to get 27.8 MB of archives. +2026-Feb-04 14:27:44.857683 #19 8.798 After this operation, 179 MB of additional disk space will be used. +2026-Feb-04 14:27:44.857683 #19 8.798 Get:1 http://deb.debian.org/debian trixie/main amd64 libconfig-inifiles-perl all 3.000003-3 [44.8 kB] +2026-Feb-04 14:27:44.857683 #19 9.163 Get:2 http://deb.debian.org/debian trixie/main amd64 mysql-common all 5.8+1.1.1 [6784 B] +2026-Feb-04 14:27:44.857683 #19 9.396 Get:3 http://deb.debian.org/debian trixie/main amd64 mariadb-common all 1:11.8.3-0+deb13u1 [28.8 kB] +2026-Feb-04 14:27:44.857683 #19 9.576 Get:4 http://deb.debian.org/debian trixie/main amd64 libmariadb3 amd64 1:11.8.3-0+deb13u1 [187 kB] +2026-Feb-04 14:27:44.857683 #19 9.985 Get:5 http://deb.debian.org/debian trixie/main amd64 libedit2 amd64 3.1-20250104-1 [93.8 kB] +2026-Feb-04 14:27:44.891553 #19 10.17 Get:6 http://deb.debian.org/debian trixie/main amd64 libncurses6 amd64 6.5+20250216-2 [105 kB] +2026-Feb-04 14:27:45.039021 #19 ... +2026-Feb-04 14:27:45.039021 +2026-Feb-04 14:27:45.039021 #20 [frontend 4/8] RUN npm install +2026-Feb-04 14:27:45.072896 #20 ... +2026-Feb-04 14:27:45.072896 +2026-Feb-04 14:27:45.072896 #19 [stage-2 3/9] RUN apt-get update && apt-get install -y libzip-dev libicu-dev unzip curl default-mysql-client && docker-php-ext-install pdo_mysql bcmath exif intl zip && a2enmod rewrite headers expires && rm -rf /var/lib/apt/lists/* +2026-Feb-04 14:27:45.072896 #19 10.35 Get:7 http://deb.debian.org/debian trixie/main amd64 mariadb-client-core amd64 1:11.8.3-0+deb13u1 [919 kB] +2026-Feb-04 14:27:46.067550 #19 11.34 Get:8 http://deb.debian.org/debian trixie/main amd64 libpcre2-posix3 amd64 10.46-1~deb13u1 [63.9 kB] +2026-Feb-04 14:27:46.250588 #19 11.53 Get:9 http://deb.debian.org/debian trixie/main amd64 liburing2 amd64 2.9-1 [26.4 kB] +2026-Feb-04 14:27:46.436196 #19 11.72 Get:10 http://deb.debian.org/debian trixie/main amd64 mariadb-client amd64 1:11.8.3-0+deb13u1 [3160 kB] +2026-Feb-04 14:27:48.812977 #19 14.09 Get:11 http://deb.debian.org/debian trixie/main amd64 mariadb-client-compat all 1:11.8.3-0+deb13u1 [28.9 kB] +2026-Feb-04 14:27:48.812977 #19 14.09 Get:12 http://deb.debian.org/debian trixie/main amd64 default-mysql-client all 1.1.1 [3028 B] +2026-Feb-04 14:27:48.988501 #19 ... +2026-Feb-04 14:27:48.988501 +2026-Feb-04 14:27:48.988501 #20 [frontend 4/8] RUN npm install +2026-Feb-04 14:27:48.988501 #20 12.96 +2026-Feb-04 14:27:48.988501 #20 12.96 added 82 packages, and audited 83 packages in 12s +2026-Feb-04 14:27:48.988501 #20 12.96 +2026-Feb-04 14:27:48.988501 #20 12.96 21 packages are looking for funding +2026-Feb-04 14:27:48.988501 #20 12.96 run `npm fund` for details +2026-Feb-04 14:27:48.988501 #20 12.96 +2026-Feb-04 14:27:48.988501 #20 12.96 found 0 vulnerabilities +2026-Feb-04 14:27:48.988501 #20 12.97 npm notice +2026-Feb-04 14:27:48.988501 #20 12.97 npm notice New major version of npm available! 10.9.4 -> 11.8.0 +2026-Feb-04 14:27:48.988501 #20 12.97 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.8.0 +2026-Feb-04 14:27:48.988501 #20 12.97 npm notice To update run: npm install -g npm@11.8.0 +2026-Feb-04 14:27:48.988501 #20 12.97 npm notice +2026-Feb-04 14:27:48.988501 #20 DONE 13.9s +2026-Feb-04 14:27:48.988501 +2026-Feb-04 14:27:48.988501 #18 [vendor 4/4] RUN composer install --no-dev --no-interaction --no-progress --prefer-dist --optimize-autoloader --no-scripts --ignore-platform-reqs +2026-Feb-04 14:27:48.988501 #18 11.70 Generating optimized autoload files +2026-Feb-04 14:27:48.988501 #18 13.52 53 packages you are using are looking for funding. +2026-Feb-04 14:27:48.988501 #18 13.52 Use the `composer fund` command to find out more! +2026-Feb-04 14:27:48.988501 #18 DONE 13.9s +2026-Feb-04 14:27:48.988501 +2026-Feb-04 14:27:48.988501 #19 [stage-2 3/9] RUN apt-get update && apt-get install -y libzip-dev libicu-dev unzip curl default-mysql-client && docker-php-ext-install pdo_mysql bcmath exif intl zip && a2enmod rewrite headers expires && rm -rf /var/lib/apt/lists/* +2026-Feb-04 14:27:48.988501 #19 14.27 Get:13 http://deb.debian.org/debian trixie/main amd64 libicu76 amd64 76.1-4 [9722 kB] +2026-Feb-04 14:27:49.161911 #19 ... +2026-Feb-04 14:27:49.161911 +2026-Feb-04 14:27:49.161911 #21 [frontend 5/8] COPY resources ./resources +2026-Feb-04 14:27:49.161911 #21 DONE 0.2s +2026-Feb-04 14:27:49.194752 #22 [frontend 6/8] COPY public ./public +2026-Feb-04 14:27:49.194752 #22 DONE 0.2s +2026-Feb-04 14:27:49.194752 +2026-Feb-04 14:27:49.194752 #19 [stage-2 3/9] RUN apt-get update && apt-get install -y libzip-dev libicu-dev unzip curl default-mysql-client && docker-php-ext-install pdo_mysql bcmath exif intl zip && a2enmod rewrite headers expires && rm -rf /var/lib/apt/lists/* +2026-Feb-04 14:27:49.379691 #19 ... +2026-Feb-04 14:27:49.379691 +2026-Feb-04 14:27:49.379691 #23 [frontend 7/8] COPY vite.config.js ./ +2026-Feb-04 14:27:49.379691 #23 DONE 0.2s +2026-Feb-04 14:27:49.551332 #24 [frontend 8/8] RUN npm run build +2026-Feb-04 14:27:50.159881 #24 0.765 +2026-Feb-04 14:27:50.159881 #24 0.765 > build +2026-Feb-04 14:27:50.159881 #24 0.765 > vite build +2026-Feb-04 14:27:50.159881 #24 0.765 +2026-Feb-04 14:27:51.012685 #24 1.617 vite v7.3.1 building client environment for production... +2026-Feb-04 14:27:51.149015 #24 1.754 transforming... +2026-Feb-04 14:27:52.029233 #24 2.630 ✓ 53 modules transformed. +2026-Feb-04 14:27:52.146761 #24 2.752 rendering chunks... +2026-Feb-04 14:27:52.308337 #24 2.766 computing gzip size... +2026-Feb-04 14:27:52.308337 #24 2.772 public/build/manifest.json 0.33 kB │ gzip: 0.17 kB +2026-Feb-04 14:27:52.308337 #24 2.772 public/build/assets/app-CZuyDrlV.css 50.21 kB │ gzip: 10.63 kB +2026-Feb-04 14:27:52.308337 #24 2.772 public/build/assets/app-DIuewKhF.js 36.30 kB │ gzip: 14.65 kB +2026-Feb-04 14:27:52.308337 #24 2.773 ✓ built in 1.07s +2026-Feb-04 14:27:52.308337 #24 DONE 2.9s +2026-Feb-04 14:27:52.308337 +2026-Feb-04 14:27:52.308337 #19 [stage-2 3/9] RUN apt-get update && apt-get install -y libzip-dev libicu-dev unzip curl default-mysql-client && docker-php-ext-install pdo_mysql bcmath exif intl zip && a2enmod rewrite headers expires && rm -rf /var/lib/apt/lists/* +2026-Feb-04 14:28:54.380103 #19 79.66 Get:14 http://deb.debian.org/debian trixie/main amd64 icu-devtools amd64 76.1-4 [215 kB] +2026-Feb-04 14:28:54.950035 #19 80.23 Get:15 http://deb.debian.org/debian trixie/main amd64 libdbi-perl amd64 1.647-1 [861 kB] +2026-Feb-04 14:28:57.875305 #19 83.16 Get:16 http://deb.debian.org/debian trixie/main amd64 libdbd-mariadb-perl amd64 1.22-1+b4 [93.6 kB] +2026-Feb-04 14:28:58.330819 #19 83.61 Get:17 http://deb.debian.org/debian trixie/main amd64 libgpm2 amd64 1.20.7-11+b2 [14.4 kB] +2026-Feb-04 14:28:58.563712 #19 83.69 Get:18 http://deb.debian.org/debian trixie/main amd64 libicu-dev amd64 76.1-4 [10.8 MB] +2026-Feb-04 14:31:01.078825 #19 206.4 Get:19 http://deb.debian.org/debian trixie/main amd64 libterm-readkey-perl amd64 2.38-2+b4 [24.6 kB] +2026-Feb-04 14:31:01.458245 #19 206.7 Get:20 http://deb.debian.org/debian trixie/main amd64 libzip5 amd64 1.11.3-2 [62.6 kB] +2026-Feb-04 14:31:01.817203 #19 207.1 Get:21 http://deb.debian.org/debian trixie/main amd64 zipcmp amd64 1.11.3-2 [19.8 kB] +2026-Feb-04 14:31:02.057299 #19 207.2 Get:22 http://deb.debian.org/debian trixie/main amd64 zipmerge amd64 1.11.3-2 [14.5 kB] +2026-Feb-04 14:31:02.183082 #19 207.5 Get:23 http://deb.debian.org/debian trixie/main amd64 ziptool amd64 1.11.3-2 [22.6 kB] +2026-Feb-04 14:31:02.363240 #19 207.6 Get:24 http://deb.debian.org/debian trixie/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1+b1 [920 kB] +2026-Feb-04 14:31:06.278986 #19 211.6 Get:25 http://deb.debian.org/debian trixie/main amd64 libzip-dev amd64 1.11.3-2 [181 kB] +2026-Feb-04 14:31:07.278167 #19 212.6 Get:26 http://deb.debian.org/debian trixie/main amd64 unzip amd64 6.0-29 [173 kB] +2026-Feb-04 14:31:08.483552 #19 213.8 debconf: unable to initialize frontend: Dialog +2026-Feb-04 14:31:08.483552 #19 213.8 debconf: (TERM is not set, so the dialog frontend is not usable.) +2026-Feb-04 14:31:08.483552 #19 213.8 debconf: falling back to frontend: Readline +2026-Feb-04 14:31:08.655148 #19 213.8 debconf: unable to initialize frontend: Readline +2026-Feb-04 14:31:08.655148 #19 213.8 debconf: (This frontend requires a controlling tty.) +2026-Feb-04 14:31:08.655148 #19 213.8 debconf: falling back to frontend: Teletype +2026-Feb-04 14:31:08.655148 #19 213.8 debconf: unable to initialize frontend: Teletype +2026-Feb-04 14:31:08.655148 #19 213.8 debconf: (This frontend requires a controlling tty.) +2026-Feb-04 14:31:08.655148 #19 213.8 debconf: falling back to frontend: Noninteractive +2026-Feb-04 14:31:09.615871 #19 214.9 Fetched 27.8 MB in 3min 25s (135 kB/s) +2026-Feb-04 14:31:09.727469 #19 215.0 Selecting previously unselected package libconfig-inifiles-perl. +2026-Feb-04 14:31:09.727469 #19 215.0 (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 15584 files and directories currently installed.) +2026-Feb-04 14:31:09.727469 #19 215.0 Preparing to unpack .../00-libconfig-inifiles-perl_3.000003-3_all.deb ... +2026-Feb-04 14:31:09.887427 #19 215.0 Unpacking libconfig-inifiles-perl (3.000003-3) ... +2026-Feb-04 14:31:09.906411 #19 215.2 Selecting previously unselected package mysql-common. +2026-Feb-04 14:31:10.059782 #19 215.2 Preparing to unpack .../01-mysql-common_5.8+1.1.1_all.deb ... +2026-Feb-04 14:31:10.059782 #19 215.2 Unpacking mysql-common (5.8+1.1.1) ... +2026-Feb-04 14:31:10.059782 #19 215.3 Selecting previously unselected package mariadb-common. +2026-Feb-04 14:31:10.191953 #19 215.3 Preparing to unpack .../02-mariadb-common_1%3a11.8.3-0+deb13u1_all.deb ... +2026-Feb-04 14:31:10.191953 #19 215.4 Unpacking mariadb-common (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:10.191953 #19 215.5 Selecting previously unselected package libmariadb3:amd64. +2026-Feb-04 14:31:10.350688 #19 215.5 Preparing to unpack .../03-libmariadb3_1%3a11.8.3-0+deb13u1_amd64.deb ... +2026-Feb-04 14:31:10.350688 #19 215.5 Unpacking libmariadb3:amd64 (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:10.350688 #19 215.6 Selecting previously unselected package libedit2:amd64. +2026-Feb-04 14:31:10.461353 #19 215.6 Preparing to unpack .../04-libedit2_3.1-20250104-1_amd64.deb ... +2026-Feb-04 14:31:10.461353 #19 215.6 Unpacking libedit2:amd64 (3.1-20250104-1) ... +2026-Feb-04 14:31:10.461353 #19 215.7 Selecting previously unselected package libncurses6:amd64. +2026-Feb-04 14:31:10.575112 #19 215.7 Preparing to unpack .../05-libncurses6_6.5+20250216-2_amd64.deb ... +2026-Feb-04 14:31:10.575112 #19 215.8 Unpacking libncurses6:amd64 (6.5+20250216-2) ... +2026-Feb-04 14:31:10.575112 #19 215.9 Selecting previously unselected package mariadb-client-core. +2026-Feb-04 14:31:10.737308 #19 215.9 Preparing to unpack .../06-mariadb-client-core_1%3a11.8.3-0+deb13u1_amd64.deb ... +2026-Feb-04 14:31:10.737308 #19 215.9 Unpacking mariadb-client-core (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:10.808551 #19 216.1 Selecting previously unselected package libpcre2-posix3:amd64. +2026-Feb-04 14:31:10.916478 #19 216.1 Preparing to unpack .../07-libpcre2-posix3_10.46-1~deb13u1_amd64.deb ... +2026-Feb-04 14:31:10.916478 #19 216.1 Unpacking libpcre2-posix3:amd64 (10.46-1~deb13u1) ... +2026-Feb-04 14:31:10.916478 #19 216.2 Selecting previously unselected package liburing2:amd64. +2026-Feb-04 14:31:11.037808 #19 216.2 Preparing to unpack .../08-liburing2_2.9-1_amd64.deb ... +2026-Feb-04 14:31:11.037808 #19 216.2 Unpacking liburing2:amd64 (2.9-1) ... +2026-Feb-04 14:31:11.037808 #19 216.3 Selecting previously unselected package mariadb-client. +2026-Feb-04 14:31:11.211923 #19 216.3 Preparing to unpack .../09-mariadb-client_1%3a11.8.3-0+deb13u1_amd64.deb ... +2026-Feb-04 14:31:11.211923 #19 216.3 Unpacking mariadb-client (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:11.486666 #19 216.8 Selecting previously unselected package mariadb-client-compat. +2026-Feb-04 14:31:11.611450 #19 216.8 Preparing to unpack .../10-mariadb-client-compat_1%3a11.8.3-0+deb13u1_all.deb ... +2026-Feb-04 14:31:11.611450 #19 216.8 Unpacking mariadb-client-compat (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:11.611450 #19 216.9 Selecting previously unselected package default-mysql-client. +2026-Feb-04 14:31:11.754868 #19 216.9 Preparing to unpack .../11-default-mysql-client_1.1.1_all.deb ... +2026-Feb-04 14:31:11.754868 #19 216.9 Unpacking default-mysql-client (1.1.1) ... +2026-Feb-04 14:31:11.754868 #19 217.0 Selecting previously unselected package libicu76:amd64. +2026-Feb-04 14:31:11.936838 #19 217.0 Preparing to unpack .../12-libicu76_76.1-4_amd64.deb ... +2026-Feb-04 14:31:11.936838 #19 217.1 Unpacking libicu76:amd64 (76.1-4) ... +2026-Feb-04 14:31:12.450447 #19 217.7 Selecting previously unselected package icu-devtools. +2026-Feb-04 14:31:12.558285 #19 217.7 Preparing to unpack .../13-icu-devtools_76.1-4_amd64.deb ... +2026-Feb-04 14:31:12.558285 #19 217.7 Unpacking icu-devtools (76.1-4) ... +2026-Feb-04 14:31:12.558285 #19 217.8 Selecting previously unselected package libdbi-perl:amd64. +2026-Feb-04 14:31:12.699634 #19 217.8 Preparing to unpack .../14-libdbi-perl_1.647-1_amd64.deb ... +2026-Feb-04 14:31:12.699634 #19 217.9 Unpacking libdbi-perl:amd64 (1.647-1) ... +2026-Feb-04 14:31:12.699634 #19 218.0 Selecting previously unselected package libdbd-mariadb-perl. +2026-Feb-04 14:31:12.811315 #19 218.0 Preparing to unpack .../15-libdbd-mariadb-perl_1.22-1+b4_amd64.deb ... +2026-Feb-04 14:31:12.811315 #19 218.0 Unpacking libdbd-mariadb-perl (1.22-1+b4) ... +2026-Feb-04 14:31:12.811315 #19 218.1 Selecting previously unselected package libgpm2:amd64. +2026-Feb-04 14:31:12.920686 #19 218.1 Preparing to unpack .../16-libgpm2_1.20.7-11+b2_amd64.deb ... +2026-Feb-04 14:31:12.920686 #19 218.1 Unpacking libgpm2:amd64 (1.20.7-11+b2) ... +2026-Feb-04 14:31:12.920686 #19 218.2 Selecting previously unselected package libicu-dev:amd64. +2026-Feb-04 14:31:12.920686 #19 218.2 Preparing to unpack .../17-libicu-dev_76.1-4_amd64.deb ... +2026-Feb-04 14:31:12.920686 #19 218.2 Unpacking libicu-dev:amd64 (76.1-4) ... +2026-Feb-04 14:31:13.610837 #19 218.9 Selecting previously unselected package libterm-readkey-perl. +2026-Feb-04 14:31:13.726615 #19 218.9 Preparing to unpack .../18-libterm-readkey-perl_2.38-2+b4_amd64.deb ... +2026-Feb-04 14:31:13.726615 #19 218.9 Unpacking libterm-readkey-perl (2.38-2+b4) ... +2026-Feb-04 14:31:13.726615 #19 219.0 Selecting previously unselected package libzip5:amd64. +2026-Feb-04 14:31:13.829157 #19 219.0 Preparing to unpack .../19-libzip5_1.11.3-2_amd64.deb ... +2026-Feb-04 14:31:13.829157 #19 219.0 Unpacking libzip5:amd64 (1.11.3-2) ... +2026-Feb-04 14:31:13.829157 #19 219.1 Selecting previously unselected package zipcmp. +2026-Feb-04 14:31:13.941655 #19 219.1 Preparing to unpack .../20-zipcmp_1.11.3-2_amd64.deb ... +2026-Feb-04 14:31:13.941655 #19 219.1 Unpacking zipcmp (1.11.3-2) ... +2026-Feb-04 14:31:13.941655 #19 219.2 Selecting previously unselected package zipmerge. +2026-Feb-04 14:31:13.941655 #19 219.2 Preparing to unpack .../21-zipmerge_1.11.3-2_amd64.deb ... +2026-Feb-04 14:31:13.941655 #19 219.2 Unpacking zipmerge (1.11.3-2) ... +2026-Feb-04 14:31:14.129067 #19 219.3 Selecting previously unselected package ziptool. +2026-Feb-04 14:31:14.129067 #19 219.3 Preparing to unpack .../22-ziptool_1.11.3-2_amd64.deb ... +2026-Feb-04 14:31:14.129067 #19 219.3 Unpacking ziptool (1.11.3-2) ... +2026-Feb-04 14:31:14.129067 #19 219.4 Selecting previously unselected package zlib1g-dev:amd64. +2026-Feb-04 14:31:14.244085 #19 219.4 Preparing to unpack .../23-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1+b1_amd64.deb ... +2026-Feb-04 14:31:14.244085 #19 219.4 Unpacking zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1+b1) ... +2026-Feb-04 14:31:14.244085 #19 219.5 Selecting previously unselected package libzip-dev:amd64. +2026-Feb-04 14:31:14.383762 #19 219.5 Preparing to unpack .../24-libzip-dev_1.11.3-2_amd64.deb ... +2026-Feb-04 14:31:14.383762 #19 219.5 Unpacking libzip-dev:amd64 (1.11.3-2) ... +2026-Feb-04 14:31:14.383762 #19 219.7 Selecting previously unselected package unzip. +2026-Feb-04 14:31:14.502515 #19 219.7 Preparing to unpack .../25-unzip_6.0-29_amd64.deb ... +2026-Feb-04 14:31:14.502515 #19 219.7 Unpacking unzip (6.0-29) ... +2026-Feb-04 14:31:14.502515 #19 219.8 Setting up libconfig-inifiles-perl (3.000003-3) ... +2026-Feb-04 14:31:14.615421 #19 219.8 Setting up mysql-common (5.8+1.1.1) ... +2026-Feb-04 14:31:14.615421 #19 219.9 update-alternatives: using /etc/mysql/my.cnf.fallback to provide /etc/mysql/my.cnf (my.cnf) in auto mode +2026-Feb-04 14:31:14.715829 #19 219.9 Setting up libgpm2:amd64 (1.20.7-11+b2) ... +2026-Feb-04 14:31:14.715829 #19 220.0 Setting up libzip5:amd64 (1.11.3-2) ... +2026-Feb-04 14:31:14.715829 #19 220.0 Setting up unzip (6.0-29) ... +2026-Feb-04 14:31:14.824056 #19 220.0 Setting up libedit2:amd64 (3.1-20250104-1) ... +2026-Feb-04 14:31:14.824056 #19 220.1 Setting up zipmerge (1.11.3-2) ... +2026-Feb-04 14:31:14.824056 #19 220.1 Setting up mariadb-common (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:14.957021 #19 220.1 update-alternatives: using /etc/mysql/mariadb.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode +2026-Feb-04 14:31:14.957021 #19 220.2 Setting up libncurses6:amd64 (6.5+20250216-2) ... +2026-Feb-04 14:31:14.957021 #19 220.2 Setting up libmariadb3:amd64 (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:14.957021 #19 220.2 Setting up zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1+b1) ... +2026-Feb-04 14:31:15.066094 #19 220.3 Setting up libpcre2-posix3:amd64 (10.46-1~deb13u1) ... +2026-Feb-04 14:31:15.066094 #19 220.3 Setting up zipcmp (1.11.3-2) ... +2026-Feb-04 14:31:15.193047 #19 220.4 Setting up libicu76:amd64 (76.1-4) ... +2026-Feb-04 14:31:15.193047 #19 220.4 Setting up libterm-readkey-perl (2.38-2+b4) ... +2026-Feb-04 14:31:15.193047 #19 220.4 Setting up liburing2:amd64 (2.9-1) ... +2026-Feb-04 14:31:15.193047 #19 220.5 Setting up ziptool (1.11.3-2) ... +2026-Feb-04 14:31:15.336668 #19 220.5 Setting up libdbi-perl:amd64 (1.647-1) ... +2026-Feb-04 14:31:15.336668 #19 220.6 Setting up libzip-dev:amd64 (1.11.3-2) ... +2026-Feb-04 14:31:15.446633 #19 220.7 Setting up mariadb-client-core (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:15.446633 #19 220.7 Setting up libdbd-mariadb-perl (1.22-1+b4) ... +2026-Feb-04 14:31:15.446633 #19 220.7 Setting up icu-devtools (76.1-4) ... +2026-Feb-04 14:31:15.583909 #19 220.8 Setting up libicu-dev:amd64 (76.1-4) ... +2026-Feb-04 14:31:15.583909 #19 220.8 Setting up mariadb-client (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:15.583909 #19 220.9 Setting up mariadb-client-compat (1:11.8.3-0+deb13u1) ... +2026-Feb-04 14:31:15.801593 #19 220.9 Setting up default-mysql-client (1.1.1) ... +2026-Feb-04 14:31:15.801593 #19 220.9 Processing triggers for libc-bin (2.41-12+deb13u1) ... +2026-Feb-04 14:31:19.437935 #19 224.7 Configuring for: +2026-Feb-04 14:31:19.437935 #19 224.7 PHP Api Version: 20220829 +2026-Feb-04 14:31:19.437935 #19 224.7 Zend Module Api No: 20220829 +2026-Feb-04 14:31:19.437935 #19 224.7 Zend Extension Api No: 420220829 +2026-Feb-04 14:31:20.706188 #19 226.0 checking for grep that handles long lines and -e... +2026-Feb-04 14:31:20.829134 /usr/bin/grep +2026-Feb-04 14:31:20.829134 #19 226.0 checking for egrep... /usr/bin/grep -E +2026-Feb-04 14:31:20.829134 #19 226.0 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:31:20.829134 #19 226.0 checking for pkg-config... /usr/bin/pkg-config +2026-Feb-04 14:31:20.829134 #19 226.0 checking pkg-config is at least version 0.9.0... yes +2026-Feb-04 14:31:20.829134 #19 226.1 checking for cc... cc +2026-Feb-04 14:31:20.829134 #19 226.1 checking whether the C compiler works... +2026-Feb-04 14:31:20.981359 yes +2026-Feb-04 14:31:20.981359 #19 226.2 checking for C compiler default output file name... a.out +2026-Feb-04 14:31:20.981359 #19 226.2 checking for suffix of executables... +2026-Feb-04 14:31:21.095929 #19 226.3 checking whether we are cross compiling... no +2026-Feb-04 14:31:21.095929 #19 226.3 checking for suffix of object files... o +2026-Feb-04 14:31:21.095929 #19 226.4 checking whether the compiler supports GNU C... +2026-Feb-04 14:31:21.256220 yes +2026-Feb-04 14:31:21.256220 #19 226.4 checking whether cc accepts -g... yes +2026-Feb-04 14:31:21.256220 #19 226.4 checking for cc option to enable C11 features... none needed +2026-Feb-04 14:31:21.367712 #19 226.5 checking how to run the C preprocessor... cc -E +2026-Feb-04 14:31:21.367712 #19 226.6 checking for egrep -e... +2026-Feb-04 14:31:21.479796 (cached) /usr/bin/grep -E +2026-Feb-04 14:31:21.479796 #19 226.6 checking for icc... no +2026-Feb-04 14:31:21.479796 #19 226.7 checking for suncc... no +2026-Feb-04 14:31:21.479796 #19 226.7 checking for system library directory... lib +2026-Feb-04 14:31:21.479796 #19 226.7 checking if compiler supports -Wl,-rpath,... yes +2026-Feb-04 14:31:21.580506 #19 226.8 checking build system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:21.580506 #19 226.8 checking host system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:21.580506 #19 226.8 checking target system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:21.580506 #19 226.9 checking for PHP prefix... /usr/local +2026-Feb-04 14:31:21.580506 #19 226.9 checking for PHP includes... -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib +2026-Feb-04 14:31:21.684719 #19 226.9 checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20220829 +2026-Feb-04 14:31:21.684719 #19 226.9 checking for PHP installed headers prefix... /usr/local/include/php +2026-Feb-04 14:31:21.684719 #19 226.9 checking if debug is enabled... no +2026-Feb-04 14:31:21.684719 #19 226.9 checking if zts is enabled... no +2026-Feb-04 14:31:21.684719 #19 226.9 checking for gawk... no +2026-Feb-04 14:31:21.684719 #19 226.9 checking for nawk... nawk +2026-Feb-04 14:31:21.684719 #19 226.9 checking if nawk is broken... no +2026-Feb-04 14:31:21.684719 #19 226.9 checking for MySQL support for PDO... yes, shared +2026-Feb-04 14:31:21.684719 #19 226.9 checking for the location of libz... no +2026-Feb-04 14:31:21.684719 #19 226.9 checking for MySQL UNIX socket location... +2026-Feb-04 14:31:21.684719 #19 226.9 checking for PDO includes... /usr/local/include/php/ext +2026-Feb-04 14:31:21.684719 #19 226.9 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:31:21.684719 #19 227.0 checking for ld used by cc... /usr/bin/ld +2026-Feb-04 14:31:21.684719 #19 227.0 checking if the linker (/usr/bin/ld) is GNU ld... +2026-Feb-04 14:31:21.814194 yes +2026-Feb-04 14:31:21.814194 #19 227.0 checking for /usr/bin/ld option to reload object files... -r +2026-Feb-04 14:31:21.814194 #19 227.0 checking for BSD-compatible nm... /usr/bin/nm -B +2026-Feb-04 14:31:21.814194 #19 227.0 checking whether ln -s works... yes +2026-Feb-04 14:31:21.814194 #19 227.0 checking how to recognize dependent libraries... pass_all +2026-Feb-04 14:31:21.814194 #19 227.0 checking for stdio.h... yes +2026-Feb-04 14:31:21.814194 #19 227.0 checking for stdlib.h... yes +2026-Feb-04 14:31:21.928600 #19 227.1 checking for string.h... yes +2026-Feb-04 14:31:21.928600 #19 227.1 checking for inttypes.h... yes +2026-Feb-04 14:31:22.076302 #19 227.2 checking for stdint.h... yes +2026-Feb-04 14:31:22.076302 #19 227.3 checking for strings.h... yes +2026-Feb-04 14:31:22.076302 #19 227.3 checking for sys/stat.h... yes +2026-Feb-04 14:31:22.180701 #19 227.4 checking for sys/types.h... yes +2026-Feb-04 14:31:22.180701 #19 227.4 checking for unistd.h... yes +2026-Feb-04 14:31:22.396307 #19 227.5 checking for dlfcn.h... yes +2026-Feb-04 14:31:22.396307 #19 227.5 checking the maximum length of command line arguments... 1572864 +2026-Feb-04 14:31:22.396307 #19 227.5 checking command to parse /usr/bin/nm -B output from cc object... +2026-Feb-04 14:31:22.407841 ok +2026-Feb-04 14:31:22.540857 #19 227.7 checking for objdir... .libs +2026-Feb-04 14:31:22.540857 #19 227.7 checking for ar... ar +2026-Feb-04 14:31:22.540857 #19 227.7 checking for ranlib... ranlib +2026-Feb-04 14:31:22.540857 #19 227.7 checking for strip... strip +2026-Feb-04 14:31:22.540857 #19 227.8 checking if cc supports -fno-rtti -fno-exceptions... +2026-Feb-04 14:31:22.760647 no +2026-Feb-04 14:31:22.760647 #19 227.9 checking for cc option to produce PIC... -fPIC +2026-Feb-04 14:31:22.760647 #19 227.9 checking if cc PIC flag -fPIC works... yes +2026-Feb-04 14:31:22.760647 #19 227.9 checking if cc static flag -static works... yes +2026-Feb-04 14:31:22.893213 #19 228.0 checking if cc supports -c -o file.o... yes +2026-Feb-04 14:31:22.893213 #19 228.1 checking whether the cc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes +2026-Feb-04 14:31:22.893213 #19 228.1 checking whether -lc should be explicitly linked in... no +2026-Feb-04 14:31:23.083331 #19 228.2 checking dynamic linker characteristics... GNU/Linux ld.so +2026-Feb-04 14:31:23.083331 #19 228.2 checking how to hardcode library paths into programs... immediate +2026-Feb-04 14:31:23.083331 #19 228.2 checking whether stripping libraries is possible... yes +2026-Feb-04 14:31:23.083331 #19 228.2 checking if libtool supports shared libraries... yes +2026-Feb-04 14:31:23.083331 #19 228.2 checking whether to build shared libraries... yes +2026-Feb-04 14:31:23.083331 #19 228.2 checking whether to build static libraries... no +2026-Feb-04 14:31:23.259379 #19 228.5 +2026-Feb-04 14:31:23.445207 #19 228.5 creating libtool +2026-Feb-04 14:31:23.445207 #19 228.6 appending configuration tag "CXX" to libtool +2026-Feb-04 14:31:23.475314 #19 228.8 configure: patching config.h.in +2026-Feb-04 14:31:23.588104 #19 228.8 configure: creating ./config.status +2026-Feb-04 14:31:23.588104 #19 228.9 config.status: creating config.h +2026-Feb-04 14:31:23.814921 #19 228.9 /bin/bash /usr/src/php/ext/pdo_mysql/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/pdo_mysql -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/pdo_mysql/pdo_mysql.c -o pdo_mysql.lo -MMD -MF pdo_mysql.dep -MT pdo_mysql.lo +2026-Feb-04 14:31:23.942349 #19 229.2 mkdir .libs +2026-Feb-04 14:31:24.098218 #19 229.2 cc -I. -I/usr/src/php/ext/pdo_mysql -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/pdo_mysql/pdo_mysql.c -MMD -MF pdo_mysql.dep -MT pdo_mysql.lo -fPIC -DPIC -o .libs/pdo_mysql.o +2026-Feb-04 14:31:24.207848 #19 229.5 /bin/bash /usr/src/php/ext/pdo_mysql/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/pdo_mysql -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/pdo_mysql/mysql_driver.c -o mysql_driver.lo -MMD -MF mysql_driver.dep -MT mysql_driver.lo +2026-Feb-04 14:31:24.426581 #19 229.7 cc -I. -I/usr/src/php/ext/pdo_mysql -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/pdo_mysql/mysql_driver.c -MMD -MF mysql_driver.dep -MT mysql_driver.lo -fPIC -DPIC -o .libs/mysql_driver.o +2026-Feb-04 14:31:25.074190 #19 230.4 /bin/bash /usr/src/php/ext/pdo_mysql/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/pdo_mysql -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/pdo_mysql/mysql_statement.c -o mysql_statement.lo -MMD -MF mysql_statement.dep -MT mysql_statement.lo +2026-Feb-04 14:31:25.287003 #19 230.6 cc -I. -I/usr/src/php/ext/pdo_mysql -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/pdo_mysql/mysql_statement.c -MMD -MF mysql_statement.dep -MT mysql_statement.lo -fPIC -DPIC -o .libs/mysql_statement.o +2026-Feb-04 14:31:25.691500 #19 231.0 /bin/bash /usr/src/php/ext/pdo_mysql/libtool --tag=CC --mode=link cc -shared -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Wl,-O1 -pie -o pdo_mysql.la -export-dynamic -avoid-version -prefer-pic -module -rpath /usr/src/php/ext/pdo_mysql/modules pdo_mysql.lo mysql_driver.lo mysql_statement.lo +2026-Feb-04 14:31:25.887639 #19 231.2 cc -shared .libs/pdo_mysql.o .libs/mysql_driver.o .libs/mysql_statement.o -Wl,-O1 -Wl,-soname -Wl,pdo_mysql.so -o .libs/pdo_mysql.so +2026-Feb-04 14:31:25.994667 #19 231.2 creating pdo_mysql.la +2026-Feb-04 14:31:25.994667 #19 231.2 (cd .libs && rm -f pdo_mysql.la && ln -s ../pdo_mysql.la pdo_mysql.la) +2026-Feb-04 14:31:25.994667 #19 231.2 /bin/bash /usr/src/php/ext/pdo_mysql/libtool --tag=CC --mode=install cp ./pdo_mysql.la /usr/src/php/ext/pdo_mysql/modules +2026-Feb-04 14:31:25.994667 #19 231.3 cp ./.libs/pdo_mysql.so /usr/src/php/ext/pdo_mysql/modules/pdo_mysql.so +2026-Feb-04 14:31:26.143404 #19 231.3 cp ./.libs/pdo_mysql.lai /usr/src/php/ext/pdo_mysql/modules/pdo_mysql.la +2026-Feb-04 14:31:26.143404 #19 231.3 PATH="$PATH:/sbin" ldconfig -n /usr/src/php/ext/pdo_mysql/modules +2026-Feb-04 14:31:26.143404 #19 231.3 ---------------------------------------------------------------------- +2026-Feb-04 14:31:26.143404 #19 231.3 Libraries have been installed in: +2026-Feb-04 14:31:26.143404 #19 231.3 /usr/src/php/ext/pdo_mysql/modules +2026-Feb-04 14:31:26.143404 #19 231.3 +2026-Feb-04 14:31:26.143404 #19 231.3 If you ever happen to want to link against installed libraries +2026-Feb-04 14:31:26.143404 #19 231.3 in a given directory, LIBDIR, you must either use libtool, and +2026-Feb-04 14:31:26.143404 #19 231.3 specify the full pathname of the library, or use the `-LLIBDIR' +2026-Feb-04 14:31:26.143404 #19 231.3 flag during linking and do at least one of the following: +2026-Feb-04 14:31:26.143404 #19 231.3 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable +2026-Feb-04 14:31:26.143404 #19 231.3 during execution +2026-Feb-04 14:31:26.143404 #19 231.3 - add LIBDIR to the `LD_RUN_PATH' environment variable +2026-Feb-04 14:31:26.143404 #19 231.3 during linking +2026-Feb-04 14:31:26.143404 #19 231.3 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag +2026-Feb-04 14:31:26.143404 #19 231.3 - have your system administrator add LIBDIR to `/etc/ld.so.conf' +2026-Feb-04 14:31:26.143404 #19 231.3 +2026-Feb-04 14:31:26.143404 #19 231.3 See any operating system documentation about shared libraries for +2026-Feb-04 14:31:26.143404 #19 231.3 more information, such as the ld(1) and ld.so(8) manual pages. +2026-Feb-04 14:31:26.143404 #19 231.3 ---------------------------------------------------------------------- +2026-Feb-04 14:31:26.143404 #19 231.3 +2026-Feb-04 14:31:26.143404 #19 231.3 Build complete. +2026-Feb-04 14:31:26.143404 #19 231.3 Don't forget to run 'make test'. +2026-Feb-04 14:31:26.143404 #19 231.3 +2026-Feb-04 14:31:26.143404 #19 231.4 + strip --strip-all modules/pdo_mysql.so +2026-Feb-04 14:31:26.143404 #19 231.4 Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ +2026-Feb-04 14:31:26.290362 #19 231.6 find . -name \*.gcno -o -name \*.gcda | xargs rm -f +2026-Feb-04 14:31:26.391189 #19 231.6 find . -name \*.lo -o -name \*.o -o -name \*.dep | xargs rm -f +2026-Feb-04 14:31:26.391189 #19 231.6 find . -name \*.la -o -name \*.a | xargs rm -f +2026-Feb-04 14:31:26.391189 #19 231.6 find . -name \*.so | xargs rm -f +2026-Feb-04 14:31:26.391189 #19 231.6 find . -name .libs -a -type d|xargs rm -rf +2026-Feb-04 14:31:26.391189 #19 231.6 rm -f libphp.la modules/* libs/* +2026-Feb-04 14:31:26.391189 #19 231.6 rm -f ext/opcache/jit/zend_jit_x86.c +2026-Feb-04 14:31:26.391189 #19 231.6 rm -f ext/opcache/jit/zend_jit_arm64.c +2026-Feb-04 14:31:26.391189 #19 231.6 rm -f ext/opcache/minilua +2026-Feb-04 14:31:26.391189 #19 231.7 Configuring for: +2026-Feb-04 14:31:26.391189 #19 231.7 PHP Api Version: 20220829 +2026-Feb-04 14:31:26.391189 #19 231.7 Zend Module Api No: 20220829 +2026-Feb-04 14:31:26.391189 #19 231.7 Zend Extension Api No: 420220829 +2026-Feb-04 14:31:27.682609 #19 233.0 checking for grep that handles long lines and -e... +2026-Feb-04 14:31:27.802615 /usr/bin/grep +2026-Feb-04 14:31:27.802615 #19 233.0 checking for egrep... /usr/bin/grep -E +2026-Feb-04 14:31:27.802615 #19 233.0 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:31:27.802615 #19 233.0 checking for pkg-config... /usr/bin/pkg-config +2026-Feb-04 14:31:27.802615 #19 233.0 checking pkg-config is at least version 0.9.0... yes +2026-Feb-04 14:31:27.802615 #19 233.0 checking for cc... cc +2026-Feb-04 14:31:27.802615 #19 233.1 checking whether the C compiler works... +2026-Feb-04 14:31:27.942791 yes +2026-Feb-04 14:31:27.942791 #19 233.2 checking for C compiler default output file name... a.out +2026-Feb-04 14:31:27.942791 #19 233.2 checking for suffix of executables... +2026-Feb-04 14:31:28.070711 #19 233.2 checking whether we are cross compiling... no +2026-Feb-04 14:31:28.070711 #19 233.3 checking for suffix of object files... o +2026-Feb-04 14:31:28.070711 #19 233.4 checking whether the compiler supports GNU C... +2026-Feb-04 14:31:28.242993 yes +2026-Feb-04 14:31:28.242993 #19 233.4 checking whether cc accepts -g... yes +2026-Feb-04 14:31:28.242993 #19 233.4 checking for cc option to enable C11 features... none needed +2026-Feb-04 14:31:28.343320 #19 233.5 checking how to run the C preprocessor... cc -E +2026-Feb-04 14:31:28.343320 #19 233.6 checking for egrep -e... +2026-Feb-04 14:31:28.477354 (cached) /usr/bin/grep -E +2026-Feb-04 14:31:28.477354 #19 233.6 checking for icc... no +2026-Feb-04 14:31:28.477354 #19 233.6 checking for suncc... no +2026-Feb-04 14:31:28.477354 #19 233.7 checking for system library directory... lib +2026-Feb-04 14:31:28.477354 #19 233.7 checking if compiler supports -Wl,-rpath,... yes +2026-Feb-04 14:31:28.605562 #19 233.8 checking build system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:28.605562 #19 233.8 checking host system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:28.605562 #19 233.8 checking target system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:28.605562 #19 233.9 checking for PHP prefix... /usr/local +2026-Feb-04 14:31:28.605562 #19 233.9 checking for PHP includes... -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib +2026-Feb-04 14:31:28.605562 #19 233.9 checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20220829 +2026-Feb-04 14:31:28.605562 #19 233.9 checking for PHP installed headers prefix... /usr/local/include/php +2026-Feb-04 14:31:28.605562 #19 233.9 checking if debug is enabled... no +2026-Feb-04 14:31:28.708799 #19 233.9 checking if zts is enabled... no +2026-Feb-04 14:31:28.708799 #19 233.9 checking for gawk... no +2026-Feb-04 14:31:28.708799 #19 233.9 checking for nawk... nawk +2026-Feb-04 14:31:28.708799 #19 233.9 checking if nawk is broken... no +2026-Feb-04 14:31:28.708799 #19 233.9 checking whether to enable bc style precision math functions... yes, shared +2026-Feb-04 14:31:28.708799 #19 234.0 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:31:28.810788 #19 234.0 checking for ld used by cc... /usr/bin/ld +2026-Feb-04 14:31:28.810788 #19 234.0 checking if the linker (/usr/bin/ld) is GNU ld... yes +2026-Feb-04 14:31:28.810788 #19 234.0 checking for /usr/bin/ld option to reload object files... -r +2026-Feb-04 14:31:28.810788 #19 234.0 checking for BSD-compatible nm... /usr/bin/nm -B +2026-Feb-04 14:31:28.810788 #19 234.0 checking whether ln -s works... yes +2026-Feb-04 14:31:28.810788 #19 234.0 checking how to recognize dependent libraries... pass_all +2026-Feb-04 14:31:28.810788 #19 234.0 checking for stdio.h... yes +2026-Feb-04 14:31:28.953205 #19 234.1 checking for stdlib.h... yes +2026-Feb-04 14:31:28.953205 #19 234.1 checking for string.h... yes +2026-Feb-04 14:31:28.953205 #19 234.2 checking for inttypes.h... yes +2026-Feb-04 14:31:29.053939 #19 234.2 checking for stdint.h... yes +2026-Feb-04 14:31:29.053939 #19 234.3 checking for strings.h... yes +2026-Feb-04 14:31:29.053939 #19 234.3 checking for sys/stat.h... +2026-Feb-04 14:31:29.182843 yes +2026-Feb-04 14:31:29.182843 #19 234.4 checking for sys/types.h... yes +2026-Feb-04 14:31:29.290009 #19 234.5 checking for unistd.h... yes +2026-Feb-04 14:31:29.290009 #19 234.5 checking for dlfcn.h... yes +2026-Feb-04 14:31:29.290009 #19 234.6 checking the maximum length of command line arguments... 1572864 +2026-Feb-04 14:31:29.440945 #19 234.6 checking command to parse /usr/bin/nm -B output from cc object... +2026-Feb-04 14:31:29.487446 ok +2026-Feb-04 14:31:29.487446 #19 234.7 checking for objdir... +2026-Feb-04 14:31:29.602819 .libs +2026-Feb-04 14:31:29.602819 #19 234.8 checking for ar... ar +2026-Feb-04 14:31:29.602819 #19 234.8 checking for ranlib... ranlib +2026-Feb-04 14:31:29.602819 #19 234.8 checking for strip... strip +2026-Feb-04 14:31:29.602819 #19 234.9 checking if cc supports -fno-rtti -fno-exceptions... +2026-Feb-04 14:31:29.768946 no +2026-Feb-04 14:31:29.768946 #19 234.9 checking for cc option to produce PIC... -fPIC +2026-Feb-04 14:31:29.768946 #19 234.9 checking if cc PIC flag -fPIC works... yes +2026-Feb-04 14:31:29.768946 #19 235.0 checking if cc static flag -static works... +2026-Feb-04 14:31:29.908461 yes +2026-Feb-04 14:31:30.035482 #19 235.2 checking if cc supports -c -o file.o... yes +2026-Feb-04 14:31:30.035482 #19 235.2 checking whether the cc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes +2026-Feb-04 14:31:30.035482 #19 235.3 checking whether -lc should be explicitly linked in... no +2026-Feb-04 14:31:30.221238 #19 235.3 checking dynamic linker characteristics... GNU/Linux ld.so +2026-Feb-04 14:31:30.221238 #19 235.3 checking how to hardcode library paths into programs... immediate +2026-Feb-04 14:31:30.221238 #19 235.3 checking whether stripping libraries is possible... yes +2026-Feb-04 14:31:30.221238 #19 235.4 checking if libtool supports shared libraries... yes +2026-Feb-04 14:31:30.221238 #19 235.4 checking whether to build shared libraries... yes +2026-Feb-04 14:31:30.221238 #19 235.4 checking whether to build static libraries... no +2026-Feb-04 14:31:30.439805 #19 235.7 +2026-Feb-04 14:31:30.439805 #19 235.7 creating libtool +2026-Feb-04 14:31:30.596145 #19 235.8 appending configuration tag "CXX" to libtool +2026-Feb-04 14:31:30.596145 #19 235.9 configure: patching config.h.in +2026-Feb-04 14:31:30.778075 #19 235.9 configure: creating ./config.status +2026-Feb-04 14:31:30.778075 #19 236.0 config.status: creating config.h +2026-Feb-04 14:31:30.778075 #19 236.1 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/bcmath.c -o bcmath.lo -MMD -MF bcmath.dep -MT bcmath.lo +2026-Feb-04 14:31:30.996601 #19 236.3 mkdir .libs +2026-Feb-04 14:31:31.152245 #19 236.3 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/bcmath.c -MMD -MF bcmath.dep -MT bcmath.lo -fPIC -DPIC -o .libs/bcmath.o +2026-Feb-04 14:31:31.490243 #19 236.8 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/add.c -o libbcmath/src/add.lo -MMD -MF libbcmath/src/add.dep -MT libbcmath/src/add.lo +2026-Feb-04 14:31:31.693579 #19 237.0 mkdir libbcmath/src/.libs +2026-Feb-04 14:31:31.850168 #19 237.0 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/add.c -MMD -MF libbcmath/src/add.dep -MT libbcmath/src/add.lo -fPIC -DPIC -o libbcmath/src/.libs/add.o +2026-Feb-04 14:31:31.932783 #19 237.2 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/div.c -o libbcmath/src/div.lo -MMD -MF libbcmath/src/div.dep -MT libbcmath/src/div.lo +2026-Feb-04 14:31:32.151323 #19 237.4 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/div.c -MMD -MF libbcmath/src/div.dep -MT libbcmath/src/div.lo -fPIC -DPIC -o libbcmath/src/.libs/div.o +2026-Feb-04 14:31:32.458640 #19 237.7 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/init.c -o libbcmath/src/init.lo -MMD -MF libbcmath/src/init.dep -MT libbcmath/src/init.lo +2026-Feb-04 14:31:32.732827 #19 238.0 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/init.c -MMD -MF libbcmath/src/init.dep -MT libbcmath/src/init.lo -fPIC -DPIC -o libbcmath/src/.libs/init.o +2026-Feb-04 14:31:32.972640 #19 238.3 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/neg.c -o libbcmath/src/neg.lo -MMD -MF libbcmath/src/neg.dep -MT libbcmath/src/neg.lo +2026-Feb-04 14:31:33.191018 #19 238.5 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/neg.c -MMD -MF libbcmath/src/neg.dep -MT libbcmath/src/neg.lo -fPIC -DPIC -o libbcmath/src/.libs/neg.o +2026-Feb-04 14:31:33.453373 #19 238.7 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/raisemod.c -o libbcmath/src/raisemod.lo -MMD -MF libbcmath/src/raisemod.dep -MT libbcmath/src/raisemod.lo +2026-Feb-04 14:31:33.689952 #19 239.0 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/raisemod.c -MMD -MF libbcmath/src/raisemod.dep -MT libbcmath/src/raisemod.lo -fPIC -DPIC -o libbcmath/src/.libs/raisemod.o +2026-Feb-04 14:31:33.921113 #19 239.2 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/sub.c -o libbcmath/src/sub.lo -MMD -MF libbcmath/src/sub.dep -MT libbcmath/src/sub.lo +2026-Feb-04 14:31:34.137253 #19 239.4 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/sub.c -MMD -MF libbcmath/src/sub.dep -MT libbcmath/src/sub.lo -fPIC -DPIC -o libbcmath/src/.libs/sub.o +2026-Feb-04 14:31:34.348131 #19 239.6 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/compare.c -o libbcmath/src/compare.lo -MMD -MF libbcmath/src/compare.dep -MT libbcmath/src/compare.lo +2026-Feb-04 14:31:34.564345 #19 239.8 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/compare.c -MMD -MF libbcmath/src/compare.dep -MT libbcmath/src/compare.lo -fPIC -DPIC -o libbcmath/src/.libs/compare.o +2026-Feb-04 14:31:34.790780 #19 240.1 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/divmod.c -o libbcmath/src/divmod.lo -MMD -MF libbcmath/src/divmod.dep -MT libbcmath/src/divmod.lo +2026-Feb-04 14:31:34.992594 #19 240.3 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/divmod.c -MMD -MF libbcmath/src/divmod.dep -MT libbcmath/src/divmod.lo -fPIC -DPIC -o libbcmath/src/.libs/divmod.o +2026-Feb-04 14:31:35.205153 #19 240.5 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/int2num.c -o libbcmath/src/int2num.lo -MMD -MF libbcmath/src/int2num.dep -MT libbcmath/src/int2num.lo +2026-Feb-04 14:31:35.443509 #19 240.7 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/int2num.c -MMD -MF libbcmath/src/int2num.dep -MT libbcmath/src/int2num.lo -fPIC -DPIC -o libbcmath/src/.libs/int2num.o +2026-Feb-04 14:31:35.658006 #19 240.9 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/num2long.c -o libbcmath/src/num2long.lo -MMD -MF libbcmath/src/num2long.dep -MT libbcmath/src/num2long.lo +2026-Feb-04 14:31:35.863121 #19 241.1 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/num2long.c -MMD -MF libbcmath/src/num2long.dep -MT libbcmath/src/num2long.lo -fPIC -DPIC -o libbcmath/src/.libs/num2long.o +2026-Feb-04 14:31:36.041043 #19 241.3 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/output.c -o libbcmath/src/output.lo -MMD -MF libbcmath/src/output.dep -MT libbcmath/src/output.lo +2026-Feb-04 14:31:36.235996 #19 241.5 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/output.c -MMD -MF libbcmath/src/output.dep -MT libbcmath/src/output.lo -fPIC -DPIC -o libbcmath/src/.libs/output.o +2026-Feb-04 14:31:36.504817 #19 241.8 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/recmul.c -o libbcmath/src/recmul.lo -MMD -MF libbcmath/src/recmul.dep -MT libbcmath/src/recmul.lo +2026-Feb-04 14:31:36.714848 #19 242.0 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/recmul.c -MMD -MF libbcmath/src/recmul.dep -MT libbcmath/src/recmul.lo -fPIC -DPIC -o libbcmath/src/.libs/recmul.o +2026-Feb-04 14:31:37.028729 #19 242.3 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/sqrt.c -o libbcmath/src/sqrt.lo -MMD -MF libbcmath/src/sqrt.dep -MT libbcmath/src/sqrt.lo +2026-Feb-04 14:31:37.256452 #19 242.5 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/sqrt.c -MMD -MF libbcmath/src/sqrt.dep -MT libbcmath/src/sqrt.lo -fPIC -DPIC -o libbcmath/src/.libs/sqrt.o +2026-Feb-04 14:31:37.499087 #19 242.8 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/zero.c -o libbcmath/src/zero.lo -MMD -MF libbcmath/src/zero.dep -MT libbcmath/src/zero.lo +2026-Feb-04 14:31:37.715807 #19 243.0 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/zero.c -MMD -MF libbcmath/src/zero.dep -MT libbcmath/src/zero.lo -fPIC -DPIC -o libbcmath/src/.libs/zero.o +2026-Feb-04 14:31:37.935966 #19 243.2 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/debug.c -o libbcmath/src/debug.lo -MMD -MF libbcmath/src/debug.dep -MT libbcmath/src/debug.lo +2026-Feb-04 14:31:38.170585 #19 243.5 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/debug.c -MMD -MF libbcmath/src/debug.dep -MT libbcmath/src/debug.lo -fPIC -DPIC -o libbcmath/src/.libs/debug.o +2026-Feb-04 14:31:38.387741 #19 243.7 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/doaddsub.c -o libbcmath/src/doaddsub.lo -MMD -MF libbcmath/src/doaddsub.dep -MT libbcmath/src/doaddsub.lo +2026-Feb-04 14:31:38.602402 #19 243.9 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/doaddsub.c -MMD -MF libbcmath/src/doaddsub.dep -MT libbcmath/src/doaddsub.lo -fPIC -DPIC -o libbcmath/src/.libs/doaddsub.o +2026-Feb-04 14:31:38.894710 #19 244.2 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/nearzero.c -o libbcmath/src/nearzero.lo -MMD -MF libbcmath/src/nearzero.dep -MT libbcmath/src/nearzero.lo +2026-Feb-04 14:31:39.094001 #19 244.4 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/nearzero.c -MMD -MF libbcmath/src/nearzero.dep -MT libbcmath/src/nearzero.lo -fPIC -DPIC -o libbcmath/src/.libs/nearzero.o +2026-Feb-04 14:31:39.328339 #19 244.6 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/num2str.c -o libbcmath/src/num2str.lo -MMD -MF libbcmath/src/num2str.dep -MT libbcmath/src/num2str.lo +2026-Feb-04 14:31:39.529350 #19 244.8 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/num2str.c -MMD -MF libbcmath/src/num2str.dep -MT libbcmath/src/num2str.lo -fPIC -DPIC -o libbcmath/src/.libs/num2str.o +2026-Feb-04 14:31:39.847512 #19 245.1 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/raise.c -o libbcmath/src/raise.lo -MMD -MF libbcmath/src/raise.dep -MT libbcmath/src/raise.lo +2026-Feb-04 14:31:40.053433 #19 245.3 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/raise.c -MMD -MF libbcmath/src/raise.dep -MT libbcmath/src/raise.lo -fPIC -DPIC -o libbcmath/src/.libs/raise.o +2026-Feb-04 14:31:40.322835 #19 245.6 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/rmzero.c -o libbcmath/src/rmzero.lo -MMD -MF libbcmath/src/rmzero.dep -MT libbcmath/src/rmzero.lo +2026-Feb-04 14:31:40.562871 #19 245.8 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/rmzero.c -MMD -MF libbcmath/src/rmzero.dep -MT libbcmath/src/rmzero.lo -fPIC -DPIC -o libbcmath/src/.libs/rmzero.o +2026-Feb-04 14:31:40.786332 #19 246.1 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/str2num.c -o libbcmath/src/str2num.lo -MMD -MF libbcmath/src/str2num.dep -MT libbcmath/src/str2num.lo +2026-Feb-04 14:31:40.992356 #19 246.3 cc -I. -I/usr/src/php/ext/bcmath -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/src/php/ext/bcmath/libbcmath/src -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/bcmath/libbcmath/src/str2num.c -MMD -MF libbcmath/src/str2num.dep -MT libbcmath/src/str2num.lo -fPIC -DPIC -o libbcmath/src/.libs/str2num.o +2026-Feb-04 14:31:41.256452 #19 246.5 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=link cc -shared -I/usr/src/php/ext/bcmath/include -I/usr/src/php/ext/bcmath/main -I/usr/src/php/ext/bcmath -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Wl,-O1 -pie -o bcmath.la -export-dynamic -avoid-version -prefer-pic -module -rpath /usr/src/php/ext/bcmath/modules bcmath.lo libbcmath/src/add.lo libbcmath/src/div.lo libbcmath/src/init.lo libbcmath/src/neg.lo libbcmath/src/raisemod.lo libbcmath/src/sub.lo libbcmath/src/compare.lo libbcmath/src/divmod.lo libbcmath/src/int2num.lo libbcmath/src/num2long.lo libbcmath/src/output.lo libbcmath/src/recmul.lo libbcmath/src/sqrt.lo libbcmath/src/zero.lo libbcmath/src/debug.lo libbcmath/src/doaddsub.lo libbcmath/src/nearzero.lo libbcmath/src/num2str.lo libbcmath/src/raise.lo libbcmath/src/rmzero.lo libbcmath/src/str2num.lo +2026-Feb-04 14:31:41.644926 #19 246.9 cc -shared .libs/bcmath.o libbcmath/src/.libs/add.o libbcmath/src/.libs/div.o libbcmath/src/.libs/init.o libbcmath/src/.libs/neg.o libbcmath/src/.libs/raisemod.o libbcmath/src/.libs/sub.o libbcmath/src/.libs/compare.o libbcmath/src/.libs/divmod.o libbcmath/src/.libs/int2num.o libbcmath/src/.libs/num2long.o libbcmath/src/.libs/output.o libbcmath/src/.libs/recmul.o libbcmath/src/.libs/sqrt.o libbcmath/src/.libs/zero.o libbcmath/src/.libs/debug.o libbcmath/src/.libs/doaddsub.o libbcmath/src/.libs/nearzero.o libbcmath/src/.libs/num2str.o libbcmath/src/.libs/raise.o libbcmath/src/.libs/rmzero.o libbcmath/src/.libs/str2num.o -Wl,-O1 -Wl,-soname -Wl,bcmath.so -o .libs/bcmath.so +2026-Feb-04 14:31:41.777054 #19 247.0 creating bcmath.la +2026-Feb-04 14:31:41.777054 #19 247.0 (cd .libs && rm -f bcmath.la && ln -s ../bcmath.la bcmath.la) +2026-Feb-04 14:31:41.777054 #19 247.0 /bin/bash /usr/src/php/ext/bcmath/libtool --tag=CC --mode=install cp ./bcmath.la /usr/src/php/ext/bcmath/modules +2026-Feb-04 14:31:41.777054 #19 247.1 cp ./.libs/bcmath.so /usr/src/php/ext/bcmath/modules/bcmath.so +2026-Feb-04 14:31:41.933488 #19 247.1 cp ./.libs/bcmath.lai /usr/src/php/ext/bcmath/modules/bcmath.la +2026-Feb-04 14:31:41.933488 #19 247.1 PATH="$PATH:/sbin" ldconfig -n /usr/src/php/ext/bcmath/modules +2026-Feb-04 14:31:41.933488 #19 247.1 ---------------------------------------------------------------------- +2026-Feb-04 14:31:41.933488 #19 247.1 Libraries have been installed in: +2026-Feb-04 14:31:41.933488 #19 247.1 /usr/src/php/ext/bcmath/modules +2026-Feb-04 14:31:41.933488 #19 247.1 +2026-Feb-04 14:31:41.933488 #19 247.1 If you ever happen to want to link against installed libraries +2026-Feb-04 14:31:41.933488 #19 247.1 in a given directory, LIBDIR, you must either use libtool, and +2026-Feb-04 14:31:41.933488 #19 247.1 specify the full pathname of the library, or use the `-LLIBDIR' +2026-Feb-04 14:31:41.933488 #19 247.1 flag during linking and do at least one of the following: +2026-Feb-04 14:31:41.933488 #19 247.1 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable +2026-Feb-04 14:31:41.933488 #19 247.1 during execution +2026-Feb-04 14:31:41.933488 #19 247.1 - add LIBDIR to the `LD_RUN_PATH' environment variable +2026-Feb-04 14:31:41.933488 #19 247.1 during linking +2026-Feb-04 14:31:41.933488 #19 247.1 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag +2026-Feb-04 14:31:41.933488 #19 247.1 - have your system administrator add LIBDIR to `/etc/ld.so.conf' +2026-Feb-04 14:31:41.933488 #19 247.1 +2026-Feb-04 14:31:41.933488 #19 247.1 See any operating system documentation about shared libraries for +2026-Feb-04 14:31:41.933488 #19 247.1 more information, such as the ld(1) and ld.so(8) manual pages. +2026-Feb-04 14:31:41.933488 #19 247.1 ---------------------------------------------------------------------- +2026-Feb-04 14:31:41.933488 #19 247.1 +2026-Feb-04 14:31:41.933488 #19 247.1 Build complete. +2026-Feb-04 14:31:41.933488 #19 247.1 Don't forget to run 'make test'. +2026-Feb-04 14:31:41.933488 #19 247.1 +2026-Feb-04 14:31:41.933488 #19 247.1 + strip --strip-all modules/bcmath.so +2026-Feb-04 14:31:41.933488 #19 247.2 Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ +2026-Feb-04 14:31:42.145681 #19 247.4 find . -name \*.gcno -o -name \*.gcda | xargs rm -f +2026-Feb-04 14:31:42.394741 #19 247.4 find . -name \*.lo -o -name \*.o -o -name \*.dep | xargs rm -f +2026-Feb-04 14:31:42.394741 #19 247.4 find . -name \*.la -o -name \*.a | xargs rm -f +2026-Feb-04 14:31:42.394741 #19 247.4 find . -name \*.so | xargs rm -f +2026-Feb-04 14:31:42.394741 #19 247.5 find . -name .libs -a -type d|xargs rm -rf +2026-Feb-04 14:31:42.394741 #19 247.5 rm -f libphp.la modules/* libs/* +2026-Feb-04 14:31:42.394741 #19 247.5 rm -f ext/opcache/jit/zend_jit_x86.c +2026-Feb-04 14:31:42.394741 #19 247.5 rm -f ext/opcache/jit/zend_jit_arm64.c +2026-Feb-04 14:31:42.394741 #19 247.5 rm -f ext/opcache/minilua +2026-Feb-04 14:31:42.394741 #19 247.5 Configuring for: +2026-Feb-04 14:31:42.394741 #19 247.5 PHP Api Version: 20220829 +2026-Feb-04 14:31:42.394741 #19 247.5 Zend Module Api No: 20220829 +2026-Feb-04 14:31:42.394741 #19 247.5 Zend Extension Api No: 420220829 +2026-Feb-04 14:31:43.508649 #19 248.8 checking for grep that handles long lines and -e... +2026-Feb-04 14:31:43.632809 /usr/bin/grep +2026-Feb-04 14:31:43.632809 #19 248.8 checking for egrep... /usr/bin/grep -E +2026-Feb-04 14:31:43.632809 #19 248.8 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:31:43.632809 #19 248.9 checking for pkg-config... /usr/bin/pkg-config +2026-Feb-04 14:31:43.632809 #19 248.9 checking pkg-config is at least version 0.9.0... yes +2026-Feb-04 14:31:43.632809 #19 248.9 checking for cc... cc +2026-Feb-04 14:31:43.632809 #19 248.9 checking whether the C compiler works... +2026-Feb-04 14:31:43.741235 yes +2026-Feb-04 14:31:43.741235 #19 249.0 checking for C compiler default output file name... a.out +2026-Feb-04 14:31:43.881489 #19 249.0 checking for suffix of executables... +2026-Feb-04 14:31:43.881489 #19 249.1 checking whether we are cross compiling... no +2026-Feb-04 14:31:43.994787 #19 249.2 checking for suffix of object files... o +2026-Feb-04 14:31:43.994787 #19 249.2 checking whether the compiler supports GNU C... yes +2026-Feb-04 14:31:43.994787 #19 249.2 checking whether cc accepts -g... yes +2026-Feb-04 14:31:44.135030 #19 249.3 checking for cc option to enable C11 features... none needed +2026-Feb-04 14:31:44.135030 #19 249.4 checking how to run the C preprocessor... cc -E +2026-Feb-04 14:31:44.290684 #19 249.5 checking for egrep -e... (cached) /usr/bin/grep -E +2026-Feb-04 14:31:44.290684 #19 249.5 checking for icc... no +2026-Feb-04 14:31:44.290684 #19 249.5 checking for suncc... no +2026-Feb-04 14:31:44.290684 #19 249.5 checking for system library directory... lib +2026-Feb-04 14:31:44.290684 #19 249.5 checking if compiler supports -Wl,-rpath,... yes +2026-Feb-04 14:31:44.394808 #19 249.6 checking build system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:44.394808 #19 249.6 checking host system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:44.394808 #19 249.6 checking target system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:44.394808 #19 249.7 checking for PHP prefix... /usr/local +2026-Feb-04 14:31:44.499485 #19 249.7 checking for PHP includes... -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib +2026-Feb-04 14:31:44.499485 #19 249.7 checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20220829 +2026-Feb-04 14:31:44.499485 #19 249.7 checking for PHP installed headers prefix... /usr/local/include/php +2026-Feb-04 14:31:44.499485 #19 249.7 checking if debug is enabled... no +2026-Feb-04 14:31:44.499485 #19 249.7 checking if zts is enabled... no +2026-Feb-04 14:31:44.499485 #19 249.7 checking for gawk... no +2026-Feb-04 14:31:44.499485 #19 249.7 checking for nawk... nawk +2026-Feb-04 14:31:44.499485 #19 249.7 checking if nawk is broken... no +2026-Feb-04 14:31:44.499485 #19 249.7 checking whether to enable EXIF (metadata from images) support... yes, shared +2026-Feb-04 14:31:44.499485 #19 249.8 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:31:44.499485 #19 249.8 checking for ld used by cc... /usr/bin/ld +2026-Feb-04 14:31:44.499485 #19 249.8 checking if the linker (/usr/bin/ld) is GNU ld... yes +2026-Feb-04 14:31:44.499485 #19 249.8 checking for /usr/bin/ld option to reload object files... -r +2026-Feb-04 14:31:44.499485 #19 249.8 checking for BSD-compatible nm... /usr/bin/nm -B +2026-Feb-04 14:31:44.628350 #19 249.8 checking whether ln -s works... yes +2026-Feb-04 14:31:44.628350 #19 249.8 checking how to recognize dependent libraries... pass_all +2026-Feb-04 14:31:44.628350 #19 249.8 checking for stdio.h... yes +2026-Feb-04 14:31:44.628350 #19 249.8 checking for stdlib.h... yes +2026-Feb-04 14:31:44.763960 #19 249.9 checking for string.h... yes +2026-Feb-04 14:31:44.763960 #19 249.9 checking for inttypes.h... yes +2026-Feb-04 14:31:44.763960 #19 250.0 checking for stdint.h... yes +2026-Feb-04 14:31:44.763960 #19 250.0 checking for strings.h... +2026-Feb-04 14:31:44.865320 yes +2026-Feb-04 14:31:44.865320 #19 250.1 checking for sys/stat.h... yes +2026-Feb-04 14:31:44.984361 #19 250.1 checking for sys/types.h... yes +2026-Feb-04 14:31:44.984361 #19 250.2 checking for unistd.h... yes +2026-Feb-04 14:31:45.188707 #19 250.3 checking for dlfcn.h... yes +2026-Feb-04 14:31:45.188707 #19 250.3 checking the maximum length of command line arguments... 1572864 +2026-Feb-04 14:31:45.188707 #19 250.3 checking command to parse /usr/bin/nm -B output from cc object... ok +2026-Feb-04 14:31:45.303075 #19 250.5 checking for objdir... .libs +2026-Feb-04 14:31:45.303075 #19 250.5 checking for ar... ar +2026-Feb-04 14:31:45.303075 #19 250.5 checking for ranlib... ranlib +2026-Feb-04 14:31:45.303075 #19 250.5 checking for strip... strip +2026-Feb-04 14:31:45.303075 #19 250.6 checking if cc supports -fno-rtti -fno-exceptions... +2026-Feb-04 14:31:45.509065 no +2026-Feb-04 14:31:45.509065 #19 250.6 checking for cc option to produce PIC... -fPIC +2026-Feb-04 14:31:45.509065 #19 250.6 checking if cc PIC flag -fPIC works... yes +2026-Feb-04 14:31:45.509065 #19 250.7 checking if cc static flag -static works... yes +2026-Feb-04 14:31:45.509065 #19 250.8 checking if cc supports -c -o file.o... +2026-Feb-04 14:31:45.651527 yes +2026-Feb-04 14:31:45.651527 #19 250.8 checking whether the cc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes +2026-Feb-04 14:31:45.651527 #19 250.9 checking whether -lc should be explicitly linked in... no +2026-Feb-04 14:31:45.836756 #19 250.9 checking dynamic linker characteristics... GNU/Linux ld.so +2026-Feb-04 14:31:45.836756 #19 251.0 checking how to hardcode library paths into programs... immediate +2026-Feb-04 14:31:45.836756 #19 251.0 checking whether stripping libraries is possible... yes +2026-Feb-04 14:31:45.836756 #19 251.0 checking if libtool supports shared libraries... yes +2026-Feb-04 14:31:45.836756 #19 251.0 checking whether to build shared libraries... yes +2026-Feb-04 14:31:45.836756 #19 251.0 checking whether to build static libraries... no +2026-Feb-04 14:31:45.987326 #19 251.3 +2026-Feb-04 14:31:46.157189 #19 251.3 creating libtool +2026-Feb-04 14:31:46.157189 #19 251.3 appending configuration tag "CXX" to libtool +2026-Feb-04 14:31:46.157189 #19 251.4 configure: patching config.h.in +2026-Feb-04 14:31:46.279312 #19 251.4 configure: creating ./config.status +2026-Feb-04 14:31:46.279312 #19 251.6 config.status: creating config.h +2026-Feb-04 14:31:46.496236 #19 251.6 /bin/bash /usr/src/php/ext/exif/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/exif -I/usr/src/php/ext/exif/include -I/usr/src/php/ext/exif/main -I/usr/src/php/ext/exif -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/exif/exif.c -o exif.lo -MMD -MF exif.dep -MT exif.lo +2026-Feb-04 14:31:46.544959 #19 251.8 mkdir .libs +2026-Feb-04 14:31:46.698170 #19 251.8 cc -I. -I/usr/src/php/ext/exif -I/usr/src/php/ext/exif/include -I/usr/src/php/ext/exif/main -I/usr/src/php/ext/exif -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/exif/exif.c -MMD -MF exif.dep -MT exif.lo -fPIC -DPIC -o .libs/exif.o +2026-Feb-04 14:31:48.021141 #19 253.3 /bin/bash /usr/src/php/ext/exif/libtool --tag=CC --mode=link cc -shared -I/usr/src/php/ext/exif/include -I/usr/src/php/ext/exif/main -I/usr/src/php/ext/exif -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Wl,-O1 -pie -o exif.la -export-dynamic -avoid-version -prefer-pic -module -rpath /usr/src/php/ext/exif/modules exif.lo +2026-Feb-04 14:31:48.217268 #19 253.5 cc -shared .libs/exif.o -Wl,-O1 -Wl,-soname -Wl,exif.so -o .libs/exif.so +2026-Feb-04 14:31:48.339311 #19 253.5 creating exif.la +2026-Feb-04 14:31:48.339311 #19 253.5 (cd .libs && rm -f exif.la && ln -s ../exif.la exif.la) +2026-Feb-04 14:31:48.339311 #19 253.6 /bin/bash /usr/src/php/ext/exif/libtool --tag=CC --mode=install cp ./exif.la /usr/src/php/ext/exif/modules +2026-Feb-04 14:31:48.339311 #19 253.6 cp ./.libs/exif.so /usr/src/php/ext/exif/modules/exif.so +2026-Feb-04 14:31:48.508876 #19 253.6 cp ./.libs/exif.lai /usr/src/php/ext/exif/modules/exif.la +2026-Feb-04 14:31:48.508876 #19 253.7 PATH="$PATH:/sbin" ldconfig -n /usr/src/php/ext/exif/modules +2026-Feb-04 14:31:48.508876 #19 253.7 ---------------------------------------------------------------------- +2026-Feb-04 14:31:48.508876 #19 253.7 Libraries have been installed in: +2026-Feb-04 14:31:48.508876 #19 253.7 /usr/src/php/ext/exif/modules +2026-Feb-04 14:31:48.508876 #19 253.7 +2026-Feb-04 14:31:48.508876 #19 253.7 If you ever happen to want to link against installed libraries +2026-Feb-04 14:31:48.508876 #19 253.7 in a given directory, LIBDIR, you must either use libtool, and +2026-Feb-04 14:31:48.508876 #19 253.7 specify the full pathname of the library, or use the `-LLIBDIR' +2026-Feb-04 14:31:48.508876 #19 253.7 flag during linking and do at least one of the following: +2026-Feb-04 14:31:48.508876 #19 253.7 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable +2026-Feb-04 14:31:48.508876 #19 253.7 during execution +2026-Feb-04 14:31:48.508876 #19 253.7 - add LIBDIR to the `LD_RUN_PATH' environment variable +2026-Feb-04 14:31:48.508876 #19 253.7 during linking +2026-Feb-04 14:31:48.508876 #19 253.7 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag +2026-Feb-04 14:31:48.508876 #19 253.7 - have your system administrator add LIBDIR to `/etc/ld.so.conf' +2026-Feb-04 14:31:48.508876 #19 253.7 +2026-Feb-04 14:31:48.508876 #19 253.7 See any operating system documentation about shared libraries for +2026-Feb-04 14:31:48.508876 #19 253.7 more information, such as the ld(1) and ld.so(8) manual pages. +2026-Feb-04 14:31:48.508876 #19 253.7 ---------------------------------------------------------------------- +2026-Feb-04 14:31:48.508876 #19 253.7 +2026-Feb-04 14:31:48.508876 #19 253.7 Build complete. +2026-Feb-04 14:31:48.508876 #19 253.7 Don't forget to run 'make test'. +2026-Feb-04 14:31:48.508876 #19 253.7 +2026-Feb-04 14:31:48.508876 #19 253.7 + strip --strip-all modules/exif.so +2026-Feb-04 14:31:48.508876 #19 253.8 Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ +2026-Feb-04 14:31:48.651283 #19 253.9 find . -name \*.gcno -o -name \*.gcda | xargs rm -f +2026-Feb-04 14:31:48.897256 #19 253.9 find . -name \*.lo -o -name \*.o -o -name \*.dep | xargs rm -f +2026-Feb-04 14:31:48.897256 #19 253.9 find . -name \*.la -o -name \*.a | xargs rm -f +2026-Feb-04 14:31:48.897256 #19 254.0 find . -name \*.so | xargs rm -f +2026-Feb-04 14:31:48.897256 #19 254.0 find . -name .libs -a -type d|xargs rm -rf +2026-Feb-04 14:31:48.897256 #19 254.0 rm -f libphp.la modules/* libs/* +2026-Feb-04 14:31:48.897256 #19 254.0 rm -f ext/opcache/jit/zend_jit_x86.c +2026-Feb-04 14:31:48.897256 #19 254.0 rm -f ext/opcache/jit/zend_jit_arm64.c +2026-Feb-04 14:31:48.897256 #19 254.0 rm -f ext/opcache/minilua +2026-Feb-04 14:31:48.897256 #19 254.0 Configuring for: +2026-Feb-04 14:31:48.897256 #19 254.0 PHP Api Version: 20220829 +2026-Feb-04 14:31:48.897256 #19 254.0 Zend Module Api No: 20220829 +2026-Feb-04 14:31:48.897256 #19 254.0 Zend Extension Api No: 420220829 +2026-Feb-04 14:31:50.120034 #19 255.4 checking for grep that handles long lines and -e... +2026-Feb-04 14:31:50.240951 /usr/bin/grep +2026-Feb-04 14:31:50.240951 #19 255.4 checking for egrep... /usr/bin/grep -E +2026-Feb-04 14:31:50.240951 #19 255.4 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:31:50.240951 #19 255.5 checking for pkg-config... /usr/bin/pkg-config +2026-Feb-04 14:31:50.240951 #19 255.5 checking pkg-config is at least version 0.9.0... yes +2026-Feb-04 14:31:50.240951 #19 255.5 checking for cc... cc +2026-Feb-04 14:31:50.240951 #19 255.5 checking whether the C compiler works... +2026-Feb-04 14:31:50.370016 yes +2026-Feb-04 14:31:50.370016 #19 255.6 checking for C compiler default output file name... a.out +2026-Feb-04 14:31:50.370016 #19 255.6 checking for suffix of executables... +2026-Feb-04 14:31:50.480875 #19 255.7 checking whether we are cross compiling... no +2026-Feb-04 14:31:50.480875 #19 255.7 checking for suffix of object files... o +2026-Feb-04 14:31:50.653267 #19 255.8 checking whether the compiler supports GNU C... yes +2026-Feb-04 14:31:50.653267 #19 255.8 checking whether cc accepts -g... yes +2026-Feb-04 14:31:50.653267 #19 255.8 checking for cc option to enable C11 features... none needed +2026-Feb-04 14:31:50.653267 #19 255.9 checking how to run the C preprocessor... +2026-Feb-04 14:31:50.773130 cc -E +2026-Feb-04 14:31:50.773130 #19 256.1 checking for egrep -e... +2026-Feb-04 14:31:50.878278 (cached) /usr/bin/grep -E +2026-Feb-04 14:31:50.878278 #19 256.1 checking for icc... no +2026-Feb-04 14:31:50.878278 #19 256.1 checking for suncc... no +2026-Feb-04 14:31:50.878278 #19 256.1 checking for system library directory... lib +2026-Feb-04 14:31:50.878278 #19 256.1 checking if compiler supports -Wl,-rpath,... yes +2026-Feb-04 14:31:50.878278 #19 256.2 checking build system type... +2026-Feb-04 14:31:50.984150 x86_64-pc-linux-gnu +2026-Feb-04 14:31:50.984150 #19 256.2 checking host system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:50.984150 #19 256.2 checking target system type... x86_64-pc-linux-gnu +2026-Feb-04 14:31:50.984150 #19 256.2 checking for PHP prefix... /usr/local +2026-Feb-04 14:31:50.984150 #19 256.2 checking for PHP includes... -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib +2026-Feb-04 14:31:50.984150 #19 256.2 checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20220829 +2026-Feb-04 14:31:50.984150 #19 256.2 checking for PHP installed headers prefix... /usr/local/include/php +2026-Feb-04 14:31:50.984150 #19 256.2 checking if debug is enabled... no +2026-Feb-04 14:31:51.158123 #19 256.3 checking if zts is enabled... no +2026-Feb-04 14:31:51.158123 #19 256.3 checking for gawk... no +2026-Feb-04 14:31:51.158123 #19 256.3 checking for nawk... nawk +2026-Feb-04 14:31:51.158123 #19 256.3 checking if nawk is broken... no +2026-Feb-04 14:31:51.158123 #19 256.3 checking whether to enable internationalization support... yes, shared +2026-Feb-04 14:31:51.158123 #19 256.3 checking for icu-uc >= 50.1 icu-io icu-i18n... yes +2026-Feb-04 14:31:51.158123 #19 256.4 checking for g++... +2026-Feb-04 14:31:51.301924 g++ +2026-Feb-04 14:31:51.301924 #19 256.5 checking whether the compiler supports GNU C++... yes +2026-Feb-04 14:31:51.301924 #19 256.5 checking whether g++ accepts -g... yes +2026-Feb-04 14:31:51.452847 #19 256.6 checking for g++ option to enable C++11 features... +2026-Feb-04 14:31:51.474880 none needed +2026-Feb-04 14:31:51.577925 #19 256.8 checking how to run the C++ preprocessor... g++ -E +2026-Feb-04 14:31:51.577925 #19 256.9 checking if intl requires -std=gnu++17... yes +2026-Feb-04 14:31:51.577925 #19 256.9 checking whether g++ supports C++17 features with -std=c++17... +2026-Feb-04 14:31:51.783757 yes +2026-Feb-04 14:31:51.894379 #19 257.1 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:31:51.894379 #19 257.1 checking for ld used by cc... /usr/bin/ld +2026-Feb-04 14:31:51.894379 #19 257.1 checking if the linker (/usr/bin/ld) is GNU ld... yes +2026-Feb-04 14:31:51.894379 #19 257.1 checking for /usr/bin/ld option to reload object files... -r +2026-Feb-04 14:31:51.894379 #19 257.1 checking for BSD-compatible nm... /usr/bin/nm -B +2026-Feb-04 14:31:51.894379 #19 257.1 checking whether ln -s works... yes +2026-Feb-04 14:31:51.894379 #19 257.1 checking how to recognize dependent libraries... pass_all +2026-Feb-04 14:31:51.894379 #19 257.2 checking for stdio.h... +2026-Feb-04 14:31:52.020764 yes +2026-Feb-04 14:31:52.020764 #19 257.2 checking for stdlib.h... yes +2026-Feb-04 14:31:52.020764 #19 257.3 checking for string.h... yes +2026-Feb-04 14:31:52.161207 #19 257.3 checking for inttypes.h... yes +2026-Feb-04 14:31:52.161207 #19 257.4 checking for stdint.h... yes +2026-Feb-04 14:31:52.161207 #19 257.4 checking for strings.h... +2026-Feb-04 14:31:52.304651 yes +2026-Feb-04 14:31:52.304651 #19 257.5 checking for sys/stat.h... yes +2026-Feb-04 14:31:52.304651 #19 257.5 checking for sys/types.h... yes +2026-Feb-04 14:31:52.418872 #19 257.6 checking for unistd.h... yes +2026-Feb-04 14:31:52.418872 #19 257.6 checking for dlfcn.h... yes +2026-Feb-04 14:31:52.533122 #19 257.7 checking how to run the C++ preprocessor... g++ -E +2026-Feb-04 14:31:52.533122 #19 257.8 checking the maximum length of command line arguments... +2026-Feb-04 14:31:52.693023 1572864 +2026-Feb-04 14:31:52.693023 #19 257.8 checking command to parse /usr/bin/nm -B output from cc object... +2026-Feb-04 14:31:52.747398 ok +2026-Feb-04 14:31:52.747398 #19 258.0 checking for objdir... +2026-Feb-04 14:31:52.909689 .libs +2026-Feb-04 14:31:52.909689 #19 258.0 checking for ar... ar +2026-Feb-04 14:31:52.909689 #19 258.0 checking for ranlib... ranlib +2026-Feb-04 14:31:52.909689 #19 258.0 checking for strip... strip +2026-Feb-04 14:31:52.946532 #19 258.2 checking if cc supports -fno-rtti -fno-exceptions... +2026-Feb-04 14:31:53.129712 no +2026-Feb-04 14:31:53.129712 #19 258.2 checking for cc option to produce PIC... -fPIC +2026-Feb-04 14:31:53.129712 #19 258.2 checking if cc PIC flag -fPIC works... yes +2026-Feb-04 14:31:53.129712 #19 258.3 checking if cc static flag -static works... yes +2026-Feb-04 14:31:53.129712 #19 258.4 checking if cc supports -c -o file.o... +2026-Feb-04 14:31:53.274534 yes +2026-Feb-04 14:31:53.274534 #19 258.5 checking whether the cc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes +2026-Feb-04 14:31:53.274534 #19 258.5 checking whether -lc should be explicitly linked in... no +2026-Feb-04 14:31:53.274534 #19 258.6 checking dynamic linker characteristics... +2026-Feb-04 14:31:53.459660 GNU/Linux ld.so +2026-Feb-04 14:31:53.459660 #19 258.6 checking how to hardcode library paths into programs... immediate +2026-Feb-04 14:31:53.459660 #19 258.6 checking whether stripping libraries is possible... yes +2026-Feb-04 14:31:53.459660 #19 258.6 checking if libtool supports shared libraries... yes +2026-Feb-04 14:31:53.459660 #19 258.6 checking whether to build shared libraries... yes +2026-Feb-04 14:31:53.459660 #19 258.6 checking whether to build static libraries... no +2026-Feb-04 14:31:53.684993 #19 259.0 +2026-Feb-04 14:31:53.684993 #19 259.0 creating libtool +2026-Feb-04 14:31:53.870993 #19 259.0 appending configuration tag "CXX" to libtool +2026-Feb-04 14:31:53.870993 #19 259.1 checking for ld used by g++... +2026-Feb-04 14:31:54.044583 /usr/bin/ld -m elf_x86_64 +2026-Feb-04 14:31:54.044583 #19 259.2 checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes +2026-Feb-04 14:31:54.044583 #19 259.2 checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes +2026-Feb-04 14:31:54.044583 #19 259.3 checking for g++ option to produce PIC... +2026-Feb-04 14:31:54.233898 -fPIC +2026-Feb-04 14:31:54.233898 #19 259.3 checking if g++ PIC flag -fPIC works... yes +2026-Feb-04 14:31:54.233898 #19 259.4 checking if g++ static flag -static works... +2026-Feb-04 14:31:54.268211 yes +2026-Feb-04 14:31:54.506109 #19 259.5 checking if g++ supports -c -o file.o... yes +2026-Feb-04 14:31:54.506109 #19 259.6 checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes +2026-Feb-04 14:31:54.506109 #19 259.6 checking dynamic linker characteristics... GNU/Linux ld.so +2026-Feb-04 14:31:54.506109 #19 259.6 (cached) (cached) checking how to hardcode library paths into programs... immediate +2026-Feb-04 14:31:54.916740 #19 260.2 configure: patching config.h.in +2026-Feb-04 14:31:55.077284 #19 260.2 configure: creating ./config.status +2026-Feb-04 14:31:55.099334 #19 260.4 config.status: creating config.h +2026-Feb-04 14:31:55.190692 #19 260.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/php_intl.c -o php_intl.lo -MMD -MF php_intl.dep -MT php_intl.lo +2026-Feb-04 14:31:55.416356 #19 260.7 mkdir .libs +2026-Feb-04 14:31:55.571159 #19 260.7 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/php_intl.c -MMD -MF php_intl.dep -MT php_intl.lo -fPIC -DPIC -o .libs/php_intl.o +2026-Feb-04 14:31:55.751920 #19 261.0 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/intl_error.c -o intl_error.lo -MMD -MF intl_error.dep -MT intl_error.lo +2026-Feb-04 14:31:56.010814 #19 261.3 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/intl_error.c -MMD -MF intl_error.dep -MT intl_error.lo -fPIC -DPIC -o .libs/intl_error.o +2026-Feb-04 14:31:56.434990 #19 261.7 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/intl_convert.c -o intl_convert.lo -MMD -MF intl_convert.dep -MT intl_convert.lo +2026-Feb-04 14:31:56.698686 #19 262.0 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/intl_convert.c -MMD -MF intl_convert.dep -MT intl_convert.lo -fPIC -DPIC -o .libs/intl_convert.o +2026-Feb-04 14:31:56.953028 #19 262.2 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_class.c -o collator/collator_class.lo -MMD -MF collator/collator_class.dep -MT collator/collator_class.lo +2026-Feb-04 14:31:57.187036 #19 262.5 mkdir collator/.libs +2026-Feb-04 14:31:57.342332 #19 262.5 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_class.c -MMD -MF collator/collator_class.dep -MT collator/collator_class.lo -fPIC -DPIC -o collator/.libs/collator_class.o +2026-Feb-04 14:31:57.609121 #19 262.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_sort.c -o collator/collator_sort.lo -MMD -MF collator/collator_sort.dep -MT collator/collator_sort.lo +2026-Feb-04 14:31:57.859948 #19 263.1 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_sort.c -MMD -MF collator/collator_sort.dep -MT collator/collator_sort.lo -fPIC -DPIC -o collator/.libs/collator_sort.o +2026-Feb-04 14:31:58.261675 #19 263.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_convert.c -o collator/collator_convert.lo -MMD -MF collator/collator_convert.dep -MT collator/collator_convert.lo +2026-Feb-04 14:31:58.512117 #19 263.8 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_convert.c -MMD -MF collator/collator_convert.dep -MT collator/collator_convert.lo -fPIC -DPIC -o collator/.libs/collator_convert.o +2026-Feb-04 14:31:58.919515 #19 264.2 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_locale.c -o collator/collator_locale.lo -MMD -MF collator/collator_locale.dep -MT collator/collator_locale.lo +2026-Feb-04 14:31:59.203850 #19 264.5 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_locale.c -MMD -MF collator/collator_locale.dep -MT collator/collator_locale.lo -fPIC -DPIC -o collator/.libs/collator_locale.o +2026-Feb-04 14:31:59.508668 #19 264.8 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_compare.c -o collator/collator_compare.lo -MMD -MF collator/collator_compare.dep -MT collator/collator_compare.lo +2026-Feb-04 14:31:59.839308 #19 265.1 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_compare.c -MMD -MF collator/collator_compare.dep -MT collator/collator_compare.lo -fPIC -DPIC -o collator/.libs/collator_compare.o +2026-Feb-04 14:32:00.117296 #19 265.4 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_attr.c -o collator/collator_attr.lo -MMD -MF collator/collator_attr.dep -MT collator/collator_attr.lo +2026-Feb-04 14:32:00.334963 #19 265.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_attr.c -MMD -MF collator/collator_attr.dep -MT collator/collator_attr.lo -fPIC -DPIC -o collator/.libs/collator_attr.o +2026-Feb-04 14:32:00.600382 #19 265.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_create.c -o collator/collator_create.lo -MMD -MF collator/collator_create.dep -MT collator/collator_create.lo +2026-Feb-04 14:32:00.836489 #19 266.1 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_create.c -MMD -MF collator/collator_create.dep -MT collator/collator_create.lo -fPIC -DPIC -o collator/.libs/collator_create.o +2026-Feb-04 14:32:01.129856 #19 266.4 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_is_numeric.c -o collator/collator_is_numeric.lo -MMD -MF collator/collator_is_numeric.dep -MT collator/collator_is_numeric.lo +2026-Feb-04 14:32:01.361908 #19 266.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_is_numeric.c -MMD -MF collator/collator_is_numeric.dep -MT collator/collator_is_numeric.lo -fPIC -DPIC -o collator/.libs/collator_is_numeric.o +2026-Feb-04 14:32:01.794872 #19 267.1 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_error.c -o collator/collator_error.lo -MMD -MF collator/collator_error.dep -MT collator/collator_error.lo +2026-Feb-04 14:32:02.028349 #19 267.3 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/collator/collator_error.c -MMD -MF collator/collator_error.dep -MT collator/collator_error.lo -fPIC -DPIC -o collator/.libs/collator_error.o +2026-Feb-04 14:32:02.344288 #19 267.6 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/common/common_error.c -o common/common_error.lo -MMD -MF common/common_error.dep -MT common/common_error.lo +2026-Feb-04 14:32:02.610590 #19 267.9 mkdir common/.libs +2026-Feb-04 14:32:02.767878 #19 267.9 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/common/common_error.c -MMD -MF common/common_error.dep -MT common/common_error.lo -fPIC -DPIC -o common/.libs/common_error.o +2026-Feb-04 14:32:02.913189 #19 268.2 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/converter/converter.c -o converter/converter.lo -MMD -MF converter/converter.dep -MT converter/converter.lo +2026-Feb-04 14:32:03.135491 #19 268.4 mkdir converter/.libs +2026-Feb-04 14:32:03.291486 #19 268.4 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/converter/converter.c -MMD -MF converter/converter.dep -MT converter/converter.lo -fPIC -DPIC -o converter/.libs/converter.o +2026-Feb-04 14:32:03.944726 #19 269.2 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_main.c -o formatter/formatter_main.lo -MMD -MF formatter/formatter_main.dep -MT formatter/formatter_main.lo +2026-Feb-04 14:32:04.257108 #19 269.5 mkdir formatter/.libs +2026-Feb-04 14:32:04.432765 #19 269.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_main.c -MMD -MF formatter/formatter_main.dep -MT formatter/formatter_main.lo -fPIC -DPIC -o formatter/.libs/formatter_main.o +2026-Feb-04 14:32:04.583037 #19 269.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_class.c -o formatter/formatter_class.lo -MMD -MF formatter/formatter_class.dep -MT formatter/formatter_class.lo +2026-Feb-04 14:32:04.800540 #19 270.1 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_class.c -MMD -MF formatter/formatter_class.dep -MT formatter/formatter_class.lo -fPIC -DPIC -o formatter/.libs/formatter_class.o +2026-Feb-04 14:32:05.454535 #19 270.7 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_attr.c -o formatter/formatter_attr.lo -MMD -MF formatter/formatter_attr.dep -MT formatter/formatter_attr.lo +2026-Feb-04 14:32:05.676998 #19 271.0 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_attr.c -MMD -MF formatter/formatter_attr.dep -MT formatter/formatter_attr.lo -fPIC -DPIC -o formatter/.libs/formatter_attr.o +2026-Feb-04 14:32:06.117331 #19 271.4 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_data.c -o formatter/formatter_data.lo -MMD -MF formatter/formatter_data.dep -MT formatter/formatter_data.lo +2026-Feb-04 14:32:06.333133 #19 271.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_data.c -MMD -MF formatter/formatter_data.dep -MT formatter/formatter_data.lo -fPIC -DPIC -o formatter/.libs/formatter_data.o +2026-Feb-04 14:32:06.602621 #19 271.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_format.c -o formatter/formatter_format.lo -MMD -MF formatter/formatter_format.dep -MT formatter/formatter_format.lo +2026-Feb-04 14:32:06.828051 #19 272.1 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_format.c -MMD -MF formatter/formatter_format.dep -MT formatter/formatter_format.lo -fPIC -DPIC -o formatter/.libs/formatter_format.o +2026-Feb-04 14:32:07.117273 #19 272.4 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_parse.c -o formatter/formatter_parse.lo -MMD -MF formatter/formatter_parse.dep -MT formatter/formatter_parse.lo +2026-Feb-04 14:32:07.338572 #19 272.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/formatter/formatter_parse.c -MMD -MF formatter/formatter_parse.dep -MT formatter/formatter_parse.lo -fPIC -DPIC -o formatter/.libs/formatter_parse.o +2026-Feb-04 14:32:07.626889 #19 272.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/normalizer/normalizer_class.c -o normalizer/normalizer_class.lo -MMD -MF normalizer/normalizer_class.dep -MT normalizer/normalizer_class.lo +2026-Feb-04 14:32:07.910388 #19 273.2 mkdir normalizer/.libs +2026-Feb-04 14:32:08.066277 #19 273.2 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/normalizer/normalizer_class.c -MMD -MF normalizer/normalizer_class.dep -MT normalizer/normalizer_class.lo -fPIC -DPIC -o normalizer/.libs/normalizer_class.o +2026-Feb-04 14:32:08.219857 #19 273.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/normalizer/normalizer_normalize.c -o normalizer/normalizer_normalize.lo -MMD -MF normalizer/normalizer_normalize.dep -MT normalizer/normalizer_normalize.lo +2026-Feb-04 14:32:08.438056 #19 273.7 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/normalizer/normalizer_normalize.c -MMD -MF normalizer/normalizer_normalize.dep -MT normalizer/normalizer_normalize.lo -fPIC -DPIC -o normalizer/.libs/normalizer_normalize.o +2026-Feb-04 14:32:08.754833 #19 274.0 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/locale/locale.c -o locale/locale.lo -MMD -MF locale/locale.dep -MT locale/locale.lo +2026-Feb-04 14:32:09.020275 #19 274.3 mkdir locale/.libs +2026-Feb-04 14:32:09.174263 #19 274.3 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/locale/locale.c -MMD -MF locale/locale.dep -MT locale/locale.lo -fPIC -DPIC -o locale/.libs/locale.o +2026-Feb-04 14:32:09.237386 #19 274.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/locale/locale_class.c -o locale/locale_class.lo -MMD -MF locale/locale_class.dep -MT locale/locale_class.lo +2026-Feb-04 14:32:09.526214 #19 274.8 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/locale/locale_class.c -MMD -MF locale/locale_class.dep -MT locale/locale_class.lo -fPIC -DPIC -o locale/.libs/locale_class.o +2026-Feb-04 14:32:09.868304 #19 275.1 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/locale/locale_methods.c -o locale/locale_methods.lo -MMD -MF locale/locale_methods.dep -MT locale/locale_methods.lo +2026-Feb-04 14:32:10.210100 #19 275.5 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/locale/locale_methods.c -MMD -MF locale/locale_methods.dep -MT locale/locale_methods.lo -fPIC -DPIC -o locale/.libs/locale_methods.o +2026-Feb-04 14:32:11.242670 #19 276.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat.c -o dateformat/dateformat.lo -MMD -MF dateformat/dateformat.dep -MT dateformat/dateformat.lo +2026-Feb-04 14:32:11.456866 #19 276.7 mkdir dateformat/.libs +2026-Feb-04 14:32:11.612216 #19 276.7 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat.c -MMD -MF dateformat/dateformat.dep -MT dateformat/dateformat.lo -fPIC -DPIC -o dateformat/.libs/dateformat.o +2026-Feb-04 14:32:11.727237 #19 277.0 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_class.c -o dateformat/dateformat_class.lo -MMD -MF dateformat/dateformat_class.dep -MT dateformat/dateformat_class.lo +2026-Feb-04 14:32:11.949652 #19 277.2 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_class.c -MMD -MF dateformat/dateformat_class.dep -MT dateformat/dateformat_class.lo -fPIC -DPIC -o dateformat/.libs/dateformat_class.o +2026-Feb-04 14:32:12.288297 #19 277.6 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_attr.c -o dateformat/dateformat_attr.lo -MMD -MF dateformat/dateformat_attr.dep -MT dateformat/dateformat_attr.lo +2026-Feb-04 14:32:12.507699 #19 277.8 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_attr.c -MMD -MF dateformat/dateformat_attr.dep -MT dateformat/dateformat_attr.lo -fPIC -DPIC -o dateformat/.libs/dateformat_attr.o +2026-Feb-04 14:32:12.799157 #19 278.1 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_data.c -o dateformat/dateformat_data.lo -MMD -MF dateformat/dateformat_data.dep -MT dateformat/dateformat_data.lo +2026-Feb-04 14:32:13.053591 #19 278.3 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_data.c -MMD -MF dateformat/dateformat_data.dep -MT dateformat/dateformat_data.lo -fPIC -DPIC -o dateformat/.libs/dateformat_data.o +2026-Feb-04 14:32:13.284552 #19 278.6 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_format.c -o dateformat/dateformat_format.lo -MMD -MF dateformat/dateformat_format.dep -MT dateformat/dateformat_format.lo +2026-Feb-04 14:32:13.507675 #19 278.8 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_format.c -MMD -MF dateformat/dateformat_format.dep -MT dateformat/dateformat_format.lo -fPIC -DPIC -o dateformat/.libs/dateformat_format.o +2026-Feb-04 14:32:13.850518 #19 279.1 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_parse.c -o dateformat/dateformat_parse.lo -MMD -MF dateformat/dateformat_parse.dep -MT dateformat/dateformat_parse.lo +2026-Feb-04 14:32:14.137746 #19 279.4 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/dateformat/dateformat_parse.c -MMD -MF dateformat/dateformat_parse.dep -MT dateformat/dateformat_parse.lo -fPIC -DPIC -o dateformat/.libs/dateformat_parse.o +2026-Feb-04 14:32:14.469972 #19 279.8 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat.c -o msgformat/msgformat.lo -MMD -MF msgformat/msgformat.dep -MT msgformat/msgformat.lo +2026-Feb-04 14:32:14.736630 #19 280.0 mkdir msgformat/.libs +2026-Feb-04 14:32:14.892088 #19 280.0 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat.c -MMD -MF msgformat/msgformat.dep -MT msgformat/msgformat.lo -fPIC -DPIC -o msgformat/.libs/msgformat.o +2026-Feb-04 14:32:15.030733 #19 280.3 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_attr.c -o msgformat/msgformat_attr.lo -MMD -MF msgformat/msgformat_attr.dep -MT msgformat/msgformat_attr.lo +2026-Feb-04 14:32:15.307326 #19 280.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_attr.c -MMD -MF msgformat/msgformat_attr.dep -MT msgformat/msgformat_attr.lo -fPIC -DPIC -o msgformat/.libs/msgformat_attr.o +2026-Feb-04 14:32:15.615771 #19 280.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_class.c -o msgformat/msgformat_class.lo -MMD -MF msgformat/msgformat_class.dep -MT msgformat/msgformat_class.lo +2026-Feb-04 14:32:15.839156 #19 281.1 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_class.c -MMD -MF msgformat/msgformat_class.dep -MT msgformat/msgformat_class.lo -fPIC -DPIC -o msgformat/.libs/msgformat_class.o +2026-Feb-04 14:32:16.198304 #19 281.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_data.c -o msgformat/msgformat_data.lo -MMD -MF msgformat/msgformat_data.dep -MT msgformat/msgformat_data.lo +2026-Feb-04 14:32:16.423687 #19 281.7 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_data.c -MMD -MF msgformat/msgformat_data.dep -MT msgformat/msgformat_data.lo -fPIC -DPIC -o msgformat/.libs/msgformat_data.o +2026-Feb-04 14:32:16.670630 #19 282.0 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_format.c -o msgformat/msgformat_format.lo -MMD -MF msgformat/msgformat_format.dep -MT msgformat/msgformat_format.lo +2026-Feb-04 14:32:16.915147 #19 282.2 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_format.c -MMD -MF msgformat/msgformat_format.dep -MT msgformat/msgformat_format.lo -fPIC -DPIC -o msgformat/.libs/msgformat_format.o +2026-Feb-04 14:32:17.189197 #19 282.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_parse.c -o msgformat/msgformat_parse.lo -MMD -MF msgformat/msgformat_parse.dep -MT msgformat/msgformat_parse.lo +2026-Feb-04 14:32:17.524969 #19 282.8 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/msgformat/msgformat_parse.c -MMD -MF msgformat/msgformat_parse.dep -MT msgformat/msgformat_parse.lo -fPIC -DPIC -o msgformat/.libs/msgformat_parse.o +2026-Feb-04 14:32:17.800732 #19 283.1 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/grapheme/grapheme_string.c -o grapheme/grapheme_string.lo -MMD -MF grapheme/grapheme_string.dep -MT grapheme/grapheme_string.lo +2026-Feb-04 14:32:18.287360 #19 283.6 mkdir grapheme/.libs +2026-Feb-04 14:32:18.439186 #19 283.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/grapheme/grapheme_string.c -MMD -MF grapheme/grapheme_string.dep -MT grapheme/grapheme_string.lo -fPIC -DPIC -o grapheme/.libs/grapheme_string.o +2026-Feb-04 14:32:18.954173 #19 284.2 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/grapheme/grapheme_util.c -o grapheme/grapheme_util.lo -MMD -MF grapheme/grapheme_util.dep -MT grapheme/grapheme_util.lo +2026-Feb-04 14:32:19.280833 #19 284.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/grapheme/grapheme_util.c -MMD -MF grapheme/grapheme_util.dep -MT grapheme/grapheme_util.lo -fPIC -DPIC -o grapheme/.libs/grapheme_util.o +2026-Feb-04 14:32:19.648007 #19 284.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/resourcebundle/resourcebundle.c -o resourcebundle/resourcebundle.lo -MMD -MF resourcebundle/resourcebundle.dep -MT resourcebundle/resourcebundle.lo +2026-Feb-04 14:32:19.902369 #19 285.2 mkdir resourcebundle/.libs +2026-Feb-04 14:32:20.057157 #19 285.2 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/resourcebundle/resourcebundle.c -MMD -MF resourcebundle/resourcebundle.dep -MT resourcebundle/resourcebundle.lo -fPIC -DPIC -o resourcebundle/.libs/resourcebundle.o +2026-Feb-04 14:32:20.183292 #19 285.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/resourcebundle/resourcebundle_class.c -o resourcebundle/resourcebundle_class.lo -MMD -MF resourcebundle/resourcebundle_class.dep -MT resourcebundle/resourcebundle_class.lo +2026-Feb-04 14:32:20.575212 #19 285.9 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/resourcebundle/resourcebundle_class.c -MMD -MF resourcebundle/resourcebundle_class.dep -MT resourcebundle/resourcebundle_class.lo -fPIC -DPIC -o resourcebundle/.libs/resourcebundle_class.o +2026-Feb-04 14:32:20.965389 #19 286.2 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/resourcebundle/resourcebundle_iterator.c -o resourcebundle/resourcebundle_iterator.lo -MMD -MF resourcebundle/resourcebundle_iterator.dep -MT resourcebundle/resourcebundle_iterator.lo +2026-Feb-04 14:32:21.225889 #19 286.5 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/resourcebundle/resourcebundle_iterator.c -MMD -MF resourcebundle/resourcebundle_iterator.dep -MT resourcebundle/resourcebundle_iterator.lo -fPIC -DPIC -o resourcebundle/.libs/resourcebundle_iterator.o +2026-Feb-04 14:32:21.516967 #19 286.8 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/transliterator/transliterator_class.c -o transliterator/transliterator_class.lo -MMD -MF transliterator/transliterator_class.dep -MT transliterator/transliterator_class.lo +2026-Feb-04 14:32:21.729058 #19 287.0 mkdir transliterator/.libs +2026-Feb-04 14:32:21.886841 #19 287.0 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/transliterator/transliterator_class.c -MMD -MF transliterator/transliterator_class.dep -MT transliterator/transliterator_class.lo -fPIC -DPIC -o transliterator/.libs/transliterator_class.o +2026-Feb-04 14:32:22.040985 #19 287.3 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/transliterator/transliterator_methods.c -o transliterator/transliterator_methods.lo -MMD -MF transliterator/transliterator_methods.dep -MT transliterator/transliterator_methods.lo +2026-Feb-04 14:32:22.270985 #19 287.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/transliterator/transliterator_methods.c -MMD -MF transliterator/transliterator_methods.dep -MT transliterator/transliterator_methods.lo -fPIC -DPIC -o transliterator/.libs/transliterator_methods.o +2026-Feb-04 14:32:22.764072 #19 288.0 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/uchar/uchar.c -o uchar/uchar.lo -MMD -MF uchar/uchar.dep -MT uchar/uchar.lo +2026-Feb-04 14:32:23.003133 #19 288.3 mkdir uchar/.libs +2026-Feb-04 14:32:23.157265 #19 288.3 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/uchar/uchar.c -MMD -MF uchar/uchar.dep -MT uchar/uchar.lo -fPIC -DPIC -o uchar/.libs/uchar.o +2026-Feb-04 14:32:31.020525 #19 296.3 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/idn/idn.c -o idn/idn.lo -MMD -MF idn/idn.dep -MT idn/idn.lo +2026-Feb-04 14:32:31.246295 #19 296.5 mkdir idn/.libs +2026-Feb-04 14:32:31.401988 #19 296.5 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/idn/idn.c -MMD -MF idn/idn.dep -MT idn/idn.lo -fPIC -DPIC -o idn/.libs/idn.o +2026-Feb-04 14:32:31.558115 #19 296.8 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/spoofchecker/spoofchecker_class.c -o spoofchecker/spoofchecker_class.lo -MMD -MF spoofchecker/spoofchecker_class.dep -MT spoofchecker/spoofchecker_class.lo +2026-Feb-04 14:32:31.797482 #19 297.1 mkdir spoofchecker/.libs +2026-Feb-04 14:32:31.952319 #19 297.1 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/spoofchecker/spoofchecker_class.c -MMD -MF spoofchecker/spoofchecker_class.dep -MT spoofchecker/spoofchecker_class.lo -fPIC -DPIC -o spoofchecker/.libs/spoofchecker_class.o +2026-Feb-04 14:32:32.123990 #19 297.4 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/spoofchecker/spoofchecker_create.c -o spoofchecker/spoofchecker_create.lo -MMD -MF spoofchecker/spoofchecker_create.dep -MT spoofchecker/spoofchecker_create.lo +2026-Feb-04 14:32:32.359601 #19 297.6 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/spoofchecker/spoofchecker_create.c -MMD -MF spoofchecker/spoofchecker_create.dep -MT spoofchecker/spoofchecker_create.lo -fPIC -DPIC -o spoofchecker/.libs/spoofchecker_create.o +2026-Feb-04 14:32:32.646005 #19 297.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/spoofchecker/spoofchecker_main.c -o spoofchecker/spoofchecker_main.lo -MMD -MF spoofchecker/spoofchecker_main.dep -MT spoofchecker/spoofchecker_main.lo +2026-Feb-04 14:32:32.884964 #19 298.2 cc -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/intl/spoofchecker/spoofchecker_main.c -MMD -MF spoofchecker/spoofchecker_main.dep -MT spoofchecker/spoofchecker_main.lo -fPIC -DPIC -o spoofchecker/.libs/spoofchecker_main.o +2026-Feb-04 14:32:33.175890 #19 298.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/intl_convertcpp.cpp -o intl_convertcpp.lo -MMD -MF intl_convertcpp.dep -MT intl_convertcpp.lo +2026-Feb-04 14:32:33.423640 #19 298.7 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/intl_convertcpp.cpp -MMD -MF intl_convertcpp.dep -MT intl_convertcpp.lo -fPIC -DPIC -o .libs/intl_convertcpp.o +2026-Feb-04 14:32:34.277132 #19 299.6 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/common/common_enum.cpp -o common/common_enum.lo -MMD -MF common/common_enum.dep -MT common/common_enum.lo +2026-Feb-04 14:32:34.538684 #19 299.8 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/common/common_enum.cpp -MMD -MF common/common_enum.dep -MT common/common_enum.lo -fPIC -DPIC -o common/.libs/common_enum.o +2026-Feb-04 14:32:35.506148 #19 300.8 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/common/common_date.cpp -o common/common_date.lo -MMD -MF common/common_date.dep -MT common/common_date.lo +2026-Feb-04 14:32:35.851476 #19 301.1 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/common/common_date.cpp -MMD -MF common/common_date.dep -MT common/common_date.lo -fPIC -DPIC -o common/.libs/common_date.o +2026-Feb-04 14:32:36.835707 #19 302.1 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/dateformat_format_object.cpp -o dateformat/dateformat_format_object.lo -MMD -MF dateformat/dateformat_format_object.dep -MT dateformat/dateformat_format_object.lo +2026-Feb-04 14:32:37.062237 #19 302.3 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/dateformat_format_object.cpp -MMD -MF dateformat/dateformat_format_object.dep -MT dateformat/dateformat_format_object.lo -fPIC -DPIC -o dateformat/.libs/dateformat_format_object.o +2026-Feb-04 14:32:38.176029 #19 303.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/dateformat_create.cpp -o dateformat/dateformat_create.lo -MMD -MF dateformat/dateformat_create.dep -MT dateformat/dateformat_create.lo +2026-Feb-04 14:32:38.424169 #19 303.7 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/dateformat_create.cpp -MMD -MF dateformat/dateformat_create.dep -MT dateformat/dateformat_create.lo -fPIC -DPIC -o dateformat/.libs/dateformat_create.o +2026-Feb-04 14:32:39.647081 #19 304.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/dateformat_attrcpp.cpp -o dateformat/dateformat_attrcpp.lo -MMD -MF dateformat/dateformat_attrcpp.dep -MT dateformat/dateformat_attrcpp.lo +2026-Feb-04 14:32:39.874948 #19 305.2 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/dateformat_attrcpp.cpp -MMD -MF dateformat/dateformat_attrcpp.dep -MT dateformat/dateformat_attrcpp.lo -fPIC -DPIC -o dateformat/.libs/dateformat_attrcpp.o +2026-Feb-04 14:32:41.093570 #19 306.4 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/dateformat_helpers.cpp -o dateformat/dateformat_helpers.lo -MMD -MF dateformat/dateformat_helpers.dep -MT dateformat/dateformat_helpers.lo +2026-Feb-04 14:32:41.329394 #19 306.6 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/dateformat_helpers.cpp -MMD -MF dateformat/dateformat_helpers.dep -MT dateformat/dateformat_helpers.lo -fPIC -DPIC -o dateformat/.libs/dateformat_helpers.o +2026-Feb-04 14:32:42.216729 #19 307.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/datepatterngenerator_class.cpp -o dateformat/datepatterngenerator_class.lo -MMD -MF dateformat/datepatterngenerator_class.dep -MT dateformat/datepatterngenerator_class.lo +2026-Feb-04 14:32:42.452053 #19 307.7 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/datepatterngenerator_class.cpp -MMD -MF dateformat/datepatterngenerator_class.dep -MT dateformat/datepatterngenerator_class.lo -fPIC -DPIC -o dateformat/.libs/datepatterngenerator_class.o +2026-Feb-04 14:32:43.490822 #19 308.8 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/datepatterngenerator_methods.cpp -o dateformat/datepatterngenerator_methods.lo -MMD -MF dateformat/datepatterngenerator_methods.dep -MT dateformat/datepatterngenerator_methods.lo +2026-Feb-04 14:32:43.714103 #19 309.0 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/dateformat/datepatterngenerator_methods.cpp -MMD -MF dateformat/datepatterngenerator_methods.dep -MT dateformat/datepatterngenerator_methods.lo -fPIC -DPIC -o dateformat/.libs/datepatterngenerator_methods.o +2026-Feb-04 14:32:44.970785 #19 310.3 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/msgformat/msgformat_helpers.cpp -o msgformat/msgformat_helpers.lo -MMD -MF msgformat/msgformat_helpers.dep -MT msgformat/msgformat_helpers.lo +2026-Feb-04 14:32:45.222533 #19 310.5 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/msgformat/msgformat_helpers.cpp -MMD -MF msgformat/msgformat_helpers.dep -MT msgformat/msgformat_helpers.lo -fPIC -DPIC -o msgformat/.libs/msgformat_helpers.o +2026-Feb-04 14:32:47.022621 #19 312.3 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/timezone/timezone_class.cpp -o timezone/timezone_class.lo -MMD -MF timezone/timezone_class.dep -MT timezone/timezone_class.lo +2026-Feb-04 14:32:47.254540 #19 312.5 mkdir timezone/.libs +2026-Feb-04 14:32:47.408465 #19 312.5 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/timezone/timezone_class.cpp -MMD -MF timezone/timezone_class.dep -MT timezone/timezone_class.lo -fPIC -DPIC -o timezone/.libs/timezone_class.o +2026-Feb-04 14:32:48.392567 #19 313.7 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/timezone/timezone_methods.cpp -o timezone/timezone_methods.lo -MMD -MF timezone/timezone_methods.dep -MT timezone/timezone_methods.lo +2026-Feb-04 14:32:48.630186 #19 313.9 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/timezone/timezone_methods.cpp -MMD -MF timezone/timezone_methods.dep -MT timezone/timezone_methods.lo -fPIC -DPIC -o timezone/.libs/timezone_methods.o +2026-Feb-04 14:32:49.831967 #19 315.1 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/calendar/calendar_class.cpp -o calendar/calendar_class.lo -MMD -MF calendar/calendar_class.dep -MT calendar/calendar_class.lo +2026-Feb-04 14:32:50.148870 #19 315.4 mkdir calendar/.libs +2026-Feb-04 14:32:50.302153 #19 315.4 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/calendar/calendar_class.cpp -MMD -MF calendar/calendar_class.dep -MT calendar/calendar_class.lo -fPIC -DPIC -o calendar/.libs/calendar_class.o +2026-Feb-04 14:32:51.484841 #19 316.8 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/calendar/calendar_methods.cpp -o calendar/calendar_methods.lo -MMD -MF calendar/calendar_methods.dep -MT calendar/calendar_methods.lo +2026-Feb-04 14:32:51.716362 #19 317.0 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/calendar/calendar_methods.cpp -MMD -MF calendar/calendar_methods.dep -MT calendar/calendar_methods.lo -fPIC -DPIC -o calendar/.libs/calendar_methods.o +2026-Feb-04 14:32:53.451199 #19 318.7 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/calendar/gregoriancalendar_methods.cpp -o calendar/gregoriancalendar_methods.lo -MMD -MF calendar/gregoriancalendar_methods.dep -MT calendar/gregoriancalendar_methods.lo +2026-Feb-04 14:32:53.699304 #19 319.0 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/calendar/gregoriancalendar_methods.cpp -MMD -MF calendar/gregoriancalendar_methods.dep -MT calendar/gregoriancalendar_methods.lo -fPIC -DPIC -o calendar/.libs/gregoriancalendar_methods.o +2026-Feb-04 14:32:54.809336 #19 320.1 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/breakiterator_class.cpp -o breakiterator/breakiterator_class.lo -MMD -MF breakiterator/breakiterator_class.dep -MT breakiterator/breakiterator_class.lo +2026-Feb-04 14:32:55.071537 #19 320.4 mkdir breakiterator/.libs +2026-Feb-04 14:32:55.225750 #19 320.4 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/breakiterator_class.cpp -MMD -MF breakiterator/breakiterator_class.dep -MT breakiterator/breakiterator_class.lo -fPIC -DPIC -o breakiterator/.libs/breakiterator_class.o +2026-Feb-04 14:32:56.175127 #19 321.5 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/breakiterator_iterators.cpp -o breakiterator/breakiterator_iterators.lo -MMD -MF breakiterator/breakiterator_iterators.dep -MT breakiterator/breakiterator_iterators.lo +2026-Feb-04 14:32:56.426288 #19 321.7 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/breakiterator_iterators.cpp -MMD -MF breakiterator/breakiterator_iterators.dep -MT breakiterator/breakiterator_iterators.lo -fPIC -DPIC -o breakiterator/.libs/breakiterator_iterators.o +2026-Feb-04 14:32:57.453622 #19 322.7 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/breakiterator_methods.cpp -o breakiterator/breakiterator_methods.lo -MMD -MF breakiterator/breakiterator_methods.dep -MT breakiterator/breakiterator_methods.lo +2026-Feb-04 14:32:57.684080 #19 323.0 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/breakiterator_methods.cpp -MMD -MF breakiterator/breakiterator_methods.dep -MT breakiterator/breakiterator_methods.lo -fPIC -DPIC -o breakiterator/.libs/breakiterator_methods.o +2026-Feb-04 14:32:58.714379 #19 324.0 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp -o breakiterator/rulebasedbreakiterator_methods.lo -MMD -MF breakiterator/rulebasedbreakiterator_methods.dep -MT breakiterator/rulebasedbreakiterator_methods.lo +2026-Feb-04 14:32:58.966248 #19 324.2 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp -MMD -MF breakiterator/rulebasedbreakiterator_methods.dep -MT breakiterator/rulebasedbreakiterator_methods.lo -fPIC -DPIC -o breakiterator/.libs/rulebasedbreakiterator_methods.o +2026-Feb-04 14:33:00.114557 #19 325.4 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/codepointiterator_internal.cpp -o breakiterator/codepointiterator_internal.lo -MMD -MF breakiterator/codepointiterator_internal.dep -MT breakiterator/codepointiterator_internal.lo +2026-Feb-04 14:33:00.422876 #19 325.7 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/codepointiterator_internal.cpp -MMD -MF breakiterator/codepointiterator_internal.dep -MT breakiterator/codepointiterator_internal.lo -fPIC -DPIC -o breakiterator/.libs/codepointiterator_internal.o +2026-Feb-04 14:33:01.522011 #19 326.8 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=compile g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/codepointiterator_methods.cpp -o breakiterator/codepointiterator_methods.lo -MMD -MF breakiterator/codepointiterator_methods.dep -MT breakiterator/codepointiterator_methods.lo +2026-Feb-04 14:33:01.737585 #19 327.0 g++ -I. -I/usr/src/php/ext/intl -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -DU_HIDE_OBSOLETE_UTF_OLD_H=1 -Wno-write-strings -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -std=c++17 -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit -c /usr/src/php/ext/intl/breakiterator/codepointiterator_methods.cpp -MMD -MF breakiterator/codepointiterator_methods.dep -MT breakiterator/codepointiterator_methods.lo -fPIC -DPIC -o breakiterator/.libs/codepointiterator_methods.o +2026-Feb-04 14:33:02.598012 #19 327.9 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=link g++ -shared -I/usr/src/php/ext/intl/include -I/usr/src/php/ext/intl/main -I/usr/src/php/ext/intl -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Wl,-O1 -pie -o intl.la -export-dynamic -avoid-version -prefer-pic -module -rpath /usr/src/php/ext/intl/modules php_intl.lo intl_error.lo intl_convert.lo collator/collator_class.lo collator/collator_sort.lo collator/collator_convert.lo collator/collator_locale.lo collator/collator_compare.lo collator/collator_attr.lo collator/collator_create.lo collator/collator_is_numeric.lo collator/collator_error.lo common/common_error.lo converter/converter.lo formatter/formatter_main.lo formatter/formatter_class.lo formatter/formatter_attr.lo formatter/formatter_data.lo formatter/formatter_format.lo formatter/formatter_parse.lo normalizer/normalizer_class.lo normalizer/normalizer_normalize.lo locale/locale.lo locale/locale_class.lo locale/locale_methods.lo dateformat/dateformat.lo dateformat/dateformat_class.lo dateformat/dateformat_attr.lo dateformat/dateformat_data.lo dateformat/dateformat_format.lo dateformat/dateformat_parse.lo msgformat/msgformat.lo msgformat/msgformat_attr.lo msgformat/msgformat_class.lo msgformat/msgformat_data.lo msgformat/msgformat_format.lo msgformat/msgformat_parse.lo grapheme/grapheme_string.lo grapheme/grapheme_util.lo resourcebundle/resourcebundle.lo resourcebundle/resourcebundle_class.lo resourcebundle/resourcebundle_iterator.lo transliterator/transliterator_class.lo transliterator/transliterator_methods.lo uchar/uchar.lo idn/idn.lo spoofchecker/spoofchecker_class.lo spoofchecker/spoofchecker_create.lo spoofchecker/spoofchecker_main.lo intl_convertcpp.lo common/common_enum.lo common/common_date.lo dateformat/dateformat_format_object.lo dateformat/dateformat_create.lo dateformat/dateformat_attrcpp.lo dateformat/dateformat_helpers.lo dateformat/datepatterngenerator_class.lo dateformat/datepatterngenerator_methods.lo msgformat/msgformat_helpers.lo timezone/timezone_class.lo timezone/timezone_methods.lo calendar/calendar_class.lo calendar/calendar_methods.lo calendar/gregoriancalendar_methods.lo breakiterator/breakiterator_class.lo breakiterator/breakiterator_iterators.lo breakiterator/breakiterator_methods.lo breakiterator/rulebasedbreakiterator_methods.lo breakiterator/codepointiterator_internal.lo breakiterator/codepointiterator_methods.lo -licuio -licui18n -licuuc -licudata +2026-Feb-04 14:33:03.652812 #19 328.9 g++ -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/14/crtbeginS.o .libs/php_intl.o .libs/intl_error.o .libs/intl_convert.o collator/.libs/collator_class.o collator/.libs/collator_sort.o collator/.libs/collator_convert.o collator/.libs/collator_locale.o collator/.libs/collator_compare.o collator/.libs/collator_attr.o collator/.libs/collator_create.o collator/.libs/collator_is_numeric.o collator/.libs/collator_error.o common/.libs/common_error.o converter/.libs/converter.o formatter/.libs/formatter_main.o formatter/.libs/formatter_class.o formatter/.libs/formatter_attr.o formatter/.libs/formatter_data.o formatter/.libs/formatter_format.o formatter/.libs/formatter_parse.o normalizer/.libs/normalizer_class.o normalizer/.libs/normalizer_normalize.o locale/.libs/locale.o locale/.libs/locale_class.o locale/.libs/locale_methods.o dateformat/.libs/dateformat.o dateformat/.libs/dateformat_class.o dateformat/.libs/dateformat_attr.o dateformat/.libs/dateformat_data.o dateformat/.libs/dateformat_format.o dateformat/.libs/dateformat_parse.o msgformat/.libs/msgformat.o msgformat/.libs/msgformat_attr.o msgformat/.libs/msgformat_class.o msgformat/.libs/msgformat_data.o msgformat/.libs/msgformat_format.o msgformat/.libs/msgformat_parse.o grapheme/.libs/grapheme_string.o grapheme/.libs/grapheme_util.o resourcebundle/.libs/resourcebundle.o resourcebundle/.libs/resourcebundle_class.o resourcebundle/.libs/resourcebundle_iterator.o transliterator/.libs/transliterator_class.o transliterator/.libs/transliterator_methods.o uchar/.libs/uchar.o idn/.libs/idn.o spoofchecker/.libs/spoofchecker_class.o spoofchecker/.libs/spoofchecker_create.o spoofchecker/.libs/spoofchecker_main.o .libs/intl_convertcpp.o common/.libs/common_enum.o common/.libs/common_date.o dateformat/.libs/dateformat_format_object.o dateformat/.libs/dateformat_create.o dateformat/.libs/dateformat_attrcpp.o dateformat/.libs/dateformat_helpers.o dateformat/.libs/datepatterngenerator_class.o dateformat/.libs/datepatterngenerator_methods.o msgformat/.libs/msgformat_helpers.o timezone/.libs/timezone_class.o timezone/.libs/timezone_methods.o calendar/.libs/calendar_class.o calendar/.libs/calendar_methods.o calendar/.libs/gregoriancalendar_methods.o breakiterator/.libs/breakiterator_class.o breakiterator/.libs/breakiterator_iterators.o breakiterator/.libs/breakiterator_methods.o breakiterator/.libs/rulebasedbreakiterator_methods.o breakiterator/.libs/codepointiterator_internal.o breakiterator/.libs/codepointiterator_methods.o -licuio -licui18n -licuuc -licudata -L/usr/lib/gcc/x86_64-linux-gnu/14 -L/usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/14/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/14/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/14/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/crtn.o -Wl,-O1 -Wl,-soname -Wl,intl.so -o .libs/intl.so +2026-Feb-04 14:33:03.878335 #19 329.2 creating intl.la +2026-Feb-04 14:33:03.984586 #19 329.2 (cd .libs && rm -f intl.la && ln -s ../intl.la intl.la) +2026-Feb-04 14:33:03.984586 #19 329.2 /bin/bash /usr/src/php/ext/intl/libtool --tag=CXX --mode=install cp ./intl.la /usr/src/php/ext/intl/modules +2026-Feb-04 14:33:03.984586 #19 329.3 cp ./.libs/intl.so /usr/src/php/ext/intl/modules/intl.so +2026-Feb-04 14:33:03.984586 #19 329.3 cp ./.libs/intl.lai /usr/src/php/ext/intl/modules/intl.la +2026-Feb-04 14:33:04.122748 #19 329.3 PATH="$PATH:/sbin" ldconfig -n /usr/src/php/ext/intl/modules +2026-Feb-04 14:33:04.122748 #19 329.3 ---------------------------------------------------------------------- +2026-Feb-04 14:33:04.122748 #19 329.3 Libraries have been installed in: +2026-Feb-04 14:33:04.122748 #19 329.3 /usr/src/php/ext/intl/modules +2026-Feb-04 14:33:04.122748 #19 329.3 +2026-Feb-04 14:33:04.122748 #19 329.3 If you ever happen to want to link against installed libraries +2026-Feb-04 14:33:04.122748 #19 329.3 in a given directory, LIBDIR, you must either use libtool, and +2026-Feb-04 14:33:04.122748 #19 329.3 specify the full pathname of the library, or use the `-LLIBDIR' +2026-Feb-04 14:33:04.122748 #19 329.3 flag during linking and do at least one of the following: +2026-Feb-04 14:33:04.122748 #19 329.3 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable +2026-Feb-04 14:33:04.122748 #19 329.3 during execution +2026-Feb-04 14:33:04.122748 #19 329.3 - add LIBDIR to the `LD_RUN_PATH' environment variable +2026-Feb-04 14:33:04.122748 #19 329.3 during linking +2026-Feb-04 14:33:04.122748 #19 329.3 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag +2026-Feb-04 14:33:04.122748 #19 329.3 - have your system administrator add LIBDIR to `/etc/ld.so.conf' +2026-Feb-04 14:33:04.122748 #19 329.3 +2026-Feb-04 14:33:04.122748 #19 329.3 See any operating system documentation about shared libraries for +2026-Feb-04 14:33:04.122748 #19 329.3 more information, such as the ld(1) and ld.so(8) manual pages. +2026-Feb-04 14:33:04.122748 #19 329.3 ---------------------------------------------------------------------- +2026-Feb-04 14:33:04.122748 #19 329.3 +2026-Feb-04 14:33:04.122748 #19 329.4 Build complete. +2026-Feb-04 14:33:04.122748 #19 329.4 Don't forget to run 'make test'. +2026-Feb-04 14:33:04.122748 #19 329.4 +2026-Feb-04 14:33:04.122748 #19 329.4 + strip --strip-all modules/intl.so +2026-Feb-04 14:33:04.367863 #19 329.5 Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ +2026-Feb-04 14:33:04.414981 #19 329.7 find . -name \*.gcno -o -name \*.gcda | xargs rm -f +2026-Feb-04 14:33:04.578608 #19 329.7 find . -name \*.lo -o -name \*.o -o -name \*.dep | xargs rm -f +2026-Feb-04 14:33:04.578608 #19 329.7 find . -name \*.la -o -name \*.a | xargs rm -f +2026-Feb-04 14:33:04.578608 #19 329.7 find . -name \*.so | xargs rm -f +2026-Feb-04 14:33:04.578608 #19 329.8 find . -name .libs -a -type d|xargs rm -rf +2026-Feb-04 14:33:04.578608 #19 329.8 rm -f libphp.la modules/* libs/* +2026-Feb-04 14:33:04.578608 #19 329.8 rm -f ext/opcache/jit/zend_jit_x86.c +2026-Feb-04 14:33:04.578608 #19 329.8 rm -f ext/opcache/jit/zend_jit_arm64.c +2026-Feb-04 14:33:04.578608 #19 329.8 rm -f ext/opcache/minilua +2026-Feb-04 14:33:04.578608 #19 329.9 Configuring for: +2026-Feb-04 14:33:04.578608 #19 329.9 PHP Api Version: 20220829 +2026-Feb-04 14:33:04.578608 #19 329.9 Zend Module Api No: 20220829 +2026-Feb-04 14:33:04.578608 #19 329.9 Zend Extension Api No: 420220829 +2026-Feb-04 14:33:05.980125 #19 331.3 checking for grep that handles long lines and -e... +2026-Feb-04 14:33:06.103668 /usr/bin/grep +2026-Feb-04 14:33:06.103668 #19 331.3 checking for egrep... /usr/bin/grep -E +2026-Feb-04 14:33:06.103668 #19 331.3 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:33:06.103668 #19 331.3 checking for pkg-config... /usr/bin/pkg-config +2026-Feb-04 14:33:06.103668 #19 331.3 checking pkg-config is at least version 0.9.0... yes +2026-Feb-04 14:33:06.103668 #19 331.3 checking for cc... cc +2026-Feb-04 14:33:06.103668 #19 331.4 checking whether the C compiler works... +2026-Feb-04 14:33:06.259702 yes +2026-Feb-04 14:33:06.259702 #19 331.5 checking for C compiler default output file name... a.out +2026-Feb-04 14:33:06.259702 #19 331.5 checking for suffix of executables... +2026-Feb-04 14:33:06.383758 #19 331.5 checking whether we are cross compiling... no +2026-Feb-04 14:33:06.383758 #19 331.6 checking for suffix of object files... o +2026-Feb-04 14:33:06.544928 #19 331.7 checking whether the compiler supports GNU C... yes +2026-Feb-04 14:33:06.544928 #19 331.7 checking whether cc accepts -g... yes +2026-Feb-04 14:33:06.544928 #19 331.7 checking for cc option to enable C11 features... none needed +2026-Feb-04 14:33:06.658085 #19 331.8 checking how to run the C preprocessor... cc -E +2026-Feb-04 14:33:06.658085 #19 331.9 checking for egrep -e... (cached) /usr/bin/grep -E +2026-Feb-04 14:33:06.658085 #19 331.9 checking for icc... no +2026-Feb-04 14:33:06.759686 #19 331.9 checking for suncc... no +2026-Feb-04 14:33:06.759686 #19 332.0 checking for system library directory... lib +2026-Feb-04 14:33:06.759686 #19 332.0 checking if compiler supports -Wl,-rpath,... yes +2026-Feb-04 14:33:06.759686 #19 332.0 checking build system type... x86_64-pc-linux-gnu +2026-Feb-04 14:33:06.759686 #19 332.0 checking host system type... x86_64-pc-linux-gnu +2026-Feb-04 14:33:06.884702 #19 332.0 checking target system type... x86_64-pc-linux-gnu +2026-Feb-04 14:33:06.884702 #19 332.1 checking for PHP prefix... /usr/local +2026-Feb-04 14:33:06.884702 #19 332.1 checking for PHP includes... -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib +2026-Feb-04 14:33:06.884702 #19 332.1 checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20220829 +2026-Feb-04 14:33:06.884702 #19 332.1 checking for PHP installed headers prefix... /usr/local/include/php +2026-Feb-04 14:33:06.884702 #19 332.1 checking if debug is enabled... no +2026-Feb-04 14:33:06.884702 #19 332.1 checking if zts is enabled... no +2026-Feb-04 14:33:07.007172 #19 332.2 checking for gawk... no +2026-Feb-04 14:33:07.007172 #19 332.2 checking for nawk... nawk +2026-Feb-04 14:33:07.007172 #19 332.2 checking if nawk is broken... no +2026-Feb-04 14:33:07.007172 #19 332.2 checking for zip archive read/write support... yes, shared +2026-Feb-04 14:33:07.007172 #19 332.2 checking for libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0... yes +2026-Feb-04 14:33:07.007172 #19 332.2 checking for zip_file_set_mtime in -lzip... yes +2026-Feb-04 14:33:07.126736 #19 332.3 checking for zip_file_set_encryption in -lzip... yes +2026-Feb-04 14:33:07.249609 #19 332.4 checking for zip_libzip_version in -lzip... yes +2026-Feb-04 14:33:07.356440 #19 332.5 checking for zip_register_progress_callback_with_state in -lzip... yes +2026-Feb-04 14:33:07.475504 #19 332.6 checking for zip_register_cancel_callback_with_state in -lzip... yes +2026-Feb-04 14:33:07.587489 #19 332.8 checking for zip_compression_method_supported in -lzip... yes +2026-Feb-04 14:33:07.728995 #19 332.9 checking for a sed that does not truncate output... /usr/bin/sed +2026-Feb-04 14:33:07.728995 #19 332.9 checking for ld used by cc... /usr/bin/ld +2026-Feb-04 14:33:07.728995 #19 332.9 checking if the linker (/usr/bin/ld) is GNU ld... yes +2026-Feb-04 14:33:07.728995 #19 332.9 checking for /usr/bin/ld option to reload object files... -r +2026-Feb-04 14:33:07.728995 #19 332.9 checking for BSD-compatible nm... /usr/bin/nm -B +2026-Feb-04 14:33:07.728995 #19 332.9 checking whether ln -s works... yes +2026-Feb-04 14:33:07.728995 #19 332.9 checking how to recognize dependent libraries... pass_all +2026-Feb-04 14:33:07.728995 #19 332.9 checking for stdio.h... yes +2026-Feb-04 14:33:07.728995 #19 333.0 checking for stdlib.h... yes +2026-Feb-04 14:33:07.728995 #19 333.0 checking for string.h... +2026-Feb-04 14:33:07.859066 yes +2026-Feb-04 14:33:07.859066 #19 333.1 checking for inttypes.h... yes +2026-Feb-04 14:33:07.859066 #19 333.1 checking for stdint.h... yes +2026-Feb-04 14:33:08.004013 #19 333.1 checking for strings.h... yes +2026-Feb-04 14:33:08.004013 #19 333.2 checking for sys/stat.h... yes +2026-Feb-04 14:33:08.004013 #19 333.2 checking for sys/types.h... yes +2026-Feb-04 14:33:08.109601 #19 333.3 checking for unistd.h... yes +2026-Feb-04 14:33:08.109601 #19 333.3 checking for dlfcn.h... yes +2026-Feb-04 14:33:08.253588 #19 333.4 checking the maximum length of command line arguments... 1572864 +2026-Feb-04 14:33:08.253588 #19 333.4 checking command to parse /usr/bin/nm -B output from cc object... ok +2026-Feb-04 14:33:08.253588 #19 333.5 checking for objdir... +2026-Feb-04 14:33:08.378065 .libs +2026-Feb-04 14:33:08.378065 #19 333.5 checking for ar... ar +2026-Feb-04 14:33:08.378065 #19 333.5 checking for ranlib... ranlib +2026-Feb-04 14:33:08.378065 #19 333.5 checking for strip... strip +2026-Feb-04 14:33:08.378065 #19 333.7 checking if cc supports -fno-rtti -fno-exceptions... +2026-Feb-04 14:33:08.596258 no +2026-Feb-04 14:33:08.596258 #19 333.7 checking for cc option to produce PIC... -fPIC +2026-Feb-04 14:33:08.596258 #19 333.7 checking if cc PIC flag -fPIC works... yes +2026-Feb-04 14:33:08.596258 #19 333.7 checking if cc static flag -static works... yes +2026-Feb-04 14:33:08.596258 #19 333.9 checking if cc supports -c -o file.o... +2026-Feb-04 14:33:08.730191 yes +2026-Feb-04 14:33:08.730191 #19 333.9 checking whether the cc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes +2026-Feb-04 14:33:08.730191 #19 334.0 checking whether -lc should be explicitly linked in... no +2026-Feb-04 14:33:08.935254 #19 334.0 checking dynamic linker characteristics... GNU/Linux ld.so +2026-Feb-04 14:33:08.935254 #19 334.0 checking how to hardcode library paths into programs... immediate +2026-Feb-04 14:33:08.935254 #19 334.0 checking whether stripping libraries is possible... yes +2026-Feb-04 14:33:08.935254 #19 334.1 checking if libtool supports shared libraries... yes +2026-Feb-04 14:33:08.935254 #19 334.1 checking whether to build shared libraries... yes +2026-Feb-04 14:33:08.935254 #19 334.1 checking whether to build static libraries... no +2026-Feb-04 14:33:09.156659 #19 334.4 +2026-Feb-04 14:33:09.324311 #19 334.4 creating libtool +2026-Feb-04 14:33:09.324311 #19 334.5 appending configuration tag "CXX" to libtool +2026-Feb-04 14:33:09.324311 #19 334.6 configure: patching config.h.in +2026-Feb-04 14:33:09.447739 #19 334.6 configure: creating ./config.status +2026-Feb-04 14:33:09.447739 #19 334.7 config.status: creating config.h +2026-Feb-04 14:33:09.569627 #19 334.8 /bin/bash /usr/src/php/ext/zip/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/zip -I/usr/src/php/ext/zip/include -I/usr/src/php/ext/zip/main -I/usr/src/php/ext/zip -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/zip/php_zip.c -o php_zip.lo -MMD -MF php_zip.dep -MT php_zip.lo +2026-Feb-04 14:33:09.825103 #19 335.1 mkdir .libs +2026-Feb-04 14:33:09.979584 #19 335.1 cc -I. -I/usr/src/php/ext/zip -I/usr/src/php/ext/zip/include -I/usr/src/php/ext/zip/main -I/usr/src/php/ext/zip -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/zip/php_zip.c -MMD -MF php_zip.dep -MT php_zip.lo -fPIC -DPIC -o .libs/php_zip.o +2026-Feb-04 14:33:11.693238 #19 337.0 /bin/bash /usr/src/php/ext/zip/libtool --tag=CC --mode=compile cc -I. -I/usr/src/php/ext/zip -I/usr/src/php/ext/zip/include -I/usr/src/php/ext/zip/main -I/usr/src/php/ext/zip -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/zip/zip_stream.c -o zip_stream.lo -MMD -MF zip_stream.dep -MT zip_stream.lo +2026-Feb-04 14:33:11.907262 #19 337.2 cc -I. -I/usr/src/php/ext/zip -I/usr/src/php/ext/zip/include -I/usr/src/php/ext/zip/main -I/usr/src/php/ext/zip -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/zip/zip_stream.c -MMD -MF zip_stream.dep -MT zip_stream.lo -fPIC -DPIC -o .libs/zip_stream.o +2026-Feb-04 14:33:12.357243 #19 337.6 /bin/bash /usr/src/php/ext/zip/libtool --tag=CC --mode=link cc -shared -I/usr/src/php/ext/zip/include -I/usr/src/php/ext/zip/main -I/usr/src/php/ext/zip -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Wl,-O1 -pie -o zip.la -export-dynamic -avoid-version -prefer-pic -module -rpath /usr/src/php/ext/zip/modules php_zip.lo zip_stream.lo -lzip +2026-Feb-04 14:33:12.554713 #19 337.8 cc -shared .libs/php_zip.o .libs/zip_stream.o -lzip -Wl,-O1 -Wl,-soname -Wl,zip.so -o .libs/zip.so +2026-Feb-04 14:33:12.668015 #19 337.9 creating zip.la +2026-Feb-04 14:33:12.668015 #19 337.9 (cd .libs && rm -f zip.la && ln -s ../zip.la zip.la) +2026-Feb-04 14:33:12.668015 #19 337.9 /bin/bash /usr/src/php/ext/zip/libtool --tag=CC --mode=install cp ./zip.la /usr/src/php/ext/zip/modules +2026-Feb-04 14:33:12.668015 #19 337.9 cp ./.libs/zip.so /usr/src/php/ext/zip/modules/zip.so +2026-Feb-04 14:33:12.775743 #19 338.0 cp ./.libs/zip.lai /usr/src/php/ext/zip/modules/zip.la +2026-Feb-04 14:33:12.775743 #19 338.0 PATH="$PATH:/sbin" ldconfig -n /usr/src/php/ext/zip/modules +2026-Feb-04 14:33:12.775743 #19 338.0 ---------------------------------------------------------------------- +2026-Feb-04 14:33:12.775743 #19 338.0 Libraries have been installed in: +2026-Feb-04 14:33:12.775743 #19 338.0 /usr/src/php/ext/zip/modules +2026-Feb-04 14:33:12.775743 #19 338.0 +2026-Feb-04 14:33:12.775743 #19 338.0 If you ever happen to want to link against installed libraries +2026-Feb-04 14:33:12.775743 #19 338.0 in a given directory, LIBDIR, you must either use libtool, and +2026-Feb-04 14:33:12.775743 #19 338.0 specify the full pathname of the library, or use the `-LLIBDIR' +2026-Feb-04 14:33:12.775743 #19 338.0 flag during linking and do at least one of the following: +2026-Feb-04 14:33:12.775743 #19 338.0 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable +2026-Feb-04 14:33:12.775743 #19 338.0 during execution +2026-Feb-04 14:33:12.775743 #19 338.0 - add LIBDIR to the `LD_RUN_PATH' environment variable +2026-Feb-04 14:33:12.775743 #19 338.0 during linking +2026-Feb-04 14:33:12.775743 #19 338.0 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag +2026-Feb-04 14:33:12.775743 #19 338.0 - have your system administrator add LIBDIR to `/etc/ld.so.conf' +2026-Feb-04 14:33:12.775743 #19 338.0 +2026-Feb-04 14:33:12.775743 #19 338.0 See any operating system documentation about shared libraries for +2026-Feb-04 14:33:12.775743 #19 338.0 more information, such as the ld(1) and ld.so(8) manual pages. +2026-Feb-04 14:33:12.775743 #19 338.0 ---------------------------------------------------------------------- +2026-Feb-04 14:33:12.775743 #19 338.0 +2026-Feb-04 14:33:12.775743 #19 338.0 Build complete. +2026-Feb-04 14:33:12.775743 #19 338.0 Don't forget to run 'make test'. +2026-Feb-04 14:33:12.775743 #19 338.0 +2026-Feb-04 14:33:12.775743 #19 338.1 + strip --strip-all modules/zip.so +2026-Feb-04 14:33:12.966276 #19 338.1 Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ +2026-Feb-04 14:33:12.966276 #19 338.2 find . -name \*.gcno -o -name \*.gcda | xargs rm -f +2026-Feb-04 14:33:13.167236 #19 338.3 find . -name \*.lo -o -name \*.o -o -name \*.dep | xargs rm -f +2026-Feb-04 14:33:13.167236 #19 338.3 find . -name \*.la -o -name \*.a | xargs rm -f +2026-Feb-04 14:33:13.167236 #19 338.3 find . -name \*.so | xargs rm -f +2026-Feb-04 14:33:13.167236 #19 338.3 find . -name .libs -a -type d|xargs rm -rf +2026-Feb-04 14:33:13.167236 #19 338.3 rm -f libphp.la modules/* libs/* +2026-Feb-04 14:33:13.167236 #19 338.3 rm -f ext/opcache/jit/zend_jit_x86.c +2026-Feb-04 14:33:13.167236 #19 338.3 rm -f ext/opcache/jit/zend_jit_arm64.c +2026-Feb-04 14:33:13.167236 #19 338.3 rm -f ext/opcache/minilua +2026-Feb-04 14:33:14.000785 #19 339.3 Enabling module rewrite. +2026-Feb-04 14:33:14.174994 #19 339.3 Enabling module headers. +2026-Feb-04 14:33:14.174994 #19 339.3 Enabling module expires. +2026-Feb-04 14:33:14.174994 #19 339.3 To activate the new configuration, you need to run: +2026-Feb-04 14:33:14.174994 #19 339.3 service apache2 restart +2026-Feb-04 14:33:14.248696 #19 DONE 339.5s +2026-Feb-04 14:33:14.406785 #25 [stage-2 4/9] COPY . . +2026-Feb-04 14:33:14.461904 #25 DONE 0.2s +2026-Feb-04 14:33:14.622637 #26 [stage-2 5/9] COPY --from=vendor /var/www/html/vendor ./vendor +2026-Feb-04 14:33:16.497557 #26 DONE 2.0s +2026-Feb-04 14:33:16.658502 #27 [stage-2 6/9] COPY --from=frontend /var/www/html/public/build ./public/build +2026-Feb-04 14:33:16.694691 #27 DONE 0.2s +2026-Feb-04 14:33:16.824954 #28 [stage-2 7/9] COPY docker/apache-vhost.conf /etc/apache2/sites-available/000-default.conf +2026-Feb-04 14:33:16.863241 #28 DONE 0.2s +2026-Feb-04 14:33:16.961686 #29 [stage-2 8/9] COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh +2026-Feb-04 14:33:16.961686 #29 DONE 0.1s +2026-Feb-04 14:33:17.123160 #30 [stage-2 9/9] RUN chmod +x /usr/local/bin/entrypoint.sh && chown -R www-data:www-data storage bootstrap/cache && chmod -R ug+rwx storage bootstrap/cache +2026-Feb-04 14:33:17.568726 #30 DONE 0.6s +2026-Feb-04 14:33:17.722889 #31 exporting to image +2026-Feb-04 14:33:17.722889 #31 exporting layers +2026-Feb-04 14:33:19.621254 #31 exporting layers 2.0s done +2026-Feb-04 14:33:19.846183 #31 writing image sha256:4da632206346e2c290d48bc292e3c9c69b94bb3e917db285bf1a2cf2e088075b done +2026-Feb-04 14:33:19.846183 #31 naming to docker.io/library/p4w4csg8kcocs00s480w40cs_app:26e5da1b8dbeb3065ab56c09dd586329b30b9ba7 0.0s done +2026-Feb-04 14:33:19.846183 #31 DONE 2.1s +2026-Feb-04 14:33:19.880769 #32 resolving provenance for metadata file +2026-Feb-04 14:33:19.919464 #32 DONE 0.0s +2026-Feb-04 14:33:19.953865 app Built +2026-Feb-04 14:33:20.094889 Creating .env file with runtime variables for container. +2026-Feb-04 14:33:21.376994 Removing old containers. +2026-Feb-04 14:33:21.919209 Starting new application. +2026-Feb-04 14:33:24.127080 [CMD]: docker exec w4gkwgg4ccww8oc4s8w0soog bash -c 'COOLIFY_BRANCH=main COOLIFY_RESOURCE_UUID=p4w4csg8kcocs00s480w40cs docker compose --env-file /artifacts/w4gkwgg4ccww8oc4s8w0soog/.env --project-name p4w4csg8kcocs00s480w40cs --project-directory /artifacts/w4gkwgg4ccww8oc4s8w0soog -f /artifacts/w4gkwgg4ccww8oc4s8w0soog/docker-compose.yml up -d' +2026-Feb-04 14:33:24.127080 mysql Pulling +2026-Feb-04 14:33:28.625602 c21bb7e51cd3 Pulling fs layer +2026-Feb-04 14:33:28.625602 d9bba75f9c49 Pulling fs layer +2026-Feb-04 14:33:28.625602 d7842cc74782 Pulling fs layer +2026-Feb-04 14:33:28.625602 ce1944d72bca Pulling fs layer +2026-Feb-04 14:33:28.625602 c21ebd7bbded Pulling fs layer +2026-Feb-04 14:33:28.625602 142c5fc9ea8a Pulling fs layer +2026-Feb-04 14:33:28.625602 526dbe6f3591 Pulling fs layer +2026-Feb-04 14:33:28.625602 b05b17de9630 Pulling fs layer +2026-Feb-04 14:33:28.625602 3145e04eb470 Pulling fs layer +2026-Feb-04 14:33:28.625602 f79b7cf07833 Pulling fs layer +2026-Feb-04 14:33:28.625602 b4f9f94601d6 Pulling fs layer +2026-Feb-04 14:33:28.625602 526dbe6f3591 Waiting +2026-Feb-04 14:33:28.678214 b05b17de9630 Waiting +2026-Feb-04 14:33:28.678214 3145e04eb470 Waiting +2026-Feb-04 14:33:28.678214 f79b7cf07833 Waiting +2026-Feb-04 14:33:28.678214 b4f9f94601d6 Waiting +2026-Feb-04 14:33:28.678214 ce1944d72bca Waiting +2026-Feb-04 14:33:28.678214 c21ebd7bbded Waiting +2026-Feb-04 14:33:28.678214 142c5fc9ea8a Waiting +2026-Feb-04 14:33:29.919710 d7842cc74782 Downloading [> ] 9.165kB/783.6kB +2026-Feb-04 14:33:29.957317 d7842cc74782 Verifying Checksum +2026-Feb-04 14:33:29.957317 d7842cc74782 Download complete +2026-Feb-04 14:33:30.025152 d9bba75f9c49 Downloading [==================================================>] 884B/884B +2026-Feb-04 14:33:30.058115 d9bba75f9c49 Verifying Checksum +2026-Feb-04 14:33:30.058115 d9bba75f9c49 Download complete +2026-Feb-04 14:33:30.410695 c21bb7e51cd3 Downloading [> ] 475.1kB/47.31MB +2026-Feb-04 14:33:30.538736 c21bb7e51cd3 Downloading [====> ] 3.817MB/47.31MB +2026-Feb-04 14:33:30.636667 c21bb7e51cd3 Downloading [=======> ] 7.18MB/47.31MB +2026-Feb-04 14:33:30.795144 c21bb7e51cd3 Downloading [=============> ] 12.96MB/47.31MB +2026-Feb-04 14:33:30.899034 c21bb7e51cd3 Downloading [===================> ] 18.22MB/47.31MB +2026-Feb-04 14:33:31.053921 c21bb7e51cd3 Downloading [======================> ] 21.1MB/47.31MB +2026-Feb-04 14:33:31.145568 ce1944d72bca Downloading [> ] 63.22kB/6.175MB +2026-Feb-04 14:33:31.182506 c21bb7e51cd3 Downloading [===========================> ] 25.9MB/47.31MB +2026-Feb-04 14:33:31.222897 ce1944d72bca Downloading [=============================> ] 3.604MB/6.175MB +2026-Feb-04 14:33:31.222897 c21ebd7bbded Downloading [==================> ] 953B/2.608kB +2026-Feb-04 14:33:31.222897 c21ebd7bbded Downloading [==================================================>] 2.608kB/2.608kB +2026-Feb-04 14:33:31.222897 c21ebd7bbded Verifying Checksum +2026-Feb-04 14:33:31.222897 c21ebd7bbded Download complete +2026-Feb-04 14:33:31.288284 ce1944d72bca Downloading [==============================================> ] 5.718MB/6.175MB +2026-Feb-04 14:33:31.323051 c21bb7e51cd3 Downloading [===============================> ] 29.72MB/47.31MB +2026-Feb-04 14:33:31.323051 ce1944d72bca Verifying Checksum +2026-Feb-04 14:33:31.323051 ce1944d72bca Download complete +2026-Feb-04 14:33:31.409482 c21bb7e51cd3 Downloading [===================================> ] 34.01MB/47.31MB +2026-Feb-04 14:33:31.527909 c21bb7e51cd3 Downloading [=======================================> ] 37.83MB/47.31MB +2026-Feb-04 14:33:31.650510 c21bb7e51cd3 Downloading [==============================================> ] 43.55MB/47.31MB +2026-Feb-04 14:33:31.761681 c21bb7e51cd3 Downloading [=================================================> ] 46.43MB/47.31MB +2026-Feb-04 14:33:31.802318 c21bb7e51cd3 Verifying Checksum +2026-Feb-04 14:33:31.802318 c21bb7e51cd3 Download complete +2026-Feb-04 14:33:31.840288 c21bb7e51cd3 Extracting [> ] 491.5kB/47.31MB +2026-Feb-04 14:33:31.936746 c21bb7e51cd3 Extracting [=> ] 983kB/47.31MB +2026-Feb-04 14:33:32.046488 c21bb7e51cd3 Extracting [==> ] 2.458MB/47.31MB +2026-Feb-04 14:33:32.183351 c21bb7e51cd3 Extracting [======> ] 6.39MB/47.31MB +2026-Feb-04 14:33:32.305661 142c5fc9ea8a Downloading [==================================================>] 331B/331B +2026-Feb-04 14:33:32.305661 142c5fc9ea8a Verifying Checksum +2026-Feb-04 14:33:32.305661 142c5fc9ea8a Download complete +2026-Feb-04 14:33:32.416049 c21bb7e51cd3 Extracting [=======> ] 7.373MB/47.31MB +2026-Feb-04 14:33:32.522305 c21bb7e51cd3 Extracting [=========> ] 9.339MB/47.31MB +2026-Feb-04 14:33:32.634049 c21bb7e51cd3 Extracting [============> ] 11.8MB/47.31MB +2026-Feb-04 14:33:32.742597 c21bb7e51cd3 Extracting [===============> ] 14.25MB/47.31MB +2026-Feb-04 14:33:32.805858 526dbe6f3591 Downloading [> ] 507.9kB/49.93MB +2026-Feb-04 14:33:32.859109 c21bb7e51cd3 Extracting [===================> ] 18.19MB/47.31MB +2026-Feb-04 14:33:32.898993 b05b17de9630 Downloading [==================================================>] 317B/317B +2026-Feb-04 14:33:32.898993 b05b17de9630 Verifying Checksum +2026-Feb-04 14:33:32.898993 b05b17de9630 Download complete +2026-Feb-04 14:33:32.937590 526dbe6f3591 Downloading [====> ] 4.571MB/49.93MB +2026-Feb-04 14:33:32.975120 c21bb7e51cd3 Extracting [======================> ] 21.63MB/47.31MB +2026-Feb-04 14:33:33.039798 526dbe6f3591 Downloading [===========> ] 11.14MB/49.93MB +2026-Feb-04 14:33:33.081085 c21bb7e51cd3 Extracting [=========================> ] 24.58MB/47.31MB +2026-Feb-04 14:33:33.140892 526dbe6f3591 Downloading [==============> ] 14.17MB/49.93MB +2026-Feb-04 14:33:33.184831 c21bb7e51cd3 Extracting [==============================> ] 28.51MB/47.31MB +2026-Feb-04 14:33:33.250337 526dbe6f3591 Downloading [===================> ] 19.74MB/49.93MB +2026-Feb-04 14:33:33.302787 c21bb7e51cd3 Extracting [================================> ] 30.97MB/47.31MB +2026-Feb-04 14:33:33.353806 526dbe6f3591 Downloading [=====================> ] 21.77MB/49.93MB +2026-Feb-04 14:33:33.421636 c21bb7e51cd3 Extracting [=================================> ] 31.95MB/47.31MB +2026-Feb-04 14:33:33.458754 526dbe6f3591 Downloading [=============================> ] 29.38MB/49.93MB +2026-Feb-04 14:33:33.497013 3145e04eb470 Downloading [> ] 540.7kB/128.1MB +2026-Feb-04 14:33:33.547880 c21bb7e51cd3 Extracting [===================================> ] 33.42MB/47.31MB +2026-Feb-04 14:33:33.607234 526dbe6f3591 Downloading [===============================> ] 31.4MB/49.93MB +2026-Feb-04 14:33:33.651918 c21bb7e51cd3 Extracting [=========================================> ] 38.83MB/47.31MB +2026-Feb-04 14:33:33.651918 3145e04eb470 Downloading [=> ] 2.671MB/128.1MB +2026-Feb-04 14:33:33.707774 526dbe6f3591 Downloading [=====================================> ] 37.47MB/49.93MB +2026-Feb-04 14:33:33.756936 3145e04eb470 Downloading [=> ] 3.736MB/128.1MB +2026-Feb-04 14:33:33.799713 526dbe6f3591 Downloading [========================================> ] 39.98MB/49.93MB +2026-Feb-04 14:33:33.848342 c21bb7e51cd3 Extracting [===========================================> ] 41.29MB/47.31MB +2026-Feb-04 14:33:33.888701 526dbe6f3591 Downloading [===============================================> ] 47.05MB/49.93MB +2026-Feb-04 14:33:33.888701 3145e04eb470 Downloading [=> ] 4.817MB/128.1MB +2026-Feb-04 14:33:33.940837 526dbe6f3591 Download complete +2026-Feb-04 14:33:33.986400 c21bb7e51cd3 Extracting [=============================================> ] 42.76MB/47.31MB +2026-Feb-04 14:33:34.023699 3145e04eb470 Downloading [==> ] 5.898MB/128.1MB +2026-Feb-04 14:33:34.057383 f79b7cf07833 Downloading [============> ] 1.369kB/5.33kB +2026-Feb-04 14:33:34.057383 f79b7cf07833 Download complete +2026-Feb-04 14:33:34.181960 3145e04eb470 Downloading [==> ] 7.512MB/128.1MB +2026-Feb-04 14:33:34.391761 3145e04eb470 Downloading [===> ] 9.126MB/128.1MB +2026-Feb-04 14:33:34.505216 3145e04eb470 Downloading [===> ] 10.21MB/128.1MB +2026-Feb-04 14:33:34.650739 3145e04eb470 Downloading [====> ] 11.27MB/128.1MB +2026-Feb-04 14:33:34.735821 c21bb7e51cd3 Extracting [==============================================> ] 44.24MB/47.31MB +2026-Feb-04 14:33:34.779079 3145e04eb470 Downloading [====> ] 12.34MB/128.1MB +2026-Feb-04 14:33:34.846263 c21bb7e51cd3 Extracting [================================================> ] 46.2MB/47.31MB +2026-Feb-04 14:33:34.891061 3145e04eb470 Downloading [=====> ] 12.88MB/128.1MB +2026-Feb-04 14:33:34.961077 c21bb7e51cd3 Extracting [==================================================>] 47.31MB/47.31MB +2026-Feb-04 14:33:35.035319 3145e04eb470 Downloading [=====> ] 14.48MB/128.1MB +2026-Feb-04 14:33:35.082744 c21bb7e51cd3 Pull complete +2026-Feb-04 14:33:35.082744 d9bba75f9c49 Extracting [==================================================>] 884B/884B +2026-Feb-04 14:33:35.082744 d9bba75f9c49 Extracting [==================================================>] 884B/884B +2026-Feb-04 14:33:35.123903 b4f9f94601d6 Downloading [==================================================>] 122B/122B +2026-Feb-04 14:33:35.123903 b4f9f94601d6 Verifying Checksum +2026-Feb-04 14:33:35.123903 b4f9f94601d6 Download complete +2026-Feb-04 14:33:35.171230 d9bba75f9c49 Pull complete +2026-Feb-04 14:33:35.171230 d7842cc74782 Extracting [==> ] 32.77kB/783.6kB +2026-Feb-04 14:33:35.208160 3145e04eb470 Downloading [======> ] 16.63MB/128.1MB +2026-Feb-04 14:33:35.258313 d7842cc74782 Extracting [==================================================>] 783.6kB/783.6kB +2026-Feb-04 14:33:35.258313 d7842cc74782 Extracting [==================================================>] 783.6kB/783.6kB +2026-Feb-04 14:33:35.309910 d7842cc74782 Pull complete +2026-Feb-04 14:33:35.309910 3145e04eb470 Downloading [=======> ] 18.24MB/128.1MB +2026-Feb-04 14:33:35.309910 ce1944d72bca Extracting [> ] 65.54kB/6.175MB +2026-Feb-04 14:33:35.403154 ce1944d72bca Extracting [============> ] 1.507MB/6.175MB +2026-Feb-04 14:33:35.440980 3145e04eb470 Downloading [=======> ] 19.31MB/128.1MB +2026-Feb-04 14:33:35.505892 ce1944d72bca Extracting [====================> ] 2.49MB/6.175MB +2026-Feb-04 14:33:35.607507 ce1944d72bca Extracting [=================================> ] 4.129MB/6.175MB +2026-Feb-04 14:33:35.607507 3145e04eb470 Downloading [========> ] 20.92MB/128.1MB +2026-Feb-04 14:33:35.678782 ce1944d72bca Extracting [==================================================>] 6.175MB/6.175MB +2026-Feb-04 14:33:35.726142 ce1944d72bca Pull complete +2026-Feb-04 14:33:35.761870 c21ebd7bbded Extracting [==================================================>] 2.608kB/2.608kB +2026-Feb-04 14:33:35.761870 c21ebd7bbded Extracting [==================================================>] 2.608kB/2.608kB +2026-Feb-04 14:33:35.816467 3145e04eb470 Downloading [========> ] 23.06MB/128.1MB +2026-Feb-04 14:33:35.865600 c21ebd7bbded Pull complete +2026-Feb-04 14:33:35.865600 142c5fc9ea8a Extracting [==================================================>] 331B/331B +2026-Feb-04 14:33:35.865600 142c5fc9ea8a Extracting [==================================================>] 331B/331B +2026-Feb-04 14:33:35.911757 142c5fc9ea8a Pull complete +2026-Feb-04 14:33:35.973348 526dbe6f3591 Extracting [> ] 524.3kB/49.93MB +2026-Feb-04 14:33:36.012373 3145e04eb470 Downloading [=========> ] 24.66MB/128.1MB +2026-Feb-04 14:33:36.077589 526dbe6f3591 Extracting [===> ] 3.67MB/49.93MB +2026-Feb-04 14:33:36.159758 3145e04eb470 Downloading [==========> ] 26.27MB/128.1MB +2026-Feb-04 14:33:36.204803 526dbe6f3591 Extracting [======> ] 6.291MB/49.93MB +2026-Feb-04 14:33:36.276065 3145e04eb470 Downloading [==========> ] 27.88MB/128.1MB +2026-Feb-04 14:33:36.322622 526dbe6f3591 Extracting [========> ] 8.913MB/49.93MB +2026-Feb-04 14:33:36.398587 3145e04eb470 Downloading [===========> ] 28.41MB/128.1MB +2026-Feb-04 14:33:36.450814 526dbe6f3591 Extracting [===========> ] 11.01MB/49.93MB +2026-Feb-04 14:33:36.499284 3145e04eb470 Downloading [===========> ] 30MB/128.1MB +2026-Feb-04 14:33:36.597504 526dbe6f3591 Extracting [=============> ] 13.63MB/49.93MB +2026-Feb-04 14:33:36.654196 3145e04eb470 Downloading [============> ] 31.08MB/128.1MB +2026-Feb-04 14:33:36.710625 526dbe6f3591 Extracting [===============> ] 15.2MB/49.93MB +2026-Feb-04 14:33:36.759788 3145e04eb470 Downloading [============> ] 32.69MB/128.1MB +2026-Feb-04 14:33:36.827070 526dbe6f3591 Extracting [================> ] 16.78MB/49.93MB +2026-Feb-04 14:33:36.881335 3145e04eb470 Downloading [=============> ] 34.31MB/128.1MB +2026-Feb-04 14:33:36.945568 526dbe6f3591 Extracting [=================> ] 17.83MB/49.93MB +2026-Feb-04 14:33:37.015376 3145e04eb470 Downloading [=============> ] 35.39MB/128.1MB +2026-Feb-04 14:33:37.051366 526dbe6f3591 Extracting [===================> ] 19.92MB/49.93MB +2026-Feb-04 14:33:37.104925 3145e04eb470 Downloading [==============> ] 37MB/128.1MB +2026-Feb-04 14:33:37.161874 526dbe6f3591 Extracting [======================> ] 22.02MB/49.93MB +2026-Feb-04 14:33:37.232310 3145e04eb470 Downloading [===============> ] 39.15MB/128.1MB +2026-Feb-04 14:33:37.275030 526dbe6f3591 Extracting [=========================> ] 25.69MB/49.93MB +2026-Feb-04 14:33:37.339644 3145e04eb470 Downloading [===============> ] 39.68MB/128.1MB +2026-Feb-04 14:33:37.395110 526dbe6f3591 Extracting [==============================> ] 30.41MB/49.93MB +2026-Feb-04 14:33:37.472562 3145e04eb470 Downloading [================> ] 41.29MB/128.1MB +2026-Feb-04 14:33:37.510945 526dbe6f3591 Extracting [==================================> ] 34.6MB/49.93MB +2026-Feb-04 14:33:37.593412 3145e04eb470 Downloading [================> ] 42.36MB/128.1MB +2026-Feb-04 14:33:37.652181 526dbe6f3591 Extracting [=====================================> ] 37.75MB/49.93MB +2026-Feb-04 14:33:37.720269 3145e04eb470 Downloading [=================> ] 43.97MB/128.1MB +2026-Feb-04 14:33:37.767969 526dbe6f3591 Extracting [=======================================> ] 39.32MB/49.93MB +2026-Feb-04 14:33:37.821368 3145e04eb470 Downloading [=================> ] 46.11MB/128.1MB +2026-Feb-04 14:33:37.878710 526dbe6f3591 Extracting [==========================================> ] 42.47MB/49.93MB +2026-Feb-04 14:33:37.987984 526dbe6f3591 Extracting [=============================================> ] 45.09MB/49.93MB +2026-Feb-04 14:33:38.025860 3145e04eb470 Downloading [==================> ] 47.19MB/128.1MB +2026-Feb-04 14:33:38.096857 526dbe6f3591 Extracting [===============================================> ] 47.71MB/49.93MB +2026-Feb-04 14:33:38.131692 3145e04eb470 Downloading [===================> ] 48.81MB/128.1MB +2026-Feb-04 14:33:38.273837 526dbe6f3591 Extracting [==================================================>] 49.93MB/49.93MB +2026-Feb-04 14:33:38.273837 3145e04eb470 Downloading [===================> ] 50.94MB/128.1MB +2026-Feb-04 14:33:38.354588 526dbe6f3591 Pull complete +2026-Feb-04 14:33:38.400224 3145e04eb470 Downloading [====================> ] 52.01MB/128.1MB +2026-Feb-04 14:33:38.400224 b05b17de9630 Extracting [==================================================>] 317B/317B +2026-Feb-04 14:33:38.400224 b05b17de9630 Extracting [==================================================>] 317B/317B +2026-Feb-04 14:33:38.444270 b05b17de9630 Pull complete +2026-Feb-04 14:33:38.493179 3145e04eb470 Downloading [====================> ] 53.62MB/128.1MB +2026-Feb-04 14:33:38.594442 3145e04eb470 Downloading [=====================> ] 55.77MB/128.1MB +2026-Feb-04 14:33:38.703150 3145e04eb470 Downloading [======================> ] 56.84MB/128.1MB +2026-Feb-04 14:33:38.838260 3145e04eb470 Downloading [=======================> ] 58.98MB/128.1MB +2026-Feb-04 14:33:38.960399 3145e04eb470 Downloading [=======================> ] 60.05MB/128.1MB +2026-Feb-04 14:33:39.087928 3145e04eb470 Downloading [========================> ] 61.65MB/128.1MB +2026-Feb-04 14:33:39.203313 3145e04eb470 Downloading [=========================> ] 64.32MB/128.1MB +2026-Feb-04 14:33:39.329805 3145e04eb470 Downloading [=========================> ] 64.86MB/128.1MB +2026-Feb-04 14:33:39.508773 3145e04eb470 Downloading [==========================> ] 66.99MB/128.1MB +2026-Feb-04 14:33:39.685320 3145e04eb470 Downloading [===========================> ] 70.21MB/128.1MB +2026-Feb-04 14:33:39.824368 3145e04eb470 Downloading [============================> ] 72.88MB/128.1MB +2026-Feb-04 14:33:39.934644 3145e04eb470 Downloading [=============================> ] 75.02MB/128.1MB +2026-Feb-04 14:33:40.043279 3145e04eb470 Downloading [=============================> ] 76.1MB/128.1MB +2026-Feb-04 14:33:40.197098 3145e04eb470 Downloading [==============================> ] 78.77MB/128.1MB +2026-Feb-04 14:33:40.306886 3145e04eb470 Downloading [===============================> ] 80.91MB/128.1MB +2026-Feb-04 14:33:40.420293 3145e04eb470 Downloading [================================> ] 82.51MB/128.1MB +2026-Feb-04 14:33:40.552246 3145e04eb470 Downloading [================================> ] 84.12MB/128.1MB +2026-Feb-04 14:33:40.656949 3145e04eb470 Downloading [=================================> ] 86.25MB/128.1MB +2026-Feb-04 14:33:40.765098 3145e04eb470 Downloading [==================================> ] 87.85MB/128.1MB +2026-Feb-04 14:33:40.890661 3145e04eb470 Downloading [===================================> ] 89.96MB/128.1MB +2026-Feb-04 14:33:40.991039 3145e04eb470 Downloading [===================================> ] 92.09MB/128.1MB +2026-Feb-04 14:33:41.131222 3145e04eb470 Downloading [====================================> ] 93.16MB/128.1MB +2026-Feb-04 14:33:41.293360 3145e04eb470 Downloading [=====================================> ] 95.31MB/128.1MB +2026-Feb-04 14:33:41.500804 3145e04eb470 Downloading [======================================> ] 97.46MB/128.1MB +2026-Feb-04 14:33:41.618263 3145e04eb470 Downloading [======================================> ] 99.59MB/128.1MB +2026-Feb-04 14:33:41.718620 3145e04eb470 Downloading [=======================================> ] 100.6MB/128.1MB +2026-Feb-04 14:33:41.866141 3145e04eb470 Downloading [========================================> ] 102.8MB/128.1MB +2026-Feb-04 14:33:41.990505 3145e04eb470 Downloading [========================================> ] 104.4MB/128.1MB +2026-Feb-04 14:33:42.113517 3145e04eb470 Downloading [=========================================> ] 105.5MB/128.1MB +2026-Feb-04 14:33:42.217145 3145e04eb470 Downloading [=========================================> ] 107.1MB/128.1MB +2026-Feb-04 14:33:42.331064 3145e04eb470 Downloading [==========================================> ] 108.2MB/128.1MB +2026-Feb-04 14:33:42.431457 3145e04eb470 Downloading [==========================================> ] 109.8MB/128.1MB +2026-Feb-04 14:33:42.566632 3145e04eb470 Downloading [===========================================> ] 110.9MB/128.1MB +2026-Feb-04 14:33:42.708151 3145e04eb470 Downloading [============================================> ] 113MB/128.1MB +2026-Feb-04 14:33:42.827646 3145e04eb470 Downloading [============================================> ] 114.1MB/128.1MB +2026-Feb-04 14:33:42.988341 3145e04eb470 Downloading [=============================================> ] 115.7MB/128.1MB +2026-Feb-04 14:33:43.094525 3145e04eb470 Downloading [=============================================> ] 117.8MB/128.1MB +2026-Feb-04 14:33:43.202066 3145e04eb470 Downloading [==============================================> ] 118.4MB/128.1MB +2026-Feb-04 14:33:43.323118 3145e04eb470 Downloading [==============================================> ] 120MB/128.1MB +2026-Feb-04 14:33:43.436726 3145e04eb470 Downloading [===============================================> ] 121MB/128.1MB +2026-Feb-04 14:33:43.548301 3145e04eb470 Downloading [===============================================> ] 122.6MB/128.1MB +2026-Feb-04 14:33:43.653843 3145e04eb470 Downloading [================================================> ] 124.2MB/128.1MB +2026-Feb-04 14:33:43.809953 3145e04eb470 Downloading [================================================> ] 125.3MB/128.1MB +2026-Feb-04 14:33:43.936879 3145e04eb470 Downloading [=================================================> ] 126.9MB/128.1MB +2026-Feb-04 14:33:44.031954 3145e04eb470 Verifying Checksum +2026-Feb-04 14:33:44.031954 3145e04eb470 Download complete +2026-Feb-04 14:33:44.099296 3145e04eb470 Extracting [> ] 557.1kB/128.1MB +2026-Feb-04 14:33:44.199576 3145e04eb470 Extracting [=> ] 3.899MB/128.1MB +2026-Feb-04 14:33:44.311327 3145e04eb470 Extracting [===> ] 7.799MB/128.1MB +2026-Feb-04 14:33:44.413145 3145e04eb470 Extracting [====> ] 10.58MB/128.1MB +2026-Feb-04 14:33:44.549589 3145e04eb470 Extracting [=====> ] 12.81MB/128.1MB +2026-Feb-04 14:33:44.655514 3145e04eb470 Extracting [=====> ] 15.04MB/128.1MB +2026-Feb-04 14:33:44.792299 3145e04eb470 Extracting [======> ] 17.83MB/128.1MB +2026-Feb-04 14:33:44.923005 3145e04eb470 Extracting [=======> ] 19.5MB/128.1MB +2026-Feb-04 14:33:45.027298 3145e04eb470 Extracting [========> ] 21.73MB/128.1MB +2026-Feb-04 14:33:45.146278 3145e04eb470 Extracting [=========> ] 23.95MB/128.1MB +2026-Feb-04 14:33:45.258982 3145e04eb470 Extracting [=========> ] 25.07MB/128.1MB +2026-Feb-04 14:33:45.394723 3145e04eb470 Extracting [==========> ] 27.85MB/128.1MB +2026-Feb-04 14:33:45.562237 3145e04eb470 Extracting [===========> ] 28.97MB/128.1MB +2026-Feb-04 14:33:45.741667 3145e04eb470 Extracting [============> ] 31.2MB/128.1MB +2026-Feb-04 14:33:45.991007 3145e04eb470 Extracting [============> ] 31.75MB/128.1MB +2026-Feb-04 14:33:46.408571 3145e04eb470 Extracting [============> ] 32.31MB/128.1MB +2026-Feb-04 14:33:46.787598 3145e04eb470 Extracting [============> ] 32.87MB/128.1MB +2026-Feb-04 14:33:47.179561 3145e04eb470 Extracting [=============> ] 33.42MB/128.1MB +2026-Feb-04 14:33:47.579440 3145e04eb470 Extracting [=============> ] 33.98MB/128.1MB +2026-Feb-04 14:33:47.841432 3145e04eb470 Extracting [=============> ] 34.54MB/128.1MB +2026-Feb-04 14:33:48.151557 3145e04eb470 Extracting [=============> ] 35.09MB/128.1MB +2026-Feb-04 14:33:48.434605 3145e04eb470 Extracting [=============> ] 35.65MB/128.1MB +2026-Feb-04 14:33:48.707286 3145e04eb470 Extracting [==============> ] 36.21MB/128.1MB +2026-Feb-04 14:33:49.051008 3145e04eb470 Extracting [==============> ] 36.77MB/128.1MB +2026-Feb-04 14:33:49.291566 3145e04eb470 Extracting [==============> ] 37.32MB/128.1MB +2026-Feb-04 14:33:49.709953 3145e04eb470 Extracting [==============> ] 37.88MB/128.1MB +2026-Feb-04 14:33:50.166122 3145e04eb470 Extracting [===============> ] 38.44MB/128.1MB +2026-Feb-04 14:33:50.519246 3145e04eb470 Extracting [===============> ] 38.99MB/128.1MB +2026-Feb-04 14:33:50.923325 3145e04eb470 Extracting [===============> ] 39.55MB/128.1MB +2026-Feb-04 14:33:51.221078 3145e04eb470 Extracting [===============> ] 40.11MB/128.1MB +2026-Feb-04 14:33:51.483322 3145e04eb470 Extracting [===============> ] 40.67MB/128.1MB +2026-Feb-04 14:33:51.804982 3145e04eb470 Extracting [================> ] 41.22MB/128.1MB +2026-Feb-04 14:33:52.161976 3145e04eb470 Extracting [================> ] 41.78MB/128.1MB +2026-Feb-04 14:33:52.538484 3145e04eb470 Extracting [================> ] 42.34MB/128.1MB +2026-Feb-04 14:33:52.834478 3145e04eb470 Extracting [================> ] 42.89MB/128.1MB +2026-Feb-04 14:33:53.146740 3145e04eb470 Extracting [================> ] 43.45MB/128.1MB +2026-Feb-04 14:33:53.463921 3145e04eb470 Extracting [=================> ] 44.01MB/128.1MB +2026-Feb-04 14:33:53.767385 3145e04eb470 Extracting [=================> ] 44.56MB/128.1MB +2026-Feb-04 14:33:54.092768 3145e04eb470 Extracting [=================> ] 45.12MB/128.1MB +2026-Feb-04 14:33:54.487907 3145e04eb470 Extracting [=================> ] 45.68MB/128.1MB +2026-Feb-04 14:33:54.627880 3145e04eb470 Extracting [==================> ] 46.79MB/128.1MB +2026-Feb-04 14:33:54.728750 3145e04eb470 Extracting [==================> ] 47.35MB/128.1MB +2026-Feb-04 14:33:54.906393 3145e04eb470 Extracting [==================> ] 48.46MB/128.1MB +2026-Feb-04 14:33:55.195206 3145e04eb470 Extracting [===================> ] 49.02MB/128.1MB +2026-Feb-04 14:33:55.329187 3145e04eb470 Extracting [===================> ] 50.14MB/128.1MB +2026-Feb-04 14:33:55.448950 3145e04eb470 Extracting [====================> ] 52.36MB/128.1MB +2026-Feb-04 14:33:55.555545 3145e04eb470 Extracting [=====================> ] 56.26MB/128.1MB +2026-Feb-04 14:33:55.663550 3145e04eb470 Extracting [=======================> ] 59.6MB/128.1MB +2026-Feb-04 14:33:55.766243 3145e04eb470 Extracting [========================> ] 61.83MB/128.1MB +2026-Feb-04 14:33:55.872001 3145e04eb470 Extracting [=========================> ] 64.62MB/128.1MB +2026-Feb-04 14:33:55.974855 3145e04eb470 Extracting [==========================> ] 67.96MB/128.1MB +2026-Feb-04 14:33:56.122388 3145e04eb470 Extracting [===========================> ] 70.75MB/128.1MB +2026-Feb-04 14:33:56.239197 3145e04eb470 Extracting [============================> ] 72.97MB/128.1MB +2026-Feb-04 14:33:56.334391 3145e04eb470 Extracting [=============================> ] 75.76MB/128.1MB +2026-Feb-04 14:33:56.442273 3145e04eb470 Extracting [==============================> ] 79.1MB/128.1MB +2026-Feb-04 14:33:56.552839 3145e04eb470 Extracting [================================> ] 82.44MB/128.1MB +2026-Feb-04 14:33:56.676465 3145e04eb470 Extracting [=================================> ] 84.67MB/128.1MB +2026-Feb-04 14:33:56.778308 3145e04eb470 Extracting [=================================> ] 86.9MB/128.1MB +2026-Feb-04 14:33:56.881652 3145e04eb470 Extracting [==================================> ] 89.13MB/128.1MB +2026-Feb-04 14:33:57.002554 3145e04eb470 Extracting [===================================> ] 90.8MB/128.1MB +2026-Feb-04 14:33:57.136839 3145e04eb470 Extracting [====================================> ] 92.47MB/128.1MB +2026-Feb-04 14:33:57.247066 3145e04eb470 Extracting [====================================> ] 94.7MB/128.1MB +2026-Feb-04 14:33:57.349067 3145e04eb470 Extracting [======================================> ] 98.6MB/128.1MB +2026-Feb-04 14:33:57.457595 3145e04eb470 Extracting [========================================> ] 103.6MB/128.1MB +2026-Feb-04 14:33:57.566295 3145e04eb470 Extracting [=========================================> ] 105.8MB/128.1MB +2026-Feb-04 14:33:57.666293 3145e04eb470 Extracting [===========================================> ] 110.3MB/128.1MB +2026-Feb-04 14:33:57.767878 3145e04eb470 Extracting [=============================================> ] 115.9MB/128.1MB +2026-Feb-04 14:33:57.899358 3145e04eb470 Extracting [===============================================> ] 121.4MB/128.1MB +2026-Feb-04 14:33:58.001803 3145e04eb470 Extracting [================================================> ] 123.1MB/128.1MB +2026-Feb-04 14:33:58.104572 3145e04eb470 Extracting [================================================> ] 125.3MB/128.1MB +2026-Feb-04 14:33:58.185068 3145e04eb470 Extracting [==================================================>] 128.1MB/128.1MB +2026-Feb-04 14:33:58.185068 3145e04eb470 Extracting [==================================================>] 128.1MB/128.1MB +2026-Feb-04 14:33:58.399306 3145e04eb470 Pull complete +2026-Feb-04 14:33:58.447901 f79b7cf07833 Extracting [==================================================>] 5.33kB/5.33kB +2026-Feb-04 14:33:58.447901 f79b7cf07833 Extracting [==================================================>] 5.33kB/5.33kB +2026-Feb-04 14:33:58.497621 f79b7cf07833 Pull complete +2026-Feb-04 14:33:58.541635 b4f9f94601d6 Extracting [==================================================>] 122B/122B +2026-Feb-04 14:33:58.541635 b4f9f94601d6 Extracting [==================================================>] 122B/122B +2026-Feb-04 14:33:58.586657 b4f9f94601d6 Pull complete +2026-Feb-04 14:33:58.647461 mysql Pulled +2026-Feb-04 14:33:58.687700 Volume "p4w4csg8kcocs00s480w40cs_app-storage" Creating +2026-Feb-04 14:33:58.687700 Volume "p4w4csg8kcocs00s480w40cs_app-storage" Created +2026-Feb-04 14:33:58.687700 Volume "p4w4csg8kcocs00s480w40cs_mysql-data" Creating +2026-Feb-04 14:33:58.687700 Volume "p4w4csg8kcocs00s480w40cs_mysql-data" Created +2026-Feb-04 14:33:58.687700 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Creating +2026-Feb-04 14:34:01.231021 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Created +2026-Feb-04 14:34:01.297918 Container app-p4w4csg8kcocs00s480w40cs-142727814627 Creating +2026-Feb-04 14:34:01.461588 Container app-p4w4csg8kcocs00s480w40cs-142727814627 Created +2026-Feb-04 14:34:01.521800 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Starting +2026-Feb-04 14:34:02.259807 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Started +2026-Feb-04 14:34:02.259807 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Waiting +2026-Feb-04 14:34:33.263357 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Healthy +2026-Feb-04 14:34:33.263357 Container app-p4w4csg8kcocs00s480w40cs-142727814627 Starting +2026-Feb-04 14:34:34.020978 Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint app-p4w4csg8kcocs00s480w40cs-142727814627 (55fb03153653172f944b9b47ead20b816a3f8c00a6b3cad069185d7f84a3712e): Bind for 0.0.0.0:8000 failed: port is already allocated +2026-Feb-04 14:34:34.071960 exit status 1 +2026-Feb-04 14:34:34.244441 ======================================== +2026-Feb-04 14:34:34.310472 Deployment failed: Command execution failed (exit code 1): docker exec w4gkwgg4ccww8oc4s8w0soog bash -c 'COOLIFY_BRANCH=main COOLIFY_RESOURCE_UUID=p4w4csg8kcocs00s480w40cs docker compose --env-file /artifacts/w4gkwgg4ccww8oc4s8w0soog/.env --project-name p4w4csg8kcocs00s480w40cs --project-directory /artifacts/w4gkwgg4ccww8oc4s8w0soog -f /artifacts/w4gkwgg4ccww8oc4s8w0soog/docker-compose.yml up -d' +2026-Feb-04 14:34:34.310472 Error: mysql Pulling +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Pulling fs layer +2026-Feb-04 14:34:34.310472 d9bba75f9c49 Pulling fs layer +2026-Feb-04 14:34:34.310472 d7842cc74782 Pulling fs layer +2026-Feb-04 14:34:34.310472 ce1944d72bca Pulling fs layer +2026-Feb-04 14:34:34.310472 c21ebd7bbded Pulling fs layer +2026-Feb-04 14:34:34.310472 142c5fc9ea8a Pulling fs layer +2026-Feb-04 14:34:34.310472 526dbe6f3591 Pulling fs layer +2026-Feb-04 14:34:34.310472 b05b17de9630 Pulling fs layer +2026-Feb-04 14:34:34.310472 3145e04eb470 Pulling fs layer +2026-Feb-04 14:34:34.310472 f79b7cf07833 Pulling fs layer +2026-Feb-04 14:34:34.310472 b4f9f94601d6 Pulling fs layer +2026-Feb-04 14:34:34.310472 526dbe6f3591 Waiting +2026-Feb-04 14:34:34.310472 b05b17de9630 Waiting +2026-Feb-04 14:34:34.310472 3145e04eb470 Waiting +2026-Feb-04 14:34:34.310472 f79b7cf07833 Waiting +2026-Feb-04 14:34:34.310472 b4f9f94601d6 Waiting +2026-Feb-04 14:34:34.310472 ce1944d72bca Waiting +2026-Feb-04 14:34:34.310472 c21ebd7bbded Waiting +2026-Feb-04 14:34:34.310472 142c5fc9ea8a Waiting +2026-Feb-04 14:34:34.310472 d7842cc74782 Downloading [> ] 9.165kB/783.6kB +2026-Feb-04 14:34:34.310472 d7842cc74782 Verifying Checksum +2026-Feb-04 14:34:34.310472 d7842cc74782 Download complete +2026-Feb-04 14:34:34.310472 d9bba75f9c49 Downloading [==================================================>] 884B/884B +2026-Feb-04 14:34:34.310472 d9bba75f9c49 Verifying Checksum +2026-Feb-04 14:34:34.310472 d9bba75f9c49 Download complete +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [> ] 475.1kB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [====> ] 3.817MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [=======> ] 7.18MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [=============> ] 12.96MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [===================> ] 18.22MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [======================> ] 21.1MB/47.31MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Downloading [> ] 63.22kB/6.175MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [===========================> ] 25.9MB/47.31MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Downloading [=============================> ] 3.604MB/6.175MB +2026-Feb-04 14:34:34.310472 c21ebd7bbded Downloading [==================> ] 953B/2.608kB +2026-Feb-04 14:34:34.310472 c21ebd7bbded Downloading [==================================================>] 2.608kB/2.608kB +2026-Feb-04 14:34:34.310472 c21ebd7bbded Verifying Checksum +2026-Feb-04 14:34:34.310472 c21ebd7bbded Download complete +2026-Feb-04 14:34:34.310472 ce1944d72bca Downloading [==============================================> ] 5.718MB/6.175MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [===============================> ] 29.72MB/47.31MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Verifying Checksum +2026-Feb-04 14:34:34.310472 ce1944d72bca Download complete +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [===================================> ] 34.01MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [=======================================> ] 37.83MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [==============================================> ] 43.55MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Downloading [=================================================> ] 46.43MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Verifying Checksum +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Download complete +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [> ] 491.5kB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [=> ] 983kB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [==> ] 2.458MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [======> ] 6.39MB/47.31MB +2026-Feb-04 14:34:34.310472 142c5fc9ea8a Downloading [==================================================>] 331B/331B +2026-Feb-04 14:34:34.310472 142c5fc9ea8a Verifying Checksum +2026-Feb-04 14:34:34.310472 142c5fc9ea8a Download complete +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [=======> ] 7.373MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [=========> ] 9.339MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [============> ] 11.8MB/47.31MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [===============> ] 14.25MB/47.31MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [> ] 507.9kB/49.93MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [===================> ] 18.19MB/47.31MB +2026-Feb-04 14:34:34.310472 b05b17de9630 Downloading [==================================================>] 317B/317B +2026-Feb-04 14:34:34.310472 b05b17de9630 Verifying Checksum +2026-Feb-04 14:34:34.310472 b05b17de9630 Download complete +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [====> ] 4.571MB/49.93MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [======================> ] 21.63MB/47.31MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [===========> ] 11.14MB/49.93MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [=========================> ] 24.58MB/47.31MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [==============> ] 14.17MB/49.93MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [==============================> ] 28.51MB/47.31MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [===================> ] 19.74MB/49.93MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [================================> ] 30.97MB/47.31MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [=====================> ] 21.77MB/49.93MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [=================================> ] 31.95MB/47.31MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [=============================> ] 29.38MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [> ] 540.7kB/128.1MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [===================================> ] 33.42MB/47.31MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [===============================> ] 31.4MB/49.93MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [=========================================> ] 38.83MB/47.31MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=> ] 2.671MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [=====================================> ] 37.47MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=> ] 3.736MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [========================================> ] 39.98MB/49.93MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [===========================================> ] 41.29MB/47.31MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Downloading [===============================================> ] 47.05MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=> ] 4.817MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Download complete +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [=============================================> ] 42.76MB/47.31MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==> ] 5.898MB/128.1MB +2026-Feb-04 14:34:34.310472 f79b7cf07833 Downloading [============> ] 1.369kB/5.33kB +2026-Feb-04 14:34:34.310472 f79b7cf07833 Download complete +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==> ] 7.512MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===> ] 9.126MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===> ] 10.21MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [====> ] 11.27MB/128.1MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [==============================================> ] 44.24MB/47.31MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [====> ] 12.34MB/128.1MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [================================================> ] 46.2MB/47.31MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=====> ] 12.88MB/128.1MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Extracting [==================================================>] 47.31MB/47.31MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=====> ] 14.48MB/128.1MB +2026-Feb-04 14:34:34.310472 c21bb7e51cd3 Pull complete +2026-Feb-04 14:34:34.310472 d9bba75f9c49 Extracting [==================================================>] 884B/884B +2026-Feb-04 14:34:34.310472 d9bba75f9c49 Extracting [==================================================>] 884B/884B +2026-Feb-04 14:34:34.310472 b4f9f94601d6 Downloading [==================================================>] 122B/122B +2026-Feb-04 14:34:34.310472 b4f9f94601d6 Verifying Checksum +2026-Feb-04 14:34:34.310472 b4f9f94601d6 Download complete +2026-Feb-04 14:34:34.310472 d9bba75f9c49 Pull complete +2026-Feb-04 14:34:34.310472 d7842cc74782 Extracting [==> ] 32.77kB/783.6kB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [======> ] 16.63MB/128.1MB +2026-Feb-04 14:34:34.310472 d7842cc74782 Extracting [==================================================>] 783.6kB/783.6kB +2026-Feb-04 14:34:34.310472 d7842cc74782 Extracting [==================================================>] 783.6kB/783.6kB +2026-Feb-04 14:34:34.310472 d7842cc74782 Pull complete +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=======> ] 18.24MB/128.1MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Extracting [> ] 65.54kB/6.175MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Extracting [============> ] 1.507MB/6.175MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=======> ] 19.31MB/128.1MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Extracting [====================> ] 2.49MB/6.175MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Extracting [=================================> ] 4.129MB/6.175MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [========> ] 20.92MB/128.1MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Extracting [==================================================>] 6.175MB/6.175MB +2026-Feb-04 14:34:34.310472 ce1944d72bca Pull complete +2026-Feb-04 14:34:34.310472 c21ebd7bbded Extracting [==================================================>] 2.608kB/2.608kB +2026-Feb-04 14:34:34.310472 c21ebd7bbded Extracting [==================================================>] 2.608kB/2.608kB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [========> ] 23.06MB/128.1MB +2026-Feb-04 14:34:34.310472 c21ebd7bbded Pull complete +2026-Feb-04 14:34:34.310472 142c5fc9ea8a Extracting [==================================================>] 331B/331B +2026-Feb-04 14:34:34.310472 142c5fc9ea8a Extracting [==================================================>] 331B/331B +2026-Feb-04 14:34:34.310472 142c5fc9ea8a Pull complete +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [> ] 524.3kB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=========> ] 24.66MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [===> ] 3.67MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==========> ] 26.27MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [======> ] 6.291MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==========> ] 27.88MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [========> ] 8.913MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===========> ] 28.41MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [===========> ] 11.01MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===========> ] 30MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [=============> ] 13.63MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [============> ] 31.08MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [===============> ] 15.2MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [============> ] 32.69MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [================> ] 16.78MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=============> ] 34.31MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [=================> ] 17.83MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=============> ] 35.39MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [===================> ] 19.92MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==============> ] 37MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [======================> ] 22.02MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===============> ] 39.15MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [=========================> ] 25.69MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===============> ] 39.68MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [==============================> ] 30.41MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [================> ] 41.29MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [==================================> ] 34.6MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [================> ] 42.36MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [=====================================> ] 37.75MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=================> ] 43.97MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [=======================================> ] 39.32MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=================> ] 46.11MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [==========================================> ] 42.47MB/49.93MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [=============================================> ] 45.09MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==================> ] 47.19MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [===============================================> ] 47.71MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===================> ] 48.81MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Extracting [==================================================>] 49.93MB/49.93MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===================> ] 50.94MB/128.1MB +2026-Feb-04 14:34:34.310472 526dbe6f3591 Pull complete +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [====================> ] 52.01MB/128.1MB +2026-Feb-04 14:34:34.310472 b05b17de9630 Extracting [==================================================>] 317B/317B +2026-Feb-04 14:34:34.310472 b05b17de9630 Extracting [==================================================>] 317B/317B +2026-Feb-04 14:34:34.310472 b05b17de9630 Pull complete +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [====================> ] 53.62MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=====================> ] 55.77MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [======================> ] 56.84MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=======================> ] 58.98MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=======================> ] 60.05MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [========================> ] 61.65MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=========================> ] 64.32MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=========================> ] 64.86MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==========================> ] 66.99MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===========================> ] 70.21MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [============================> ] 72.88MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=============================> ] 75.02MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=============================> ] 76.1MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==============================> ] 78.77MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===============================> ] 80.91MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [================================> ] 82.51MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [================================> ] 84.12MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=================================> ] 86.25MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==================================> ] 87.85MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===================================> ] 89.96MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===================================> ] 92.09MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [====================================> ] 93.16MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=====================================> ] 95.31MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [======================================> ] 97.46MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [======================================> ] 99.59MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=======================================> ] 100.6MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [========================================> ] 102.8MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [========================================> ] 104.4MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=========================================> ] 105.5MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=========================================> ] 107.1MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==========================================> ] 108.2MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==========================================> ] 109.8MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===========================================> ] 110.9MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [============================================> ] 113MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [============================================> ] 114.1MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=============================================> ] 115.7MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=============================================> ] 117.8MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==============================================> ] 118.4MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [==============================================> ] 120MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===============================================> ] 121MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [===============================================> ] 122.6MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [================================================> ] 124.2MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [================================================> ] 125.3MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Downloading [=================================================> ] 126.9MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Verifying Checksum +2026-Feb-04 14:34:34.310472 3145e04eb470 Download complete +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [> ] 557.1kB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=> ] 3.899MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===> ] 7.799MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [====> ] 10.58MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=====> ] 12.81MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=====> ] 15.04MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [======> ] 17.83MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=======> ] 19.5MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [========> ] 21.73MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=========> ] 23.95MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=========> ] 25.07MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==========> ] 27.85MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===========> ] 28.97MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [============> ] 31.2MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [============> ] 31.75MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [============> ] 32.31MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [============> ] 32.87MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=============> ] 33.42MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=============> ] 33.98MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=============> ] 34.54MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=============> ] 35.09MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=============> ] 35.65MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==============> ] 36.21MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==============> ] 36.77MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==============> ] 37.32MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==============> ] 37.88MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===============> ] 38.44MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===============> ] 38.99MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===============> ] 39.55MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===============> ] 40.11MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===============> ] 40.67MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [================> ] 41.22MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [================> ] 41.78MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [================> ] 42.34MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [================> ] 42.89MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [================> ] 43.45MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=================> ] 44.01MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=================> ] 44.56MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=================> ] 45.12MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=================> ] 45.68MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==================> ] 46.79MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==================> ] 47.35MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==================> ] 48.46MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===================> ] 49.02MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===================> ] 50.14MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [====================> ] 52.36MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=====================> ] 56.26MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=======================> ] 59.6MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [========================> ] 61.83MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=========================> ] 64.62MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==========================> ] 67.96MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===========================> ] 70.75MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [============================> ] 72.97MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=============================> ] 75.76MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==============================> ] 79.1MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [================================> ] 82.44MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=================================> ] 84.67MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=================================> ] 86.9MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==================================> ] 89.13MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===================================> ] 90.8MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [====================================> ] 92.47MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [====================================> ] 94.7MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [======================================> ] 98.6MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [========================================> ] 103.6MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=========================================> ] 105.8MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===========================================> ] 110.3MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [=============================================> ] 115.9MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [===============================================> ] 121.4MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [================================================> ] 123.1MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [================================================> ] 125.3MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==================================================>] 128.1MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Extracting [==================================================>] 128.1MB/128.1MB +2026-Feb-04 14:34:34.310472 3145e04eb470 Pull complete +2026-Feb-04 14:34:34.310472 f79b7cf07833 Extracting [==================================================>] 5.33kB/5.33kB +2026-Feb-04 14:34:34.310472 f79b7cf07833 Extracting [==================================================>] 5.33kB/5.33kB +2026-Feb-04 14:34:34.310472 f79b7cf07833 Pull complete +2026-Feb-04 14:34:34.310472 b4f9f94601d6 Extracting [==================================================>] 122B/122B +2026-Feb-04 14:34:34.310472 b4f9f94601d6 Extracting [==================================================>] 122B/122B +2026-Feb-04 14:34:34.310472 b4f9f94601d6 Pull complete +2026-Feb-04 14:34:34.310472 mysql Pulled +2026-Feb-04 14:34:34.310472 Volume "p4w4csg8kcocs00s480w40cs_app-storage" Creating +2026-Feb-04 14:34:34.310472 Volume "p4w4csg8kcocs00s480w40cs_app-storage" Created +2026-Feb-04 14:34:34.310472 Volume "p4w4csg8kcocs00s480w40cs_mysql-data" Creating +2026-Feb-04 14:34:34.310472 Volume "p4w4csg8kcocs00s480w40cs_mysql-data" Created +2026-Feb-04 14:34:34.310472 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Creating +2026-Feb-04 14:34:34.310472 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Created +2026-Feb-04 14:34:34.310472 Container app-p4w4csg8kcocs00s480w40cs-142727814627 Creating +2026-Feb-04 14:34:34.310472 Container app-p4w4csg8kcocs00s480w40cs-142727814627 Created +2026-Feb-04 14:34:34.310472 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Starting +2026-Feb-04 14:34:34.310472 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Started +2026-Feb-04 14:34:34.310472 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Waiting +2026-Feb-04 14:34:34.310472 Container mysql-p4w4csg8kcocs00s480w40cs-142727859689 Healthy +2026-Feb-04 14:34:34.310472 Container app-p4w4csg8kcocs00s480w40cs-142727814627 Starting +2026-Feb-04 14:34:34.310472 Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint app-p4w4csg8kcocs00s480w40cs-142727814627 (55fb03153653172f944b9b47ead20b816a3f8c00a6b3cad069185d7f84a3712e): Bind for 0.0.0.0:8000 failed: port is already allocated +2026-Feb-04 14:34:34.310472 exit status 1 +2026-Feb-04 14:34:34.373070 Error type: RuntimeException +2026-Feb-04 14:34:34.437663 Error code: 0 +2026-Feb-04 14:34:34.497571 Location: /var/www/html/app/Traits/ExecuteRemoteCommand.php:243 +2026-Feb-04 14:34:34.572236 Stack trace (first 5 lines): diff --git a/dewemoji-admin-walkthrough.md b/dewemoji-admin-walkthrough.md new file mode 100644 index 0000000..34ae8ed --- /dev/null +++ b/dewemoji-admin-walkthrough.md @@ -0,0 +1,115 @@ +# Dewemoji Admin Dashboard Walkthrough + +This guide explains how to access and operate the admin dashboard, plus how each section is wired in the current build. + +## Access + +1. Sign in with an admin user (role `admin`). +2. Navigate to `/dashboard/admin/*` routes. +3. The sidebar automatically shows admin navigation when the session user is admin. + +## Admin Sections + +### Analytics + +Route: `/dashboard/admin/analytics` +What it shows: +- User totals, active subscriptions, webhook counts +- Recent webhook events + +Data source: +- Direct database counts via `AdminDashboardController::analytics()` + +### Users + +Route: `/dashboard/admin/users` +What it shows: +- User list (latest 50) +- Filters: search, tier, role +- Inline tier update (free/personal) + +Actions: +- Update tier: POST `/dashboard/admin/users/tier` + +### Subscriptions + +Route: `/dashboard/admin/subscriptions` +What it shows: +- Subscription list (latest 50) +- Grant/revoke forms + +Actions: +- Grant: POST `/dashboard/admin/subscriptions/grant` +- Revoke: POST `/dashboard/admin/subscriptions/revoke` + +Notes: +- Granting an active subscription automatically sets user tier to `personal`. +- Revoking updates the user tier based on remaining active subscriptions. + +### Pricing + +Route: `/dashboard/admin/pricing` +What it shows: +- Pricing plans with editable fields +- Change log (latest 5) + +Actions: +- Update pricing: POST `/dashboard/admin/pricing/update` +- Reset to defaults: POST `/dashboard/admin/pricing/reset` + +Notes: +- Updates are stored in `pricing_plans`. +- Each change logs a snapshot to `pricing_changes`. + +### Webhooks + +Route: `/dashboard/admin/webhooks` +What it shows: +- Recent webhook events (latest 50) +- Replay action per event + +Actions: +- Replay: POST `/dashboard/admin/webhooks/{id}/replay` + +Notes: +- Replay marks the event as `pending`. (Actual processing should be handled by the webhook processor job/worker.) + +### Settings + +Route: `/dashboard/admin/settings` +What it shows: +- Current environment config summaries +- Editable settings for public access + maintenance mode + +Actions: +- Update settings: POST `/dashboard/admin/settings/update` + +Settings stored: +- `maintenance_enabled` (bool) +- `public_enforce` (bool) +- `public_origins` (array) +- `public_extension_ids` (array) +- `public_hourly_limit` (int) + +## Admin Routes Reference + +- GET `/dashboard/admin/analytics` +- GET `/dashboard/admin/users` +- POST `/dashboard/admin/users/tier` +- GET `/dashboard/admin/subscriptions` +- POST `/dashboard/admin/subscriptions/grant` +- POST `/dashboard/admin/subscriptions/revoke` +- GET `/dashboard/admin/pricing` +- POST `/dashboard/admin/pricing/update` +- POST `/dashboard/admin/pricing/reset` +- GET `/dashboard/admin/webhooks` +- POST `/dashboard/admin/webhooks/{id}/replay` +- GET `/dashboard/admin/settings` +- POST `/dashboard/admin/settings/update` + +## Notes for Future Wiring + +- Replace placeholder analytics charts with real metrics/graphs. +- Add pagination + sorting for users, subscriptions, and webhooks. +- Add confirmation dialogs for destructive actions. +- Wire replay to actual processor/job queue if needed. diff --git a/dewemoji-direction-2026.md b/dewemoji-direction-2026.md new file mode 100755 index 0000000..fe934d9 --- /dev/null +++ b/dewemoji-direction-2026.md @@ -0,0 +1,641 @@ +# Dewemoji Product Direction & Strategy Brief + +**Version:** 2.0 +**Date:** February 8, 2026 +**Author:** Dwindi (Project Owner) + +--- + +## Executive Summary + +Dewemoji pivots from a public community-driven emoji dictionary to a **personal emoji library platform** where users build, sync, and own their keyword vocabularies across devices. This eliminates moderation overhead, AI costs, and public abuse risks while monetizing the core unique value: **private, multilingual keyword customization + seamless sync**. + +**New Tagline:** *"Your words → your emojis, anywhere"* + +--- + +## 1. Vision & Mission + +### Vision +Enable everyone to find and use emojis using *their* language, slang, and personal vocabulary—without language barriers or platform limitations. + +### Mission +Provide a semantic emoji discovery platform that: +- Offers unlimited free public search (EN/ID + semantic matching) +- Lets users create private, personal keyword libraries (any language, any script) +- Syncs personal libraries across web, extensions, and future apps +- Removes friction from emoji usage in daily communication + +### Core Problem Being Solved +"I spent too much time finding an emoji because I think in my language/slang ('bekicot' for 🐌), and most tools only understand English keywords." + +--- + +## 2. Strategic Pivot: Why Private-Only Keywords + +### Previous Model (Abandoned) +- Public community keyword submissions +- Voting/moderation for global searchability +- AI moderation for toxicity +- SEO feeding from user keywords + +### Problems with Previous Model +1. **AI moderation costs** haunting scalability +2. **Moral responsibility** for public bad words feeding internet +3. **Unclear monetization** (who pays for emoji stuff?) +4. **Complexity** managing voting, thresholds, public curation + +### New Model (Adopted) +- **Fully private user keyword libraries** +- No public submissions, no voting, no AI moderation +- Users own and control their keywords (stored per account) +- Public search stays free and unlimited (referrer-whitelisted) + +### Benefits +✅ **Zero moderation burden** (private = user's responsibility) +✅ **No AI costs** (no content filtering needed) +✅ **Clear monetization** (pay for personal sync, not public features) +✅ **Moral simplicity** (no liability for user's private words) +✅ **Technical simplicity** (CRUD keywords per user_id) + +--- + +## 3. Monetization Model + +### Core Principle +**"Free discovery → Paid personalization"** + +Users get unlimited free public search to discover and love the product, then upgrade to sync their personal vocabulary. + +### Tiers + +| Feature | Free | Personal ($4.99/mo) | +|---------|------|---------------------| +| **Public emoji search** | ✅ Unlimited (EN/ID keywords) | ✅ Unlimited | +| **Search result limit** | ✅ No limits | ✅ No limits | +| **Skintone variations** | ✅ Free | ✅ Free | +| **Copy to clipboard** | ✅ Free | ✅ Free | +| **Auto-Insert to page** | ✅ Free (viral hook!) | ✅ Free | +| **Automatic mode** | ✅ Free | ✅ Free | +| **Private keywords** | ❌ Not available | ✅ Unlimited CRUD | +| **Keyword sync** | ❌ Not available | ✅ Cross-device/app | +| **API keys** | ❌ Not available | ✅ Generate/revoke | +| **Dashboard access** | ❌ Not available | ✅ Full management | + +### Tier Naming +- **Free** → stays "Free" +- **Pro** → renamed to **"Personal"** (reflects private/personal keywords, not business/pro tools) + +### Pricing Options +- **Monthly:** $4.99/month (Stripe subscription) +- **Annual:** $49/year (~$4.08/month, 17% savings) +- **Lifetime:** $99 (one-time, early adopter offer) + +### Payment Flexibility +Self-generated API keys mean **any payment provider works**: +- Stripe (primary, global) +- Paddle (backup) +- Midtrans/Xendit (Indonesia localization) +- No dependency on Gumroad license keys + +--- + +## 4. Channel Roles & User Flows + +### 4.1 Website (dewemoji.com) + +#### Non-Logged Users +**Purpose:** Free discovery & viral entry point + +**Features:** +- Search emojis by public keywords (EN/ID) +- Browse by category/subcategory +- Copy emojis to clipboard +- View emoji details (unified, codepoints, shortcodes) +- No account required + +**CTA:** "Want your own keywords like 'bekicot'? → Sign Up Free" + +#### Logged Users (Free Account) +**Purpose:** Dashboard teaser + +**Features:** +- View personal keywords section (muted/disabled with upgrade prompt) +- View API keys section (muted/disabled) +- Access to upgrade flow +- Search still unlimited (public keywords) + +**State:** "You have 0 personal keywords. Upgrade to Personal to create unlimited." + +#### Logged Users (Personal Tier) +**Purpose:** Full keyword management hub + +**Features:** +- **Keyword Management:** + - Table view: emoji | your keywords | language | actions (edit/delete) + - Add new keyword: select emoji → enter keyword(s) → set language → save + - Bulk import/export (JSON) +- **API Key Management:** + - Generate new keys (dew_abc123...) + - Revoke keys + - Copy to clipboard (for extension login) + - View usage stats per key (future) +- **Billing Dashboard:** + - Current plan status + - Payment history table (date, amount, status, invoice) + - Upgrade/downgrade/cancel buttons + - Next billing date + +**Navigation:** +``` +Dashboard +├─ Search (always visible) +├─ My Keywords +├─ API Keys +└─ Billing +``` + +--- + +### 4.2 Chrome Extension + +**Purpose:** Viral growth engine + seamless Personal upsell + +#### Free Features (Unlimited, No Limits) +- Search public emoji keywords (EN/ID + semantic) +- Skintone variations +- Copy to clipboard +- **Auto-Insert** (click emoji → inserts at cursor position) +- **Automatic mode** (detect input → insert; else copy) +- No daily/hourly limits +- No login required for public search + +#### Personal Features (Requires Login) +- Search blends **private + public** keywords +- Personal keywords auto-sync from dashboard +- API key authentication (stored securely in chrome.storage) + +#### Auth Flow +1. User clicks "Link Account" in extension settings +2. Login popup (email/password) → POST /v1/user/login +3. Extension receives + stores API key +4. All searches now include Authorization: Bearer header +5. Results blend user's private keywords + public semantic data + +#### Upgrade Prompt +- Trigger: User searches term matching no public results +- Message: "Not found in public keywords. Create 'bekicot → 🐌' in your Personal library?" +- CTA: Opens dewemoji.com/upgrade in new tab + +--- + +### 4.3 API (Backend) + +**Purpose:** Single source of truth for all channels + +#### Public Endpoints (Free, Referrer-Whitelisted) +``` +GET /v1/emojis # Search/browse public keywords +GET /v1/emoji/:slug # Emoji detail +GET /v1/categories # Category list +GET /v1/health # Health check +``` + +**Whitelist Rules:** +- `Origin: https://dewemoji.com` +- `User-Agent: ...chrome-extension://elcikbedkbpkmdhkcmfnkdaacmnpdmha...` +- `Origin: localhost | 127.0.0.1` (dev) + +**Rate Limit:** Soft throttle at 5000 requests/hour/IP (invisible to real users, stops bombers) + +#### User Endpoints (Authentication Required) +``` +POST /v1/user/register # Create account +POST /v1/user/login # Login → returns api_keys +POST /v1/user/logout # Invalidate session +``` + +#### Personal Tier Endpoints (API Key Required) +``` +# Keyword CRUD +GET /v1/keywords # List user's private keywords +POST /v1/keywords # Create/update keyword +DELETE /v1/keywords/:id # Delete keyword +GET /v1/search?private=true # Search (private + public blend) + +# API Key Management +GET /v1/user/apikeys # List user's keys +POST /v1/user/apikeys # Generate new key +DELETE /v1/user/apikeys/:key # Revoke key +``` + +**Authentication:** +- Header: `Authorization: Bearer dew_abc123...` +- Validation: Lookup in `user_api_keys` table → verify user_id has active Personal subscription + +--- + +## 5. Technical Implementation + +### 5.1 Database Schema Changes + +#### New Tables + +```sql +-- Users table +users ( + id UUID PRIMARY KEY, + email VARCHAR UNIQUE NOT NULL, + password_hash VARCHAR NOT NULL, + tier ENUM('free', 'personal') DEFAULT 'free', + created_at TIMESTAMP, + updated_at TIMESTAMP +) + +-- API keys table +user_api_keys ( + id UUID PRIMARY KEY, + user_id UUID REFERENCES users(id), + key VARCHAR(64) UNIQUE NOT NULL, -- e.g., dew_abc123... + name VARCHAR(100), -- optional label + created_at TIMESTAMP, + last_used_at TIMESTAMP, + revoked_at TIMESTAMP NULL +) + +-- Private keywords table +user_keywords ( + id UUID PRIMARY KEY, + user_id UUID REFERENCES users(id), + emoji_slug VARCHAR NOT NULL, -- references existing emoji dataset + keyword VARCHAR(200) NOT NULL, + lang VARCHAR(10) NOT NULL, -- ISO code or 'slang' + created_at TIMESTAMP, + updated_at TIMESTAMP, + UNIQUE(user_id, emoji_slug, keyword) +) + +-- Subscriptions table (for billing) +subscriptions ( + id UUID PRIMARY KEY, + user_id UUID REFERENCES users(id), + plan VARCHAR(20), -- 'monthly', 'annual', 'lifetime' + status ENUM('active', 'canceled', 'expired'), + started_at TIMESTAMP, + expires_at TIMESTAMP NULL, + stripe_subscription_id VARCHAR NULL +) +``` + +### 5.2 API Validation Flow + +**For Public Endpoints:** +``` +1. Check Origin/Referer/User-Agent +2. If whitelisted → allow unlimited +3. Else → require valid API key (Personal tier) +4. Apply soft IP throttle (5000/hour) +``` + +**For Personal Endpoints:** +``` +1. Extract Authorization: Bearer +2. Lookup key in user_api_keys (not revoked) +3. Lookup user_id → verify subscriptions.status = 'active' +4. If valid → proceed +5. Else → 401 Unauthorized +``` + +### 5.3 Search Logic (Private + Public Blend) + +**Endpoint:** `GET /v1/search?q=bekicot&private=true` + +**Algorithm:** +``` +1. If private=true and valid API key: + a. Query user_keywords WHERE user_id=X AND keyword LIKE '%bekicot%' + b. Query public emojis.json WHERE keywords LIKE '%bekicot%' + c. Merge results (private first, then public) + d. Deduplicate by emoji_slug + +2. If private=false or no API key: + a. Query public emojis.json only + +3. Return unified response +``` + +### 5.4 API Key Generation + +**Format:** `dew_{random_32_chars}` + +**Example:** `dew_k7j3m9q2n8p4r6s1t5v8w0x2y4z7a9c1` + +**Generation:** +```php +function generateApiKey() { + return 'dew_' . bin2hex(random_bytes(16)); +} +``` + +**Storage:** Hashed (bcrypt) or plain (with secure storage + HTTPS) + +--- + +## 6. Migration Strategy + +### Phase 1: Foundation (Week 1-2) +**Backend:** +- [ ] Create database tables (users, user_api_keys, user_keywords, subscriptions) +- [ ] Build auth endpoints (register, login, logout) +- [ ] Build API key CRUD endpoints +- [ ] Build private keyword CRUD endpoints +- [ ] Implement referrer whitelisting logic +- [ ] Update search endpoint to blend private + public + +**Frontend (Website):** +- [ ] Build registration/login UI +- [ ] Build dashboard with tabs (Keywords, API Keys, Billing) +- [ ] Build keyword management table (CRUD interface) +- [ ] Build API key management UI +- [ ] Add upgrade CTAs for free users + +**Testing:** +- [ ] Test auth flow +- [ ] Test keyword CRUD +- [ ] Test search blending (private + public) +- [ ] Test referrer whitelisting + +### Phase 2: Extension Integration (Week 3) +**Extension Update:** +- [ ] Add "Link Account" button in settings +- [ ] Build login popup (OAuth-style or simple form) +- [ ] Store API key in chrome.storage.sync +- [ ] Update search to send Authorization header when logged in +- [ ] Update UI to show "Signed in as {email}" +- [ ] Add logout button +- [ ] Add upgrade prompt on private keyword miss + +**Testing:** +- [ ] Test login flow from extension +- [ ] Test private keyword search from extension +- [ ] Test auto-insert with private keywords +- [ ] Test logout/revoke flow + +### Phase 3: Payment Integration (Week 4) +**Stripe Setup:** +- [ ] Create Stripe products (Monthly, Annual, Lifetime) +- [ ] Build checkout flow (dewemoji.com/upgrade) +- [ ] Build webhook handler (subscription created/updated/canceled) +- [ ] Update subscriptions table on payment events +- [ ] Build billing dashboard (payment history, cancel) + +**Testing:** +- [ ] Test full upgrade flow (free → Personal) +- [ ] Test subscription renewal +- [ ] Test cancellation +- [ ] Test lifetime purchase + +### Phase 4: Deprecation of Gumroad (Optional) +- [ ] Add migration tool for existing Gumroad license holders +- [ ] Offer 1-click conversion: paste license key → create account → auto-upgrade to Personal +- [ ] Send email to existing users with migration instructions +- [ ] Set sunset date for Gumroad validation (e.g., 90 days) + +--- + +## 7. Changes Required to Current Site + +### Homepage (dewemoji.com) +**Current:** General emoji search + copy +**Required Changes:** +- [ ] Add hero section: "Find emojis in *your* language. Add personal keywords like 'bekicot' → 🐌" +- [ ] Add CTA: "Search Free" + "Create Personal Library" +- [ ] Add feature comparison table (Free vs Personal) +- [ ] Update footer: Add "Pricing", "Dashboard", "API Docs" + +### Search Page +**Current:** Public search only +**Required Changes:** +- [ ] No changes for non-logged users +- [ ] For logged Personal users: blend private keywords in results +- [ ] Add badge on results: "Your keyword" vs "Public keyword" +- [ ] Add "Edit keyword" quick action on personal results + +### Emoji Detail Page +**Current:** Shows public keywords, metadata +**Required Changes:** +- [ ] Add "Add to my keywords" button (Personal users only) +- [ ] Quick add modal: "What do you call this? → [input] → Save" +- [ ] Show user's private keywords for this emoji (if any) +- [ ] Remove voting/public submission UI (deprecated) + +### New Pages to Build + +#### `/register` +- Email + password form +- "Continue with Google" (optional, future) +- Terms acceptance +- Auto-login after registration + +#### `/login` +- Email + password +- "Forgot password" link +- Redirect to dashboard after login + +#### `/dashboard` +**Tabs:** +1. **My Keywords** (default) + - Table: Emoji | Keywords | Language | Actions + - Add button → modal (search emoji → add keyword) + - Bulk import/export buttons + +2. **API Keys** + - List of keys with names + last used + - Generate button → creates new key + - Copy button + revoke button per key + +3. **Billing** + - Current plan badge + - Next billing date + - Payment history table + - Upgrade/downgrade/cancel buttons + +#### `/upgrade` or `/pricing` +- Feature comparison table (Free vs Personal) +- Pricing cards (Monthly $4.99 | Annual $49 | Lifetime $99) +- Stripe checkout integration +- FAQ section + +--- + +## 8. Marketing & Positioning + +### Target Audiences + +**Primary:** +1. **Multilingual communicators** (Indonesian, Korean, Japanese, etc.) + - Problem: "Emoji pickers don't understand my language" + - Hook: "Search in bahasa Indonesia: 'bekicot' → 🐌" + +2. **Heavy messengers** (WhatsApp, Discord, Twitter power users) + - Problem: "I use emojis 50+ times/day, default pickers suck" + - Hook: "Auto-insert emojis anywhere, instantly" + +3. **Content creators & social media managers** + - Problem: "Need specific emojis fast, can't waste time scrolling" + - Hook: "Your custom emoji library, synced everywhere" + +**Secondary:** +1. Developers needing semantic emoji API +2. Writers using emojis in documentation +3. Non-Latin language communities (Korean, Japanese, Russian) + +### Positioning Statements + +**For Indonesian users:** +*"Dewemoji adalah library emoji pribadi yang ngerti bahasa lo—dari 'bekicot' sampe slang gaul, semua bisa jadi shortcut emoji lo."* + +**For global users:** +*"Your personal emoji dictionary that speaks your language—sync your custom keywords across all your devices."* + +**For Chrome Web Store:** +*"Emoji search that understands you. Add personal keywords like 'snail' or 'bekicot'—works anywhere, syncs everywhere."* + +### Growth Channels + +1. **Chrome Web Store** + - Current: Already live (https://chromewebstore.google.com/detail/dewemoji...) + - Action: Update description with Personal tier benefits + - Strategy: Drive reviews via in-extension prompt ("Enjoying Dewemoji? Rate us!") + +2. **Indonesian tech communities** + - Reddit: r/indonesia, r/indonesian + - Kaskus, Discord servers (DevID, IndieHackers Indonesia) + - Messaging: "Finally, emoji search yang ngerti bahasa kita" + +3. **Product Hunt launch** + - Position: "Personal emoji library with multilingual keyword search" + - Hook: "Stop scrolling through emoji pickers—search in your language" + +4. **Twitter/X shares** + - User screenshots: "Look, I can search 'bekicot' now!" + - Developer shares: "Semantic emoji API that understands Indonesian slang" + +5. **SEO (organic)** + - Target: "emoji search [language]", "emoji picker indonesia", "find emoji by keyword" + - Content: Blog posts on emoji localization, multilingual search + +--- + +## 9. Success Metrics + +### Growth Metrics +- **Extension installs/month:** Target 1,000 → 10,000 in 6 months +- **Website MAU:** Target 5,000 → 50,000 in 6 months +- **Free → Personal conversion:** Target 2-5% (industry standard) + +### Revenue Metrics +- **MRR (Monthly Recurring Revenue):** Target $500 → $5,000 in 6 months +- **Annual plan adoption:** Target 30% of paid users +- **Lifetime purchases:** Target 10% of paid users + +### Usage Metrics +- **Avg searches/user/day:** Track engagement depth +- **Private keywords created/user:** Measure feature adoption +- **API key active usage:** Track cross-device sync adoption + +### Quality Metrics +- **Extension rating:** Maintain >4.5 stars +- **User retention (30-day):** Target >40% +- **Churn rate:** Target <10%/month for Personal tier + +--- + +## 10. Risks & Mitigation + +### Risk 1: Low conversion (free → Personal) +**Mitigation:** +- Make free tier extremely generous (unlimited searches, all features except private) +- Add in-context upgrade prompts ("Not found. Create this keyword in Personal?") +- Offer 7-day free trial on Personal tier + +### Risk 2: API abuse (free tier bombing) +**Mitigation:** +- Referrer whitelisting (already planned) +- Soft IP throttle (5000/hour) +- Monitor usage patterns; tighten if needed + +### Risk 3: Low awareness ("Who needs emoji search?") +**Mitigation:** +- Target pain-aware users (multilingual, heavy messengers) +- Leverage Chrome Web Store (existing 237M Chrome users search "emoji") +- Create viral hooks (screenshot-worthy Indonesian keyword searches) + +### Risk 4: Payment processor issues (Indonesia) +**Mitigation:** +- Start with Stripe (global, easiest) +- Add Midtrans/Xendit for local payment methods (bank transfer, e-wallet) +- Offer annual/lifetime for users without recurring billing access + +--- + +## 11. Next Steps (Immediate Actions) + +### Week 1: Backend Foundation +1. Design & implement database schema +2. Build auth system (register, login, JWT/session) +3. Build API key generation/validation +4. Build private keyword CRUD endpoints +5. Update search endpoint to blend private + public + +### Week 2: Frontend Dashboard +1. Build registration/login pages +2. Build dashboard layout (tabs: Keywords, API Keys, Billing) +3. Build keyword management table + CRUD UI +4. Build API key management UI +5. Add upgrade CTAs throughout free tier + +### Week 3: Extension Integration +1. Add "Link Account" in extension settings +2. Build login popup for extension +3. Store API key securely (chrome.storage) +4. Update search to send auth header when logged in +5. Add upgrade prompt on private keyword miss + +### Week 4: Payment & Launch +1. Set up Stripe products (Monthly, Annual, Lifetime) +2. Build checkout flow + webhook handler +3. Build billing dashboard +4. Test full user journey (register → add keywords → login in extension → search) +5. Soft launch to existing users + Indonesian tech communities + +--- + +## 12. Appendix: Key Decisions Made + +| Decision | Rationale | +|----------|-----------| +| **Private-only keywords (no public)** | Eliminates moderation costs, AI costs, legal risks, complexity | +| **Free unlimited public search** | Drives viral growth; users fall in love before paywall | +| **Auto-Insert free (not paid)** | Core viral hook; competitors lack this, users share screenshots | +| **Tier renamed: Pro → Personal** | "Personal" clarifies it's private keywords, not business tools | +| **Self-generated API keys** | Flexibility with any payment provider (Stripe, Paddle, local) | +| **Referrer whitelisting for free** | Protects API from abuse without limiting real users | +| **No search count limits** | Emoji tools die with limits; unlimited = frictionless growth | +| **Payment: $4.99/mo or $49/yr** | Coffee price for individuals; low friction, high volume model | + +--- + +## 13. Questions for Future Consideration + +1. **Team libraries:** Should Personal tier allow shared keyword libraries (e.g., family/team)? +2. **Mobile apps:** Native iOS/Android apps or continue web + extension focus? +3. **API marketplace:** Offer public API access for developers (separate paid tier)? +4. **Localization:** Add more default language packs (Korean, Japanese, Spanish)? +5. **AI assistance:** "Suggest keywords for this emoji based on my usage patterns"? + +--- + +**End of Brief** + +This document serves as the north star for Dewemoji's development through 2026. All implementation decisions should align with the principle: **"Free discovery → Paid personalization"** and the vision of enabling personal, multilingual emoji expression for everyone. \ No newline at end of file diff --git a/dewemoji-extension-notes.md b/dewemoji-extension-notes.md new file mode 100644 index 0000000..b59acdf --- /dev/null +++ b/dewemoji-extension-notes.md @@ -0,0 +1,64 @@ +# Dewemoji Extension Notes / To-Do + +## Context (Why paused) +- GCM token registration appears blocked or flaky in unpacked mode. +- Diagnostics show: token missing + "Asynchronous operation is pending". +- Likely need Web Store (unlisted) install to validate GCM/FCM end-to-end. + +--- + +## Priority A — GCM / Token +- Verify GCM/FCM token registration in a Web Store (unlisted) install. +- Confirm sender/project ID consistency across manifest + backend. +- Add dev-mode fallback token for local testing (unpacked). +- Add clear UI guidance when token missing (ex: “Unpacked builds may not support GCM”). +- Add retry + backoff messaging for token refresh. + +## Priority B — Diagnostics +- Keep diagnostics visible in settings (done). +- Add “Force token refresh” with timeout (done). +- Add copy-to-clipboard for diagnostics output. +- Show last error + timestamp (done). +- Add quick “Open service worker console” helper link (optional). + +## Priority C — License & Pro +- Verify license activation/deactivation flow with real API. +- Implement `/license/deactivate` endpoint and wire client. +- Add graceful handling for license server downtime. +- Confirm Pro actions (insert/auto) are blocked for free users. + +## Priority D — Insert / Auto +- Validate content script injection across common sites. +- Improve detection when no editable element exists. +- Add clearer user feedback when insert fails. + +## Priority E — Search / Performance +- Confirm caching + paging behavior is correct. +- Ensure auto-load sentinel doesn’t duplicate results. +- Test daily usage cap flow (free users). + +## Priority F — Tone UX +- Validate tone lock + preferred tone across sessions. +- Confirm policy list coverage vs Unicode updates. +- Accessibility checks for tone picker controls. + +## Priority G — UI / UX Polish +- Improve keyboard navigation in settings. +- Add tooltips for Pro features + diagnostics. +- Ensure error banners are theme-consistent. + +## Priority H — Release / Packaging +- Create unlisted Web Store listing for real-world testing. +- Document packaging flow + PEM usage for stable extension ID. +- Add release checklist (build, test, upload, verify). + +## Priority I — Security / Privacy +- Verify minimum permissions in `manifest.json`. +- Document local vs sync data storage. + +--- + +## Notes / Observations +- Unpacked installs often can’t obtain GCM tokens. +- CRX install is blocked by Chrome unless via Web Store. + diff --git a/dewemoji-ux-flow-brief.md b/dewemoji-ux-flow-brief.md new file mode 100755 index 0000000..7abbe55 --- /dev/null +++ b/dewemoji-ux-flow-brief.md @@ -0,0 +1,873 @@ +# Dewemoji User Flow & UX Brief + +**Version:** 1.0 +**Date:** February 8, 2026 +**Purpose:** Define seamless user experience across visitor → logged → paid states +**Related Doc:** dewemoji-direction-2026.md + +--- + +## Executive Summary + +Dewemoji implements a **hybrid quick-add flow** where Personal users can add keywords instantly from emoji detail pages (80% of use cases) while maintaining full CRUD power in the dashboard (20% management). This creates a frictionless progression: discovery → personalization → habit, without disrupting the free user experience. + +**Core UX Principle:** *"Add keywords where you discover emojis, manage them where you organize."* + +--- + +## 1. User State Definitions + +### 1.1 Visitor (Non-Logged) +**Who:** Anyone landing on dewemoji.com or using Chrome extension (no account) +**Intent:** Quick emoji search and usage +**Experience:** Zero friction, no login walls + +### 1.2 Free User (Logged, No Subscription) +**Who:** Registered account, free tier +**Intent:** Exploring Personal features, considering upgrade +**Experience:** Full free features + gentle upgrade hints + +### 1.3 Personal User (Logged, Paid) +**Who:** Active Personal subscription ($4.99/mo, $49/yr, or $99 lifetime) +**Intent:** Building and syncing personal keyword library +**Experience:** Full personalization power across all touchpoints + +--- + +## 2. Primary User Flows + +### 2.1 Discovery Flow (All Users) + +``` +User lands on dewemoji.com + ↓ +Search bar: "bekicot" + ↓ +Results page: 🐌 snail (public keywords: "snail, escargot") + ↓ +Click emoji → Detail page + ↓ +[State-dependent experience - see Section 3] +``` + +**Key Insight:** All users start here. Free discovery hooks them; Personal lets them own it. + +--- + +### 2.2 Personalization Flow (Personal Users) + +#### Primary: Quick Add from Detail Page (80% Usage) + +``` +Personal user searches "snail" + ↓ +Detail page shows: +┌─────────────────────────────────────┐ +│ 🐌 Snail │ +│ │ +│ Public Keywords: snail, escargot │ +│ │ +│ Your Keywords: (none yet) │ +│ [+ Add Your Keyword] │ +└─────────────────────────────────────┘ + ↓ +User clicks [+ Add Your Keyword] + ↓ +Inline modal appears: +┌─────────────────────────────────────┐ +│ What do you call this emoji? │ +│ ┌─────────────────────────────────┐│ +│ │ bekicot, siput ││ +│ └─────────────────────────────────┘│ +│ Language: [Indonesian ▾] │ +│ [Cancel] [Save Keyword] │ +└─────────────────────────────────────┘ + ↓ +Saves instantly → Toast: "Added 'bekicot' to your library ✓" + ↓ +Detail page now shows: +┌─────────────────────────────────────┐ +│ 🐌 Snail │ +│ │ +│ Public Keywords: snail, escargot │ +│ │ +│ Your Keywords: │ +│ • bekicot (ID) [edit] [×] │ +│ • siput (ID) [edit] [×] │ +│ [+ Add Another] │ +└─────────────────────────────────────┘ + ↓ +Next search: "bekicot" → 🐌 appears in results! +``` + +**Why This Flow:** +- **Contextual:** User is *already looking at* the emoji they want to name +- **Fast:** 2 clicks (add button → save), ~5 seconds total +- **Immediate gratification:** See change instantly in searches +- **Low friction:** No navigation away from discovery flow + +--- + +#### Secondary: Dashboard Management (20% Usage) + +**When Used:** +- Bulk editing/organizing keywords +- Reviewing all keywords at once +- Exporting/importing keyword libraries +- Fixing typos across multiple entries + +``` +User navigates to Dashboard → My Keywords tab + ↓ +Table view: +┌───────────────────────────────────────────────────────────┐ +│ Emoji | Your Keywords | Lang | Actions │ +├───────────────────────────────────────────────────────────┤ +│ 🐌 | bekicot, siput | ID | [Edit] [Delete] │ +│ 😊 | senyum, happy | ID | [Edit] [Delete] │ +│ 🔥 | api, fire, lit | ID | [Edit] [Delete] │ +└───────────────────────────────────────────────────────────┘ +[+ Add Keyword] [Import JSON] [Export JSON] [Search/Filter] + ↓ +User clicks [+ Add Keyword] + ↓ +Modal: Search emoji picker → Select 🎉 → Add keywords + ↓ +Saves to table → Auto-sync to extension +``` + +**Why Dashboard Exists:** +- Power users want bulk operations +- Easy to review/audit entire library +- Import/export for backup +- Edit mistakes without finding emoji again + +--- + +### 2.3 Upgrade Flow (Free → Personal) + +#### Trigger Points + +**1. On Detail Page (Soft Prompt)** +``` +Free user on emoji detail page sees: +┌─────────────────────────────────────┐ +│ 🐌 Snail │ +│ │ +│ Public Keywords: snail, escargot │ +│ │ +│ 💎 Want to add your own keywords? │ +│ like 'bekicot' or 'siput'? │ +│ [Upgrade to Personal →] │ +└─────────────────────────────────────┘ +``` + +**2. On Search Miss (Strong Prompt)** +``` +User searches "bekicot" → No results + ↓ +Results page shows: +┌─────────────────────────────────────┐ +│ No results for "bekicot" │ +│ │ +│ 💡 With Personal, you can create │ +│ "bekicot → 🐌" and sync it │ +│ everywhere. │ +│ [Try Personal Free for 7 Days] │ +└─────────────────────────────────────┘ +``` + +**3. From Extension (Contextual)** +``` +Extension user searches "bekicot" → Not found + ↓ +Extension shows inline banner: +"Add 'bekicot' to your library with Personal" +[Upgrade] button → Opens dewemoji.com/upgrade +``` + +**4. From Dashboard (Clear Path)** +``` +Free user clicks "My Keywords" tab + ↓ +Shows empty state: +┌─────────────────────────────────────┐ +│ 📚 Your Personal Keyword Library │ +│ │ +│ You have 0 keywords. │ +│ │ +│ Upgrade to Personal to: │ +│ ✓ Add unlimited keywords │ +│ ✓ Search in your language │ +│ ✓ Sync across all devices │ +│ │ +│ [Start 7-Day Free Trial] │ +└─────────────────────────────────────┘ +``` + +--- + +## 3. State-Dependent UI Elements + +### 3.1 Emoji Detail Page + +#### Visitor (Non-Logged) +```html + +
+

🐌 Snail

+
+

Keywords

+
    +
  • snail
  • +
  • escargot
  • +
  • slow
  • +
+
+ +
+

💡 Want to search in your language?

+ +
+
+``` + +#### Free User (Logged) +```html + +
+

🐌 Snail

+ +
+

Keywords

+
  • snail
  • escargot
+
+ +
+

Your Keywords

+
+

💎 Add personal keywords like 'bekicot'

+ +
+
+
+``` + +#### Personal User (Logged + Paid) +```html + +
+

🐌 Snail

+ +
+

Public Keywords

+
  • snail
  • escargot
  • slow
+
+ +
+

Your Keywords

+
    +
  • + bekicot + ID + + +
  • +
  • + siput + ID + + +
  • +
+ +
+
+ + + +

What do you call this emoji?

+ + + +
+``` + +--- + +### 3.2 Search Results Page + +#### All Users (Public Results) +```html +
+
+ 🐌 + Snail + snail +
+
+``` + +#### Personal User (Blended Results) +```html +
+ +
+ 🐌 + Snail + + bekicot + Your keyword + + +
+ + +
+ 🐌 + Snail + snail +
+
+``` + +--- + +### 3.3 Dashboard (Personal Users Only) + +```html +
+ + + +
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + +
EmojiYour KeywordsLanguageActions
🐌bekicot, siputID + + +
+
+
+``` + +--- + +## 4. API Endpoints for UX Flows + +### 4.1 Detail Page Quick Add + +**Fetch user's keywords for specific emoji:** +``` +GET /v1/emoji/:slug?include_user_keywords=true +Authorization: Bearer dew_abc123... + +Response: +{ + "emoji": {...}, + "public_keywords": ["snail", "escargot"], + "user_keywords": [ + {"id": "uk_1", "keyword": "bekicot", "lang": "id"}, + {"id": "uk_2", "keyword": "siput", "lang": "id"} + ] +} +``` + +**Add keyword from detail page:** +``` +POST /v1/keywords/quick +Authorization: Bearer dew_abc123... + +Body: +{ + "emoji_slug": "snail", + "keywords": ["bekicot", "siput"], + "lang": "id" +} + +Response: +{ + "success": true, + "added": ["bekicot", "siput"], + "emoji_slug": "snail" +} +``` + +**Edit single keyword:** +``` +PATCH /v1/keywords/:id +Authorization: Bearer dew_abc123... + +Body: +{ + "keyword": "bekicot kecil" +} +``` + +**Delete keyword:** +``` +DELETE /v1/keywords/:id +Authorization: Bearer dew_abc123... +``` + +--- + +### 4.2 Dashboard Bulk Operations + +**List all user keywords:** +``` +GET /v1/keywords?page=1&limit=50 +Authorization: Bearer dew_abc123... + +Response: +{ + "keywords": [ + { + "id": "uk_1", + "emoji_slug": "snail", + "emoji": "🐌", + "keyword": "bekicot", + "lang": "id", + "created_at": "2026-02-08T10:30:00Z" + } + // ... more + ], + "total": 47, + "page": 1 +} +``` + +**Bulk import:** +``` +POST /v1/keywords/import +Authorization: Bearer dew_abc123... + +Body: +{ + "keywords": [ + {"emoji_slug": "snail", "keywords": ["bekicot"], "lang": "id"}, + {"emoji_slug": "fire", "keywords": ["api"], "lang": "id"} + ] +} + +Response: +{ + "imported": 2, + "skipped": 0, + "errors": [] +} +``` + +**Export:** +``` +GET /v1/keywords/export?format=json +Authorization: Bearer dew_abc123... + +Response: (Download JSON file) +``` + +--- + +## 5. Frontend Implementation Specs + +### 5.1 Emoji Detail Page Changes + +**File:** `/pages/emoji/[slug].js` (or equivalent) + +**Required Elements:** + +1. **User keywords section** (Personal only) + - Fetch on page load: `GET /v1/emoji/:slug?include_user_keywords=true` + - Show list of user's keywords with edit/delete buttons + - Show "Add Keyword" button + +2. **Add keyword modal** + - Input: comma-separated keywords + - Dropdown: language selector (EN, ID, KO, JA, etc.) + - Save button → POST `/v1/keywords/quick` + - Success → update UI without page reload + +3. **Inline edit** + - Click "edit" → input becomes editable + - Save → PATCH `/v1/keywords/:id` + - Cancel → revert + +4. **Inline delete** + - Click "×" → confirm modal + - Yes → DELETE `/v1/keywords/:id` → remove from UI + +**State Management:** +```javascript +const [userKeywords, setUserKeywords] = useState([]); +const [isPersonal, setIsPersonal] = useState(false); + +// On mount +useEffect(() => { + if (user?.tier === 'personal') { + fetchUserKeywords(emojiSlug); + } +}, [emojiSlug, user]); + +// Add keyword +const handleAddKeyword = async (keywords, lang) => { + const result = await api.post('/keywords/quick', { + emoji_slug: emojiSlug, + keywords: keywords.split(',').map(k => k.trim()), + lang + }); + + if (result.success) { + fetchUserKeywords(emojiSlug); // Refresh list + toast.success('Keywords added!'); + } +}; +``` + +--- + +### 5.2 Dashboard Implementation + +**File:** `/pages/dashboard.js` + +**Tabs:** +1. My Keywords (default) +2. API Keys +3. Billing + +**My Keywords Tab Components:** + +```javascript +// Main table component + + +// Toolbar actions + + + + + + + +// Add keyword modal (with emoji picker) + +``` + +**Features:** +- Pagination (50 per page) +- Search/filter by keyword or emoji +- Bulk select + delete +- Sort by: date added, emoji name, language + +--- + +### 5.3 Upgrade Flow Pages + +**File:** `/pages/upgrade.js` or `/pages/pricing.js` + +**Components:** + +1. **Feature comparison table** + ```html + + + + + + + + + + + + + + + + + +
FeatureFreePersonal
Public emoji search✅ Unlimited✅ Unlimited
Private keywords✅ Unlimited
+ ``` + +2. **Pricing cards** + ```html +
+
+

Monthly

+

$4.99/mo

+ +
+ +
+

Lifetime

+

$99 once

+ +
+
+ ``` + +3. **Stripe checkout integration** + ```javascript + const handleCheckout = async (plan) => { + const session = await api.post('/stripe/checkout', { + plan, // 'monthly' | 'annual' | 'lifetime' + success_url: `${baseUrl}/dashboard?upgraded=true`, + cancel_url: `${baseUrl}/upgrade` + }); + + window.location.href = session.url; + }; + ``` + +--- + +## 6. UX Copy & Messaging + +### 6.1 Upgrade Prompts + +**Soft (Detail Page):** +> 💡 Want to search in your language? Add personal keywords like 'bekicot' for 🐌 +> [Upgrade to Personal →] + +**Strong (Search Miss):** +> No results for "bekicot" +> +> 💎 **Create your own keywords with Personal** +> Add "bekicot → 🐌" and sync it across all devices +> [Try Free for 7 Days] + +**Empty State (Dashboard):** +> 📚 **Your Personal Keyword Library** +> +> You have 0 keywords. +> +> Upgrade to Personal to: +> ✓ Add unlimited keywords +> ✓ Search in your language +> ✓ Sync across all devices +> +> [Start 7-Day Free Trial] + +--- + +### 6.2 Success Messages + +**After adding keyword:** +> ✓ Added "bekicot" to your library + +**After editing:** +> ✓ Keyword updated + +**After deleting:** +> ✓ Keyword removed + +**After upgrade:** +> 🎉 Welcome to Personal! Start adding your keywords. + +--- + +### 6.3 Error Messages + +**Duplicate keyword:** +> ⚠️ You already have "bekicot" for this emoji + +**Network error:** +> ❌ Couldn't save. Check your connection and try again. + +**Unauthorized:** +> 🔒 Please log in to add personal keywords + +--- + +## 7. Mobile Considerations + +### 7.1 Detail Page on Mobile + +- Add keyword button: **sticky bottom bar** (always visible) +- Modal: **full-screen** on mobile (easier typing) +- Keyword list: **swipeable cards** (swipe left to delete) + +### 7.2 Dashboard on Mobile + +- Tabs: **horizontal scroll** or bottom nav +- Table: **card view** (stack columns vertically) +- Actions: **swipe gestures** (edit/delete) + +--- + +## 8. Performance & Optimization + +### 8.1 Caching Strategy + +**Client-side:** +- Cache user keywords in localStorage/sessionStorage +- Only refetch when: + - User adds/edits/deletes + - Page reload after 5 minutes + +**API-side:** +- ETag support (already implemented) +- Cache user keywords per user_id (Redis) +- Invalidate on mutation + +### 8.2 Loading States + +**Detail page:** +``` +Loading user keywords... +└─ Skeleton: [▯▯▯▯] [▯▯▯] [▯▯▯▯▯] +``` + +**Dashboard:** +``` +Loading your library... +└─ Table skeleton (5 rows) +``` + +--- + +## 9. Analytics & Tracking + +### Key Events to Track + +**Discovery:** +- `emoji_viewed` (slug, user_tier) +- `public_search` (query, has_results) +- `search_miss` (query) → upgrade opportunity + +**Personalization:** +- `keyword_added` (method: 'quick_add' | 'dashboard') +- `keyword_edited` +- `keyword_deleted` +- `keywords_exported` + +**Conversion:** +- `upgrade_prompt_shown` (location: 'detail' | 'search' | 'dashboard') +- `upgrade_clicked` (location) +- `trial_started` +- `subscription_created` (plan: 'monthly' | 'annual' | 'lifetime') + +**Usage:** +- `private_keyword_searched` (query, has_results) +- `extension_synced` (keyword_count) + +--- + +## 10. Testing Checklist + +### 10.1 User State Tests + +- [ ] Visitor can search and view emoji details (no login) +- [ ] Visitor sees upgrade CTA (non-intrusive) +- [ ] Free user sees muted keyword section +- [ ] Free user can't add keywords without upgrade +- [ ] Personal user sees active keyword section +- [ ] Personal user can add keywords from detail page +- [ ] Personal user can edit/delete keywords inline + +### 10.2 Flow Tests + +- [ ] Quick add: add keyword → appears in list immediately +- [ ] Quick add: new keyword searchable instantly +- [ ] Dashboard: bulk add works correctly +- [ ] Dashboard: export downloads valid JSON +- [ ] Dashboard: import restores keywords +- [ ] Search: private keywords appear first in results +- [ ] Search: private keywords have "Your keyword" badge + +### 10.3 Edge Cases + +- [ ] Add duplicate keyword → shows error +- [ ] Delete last keyword for emoji → removes emoji from search +- [ ] Offline: queue mutations, sync when online +- [ ] Rate limit: show friendly error +- [ ] API error: show retry option + +--- + +## 11. Implementation Priority + +### Phase 1: Detail Page Quick Add (Week 1) +1. Add user keywords section to detail page +2. Build add keyword modal +3. Implement POST /keywords/quick endpoint +4. Add inline edit/delete + +### Phase 2: Search Blending (Week 1) +1. Update search to blend private + public +2. Add "Your keyword" badge to results +3. Show private matches first + +### Phase 3: Dashboard (Week 2) +1. Build My Keywords tab with table +2. Add bulk actions (import/export) +3. Implement search/filter + +### Phase 4: Upgrade Flow (Week 2) +1. Build upgrade prompts (detail, search miss, dashboard) +2. Create pricing page +3. Integrate Stripe checkout + +--- + +## 12. Open Questions & Future Enhancements + +1. **Keyword suggestions:** Should we suggest keywords based on emoji name/category? +2. **Keyboard shortcuts:** Quick add keyword with hotkey (Ctrl+K)? +3. **Recently added:** Show "Recently added keywords" widget on dashboard? +4. **Keyword collections:** Group keywords by category/theme? +5. **Sharing:** Allow users to share their keyword libraries with friends? + +--- + +**End of UX Brief** + +This document defines the seamless user experience for Dewemoji's core value proposition: instant, contextual personalization. Implementation should prioritize the detail page quick-add flow (80% of usage) while building dashboard for power users (20%). \ No newline at end of file diff --git a/env-migration-checklist.md b/env-migration-checklist.md new file mode 100644 index 0000000..ee2a9a5 --- /dev/null +++ b/env-migration-checklist.md @@ -0,0 +1,117 @@ +# .env Migration Checklist + +Use this to map legacy `dewemoji-live-backend/public_html/config/env.php` into NativePHP app `app/.env`. + +## 1) Local development (safe default) + +```env +APP_ENV=local +APP_DEBUG=true +APP_URL=http://127.0.0.1:8000 + +DB_CONNECTION=sqlite + +DEWEMOJI_BILLING_MODE=sandbox +DEWEMOJI_LICENSE_ACCEPT_ALL=false +DEWEMOJI_PRO_KEYS= + +DEWEMOJI_ALLOWED_ORIGINS=http://127.0.0.1:8000,http://localhost:8000 +DEWEMOJI_FRONTEND_HEADER=web-v1 +DEWEMOJI_FREE_DAILY_LIMIT=30 + +DEWEMOJI_GUMROAD_ENABLED=false +DEWEMOJI_MAYAR_ENABLED=false +``` + +## 2) Staging (real provider test) + +```env +APP_ENV=staging +APP_DEBUG=false +APP_URL=https://staging.your-domain.com + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=dewemojiAPI_DB +DB_USERNAME=... +DB_PASSWORD=... + +DEWEMOJI_BILLING_MODE=live +DEWEMOJI_LICENSE_ACCEPT_ALL=false +DEWEMOJI_PRO_KEYS= + +DEWEMOJI_ALLOWED_ORIGINS=https://staging.your-domain.com,https://dewemoji.com,https://www.dewemoji.com,https://emoji.dewe.pw +DEWEMOJI_FRONTEND_HEADER=web-v1 +DEWEMOJI_FREE_DAILY_LIMIT=30 + +DEWEMOJI_GUMROAD_ENABLED=true +DEWEMOJI_GUMROAD_VERIFY_URL=https://api.gumroad.com/v2/licenses/verify +DEWEMOJI_GUMROAD_PRODUCT_IDS=qfvcuT7RwcDn5Oi4KQcOBQ==,t8Kq1G5wzrd1KcYOgukpzw== + +DEWEMOJI_MAYAR_ENABLED=true +DEWEMOJI_MAYAR_API_BASE=https://api.mayar.id +DEWEMOJI_MAYAR_ENDPOINT_VERIFY=/v1/license/verify +DEWEMOJI_MAYAR_SECRET_KEY=... +``` + +## 3) Production + +```env +APP_ENV=production +APP_DEBUG=false +APP_URL=https://dewemoji.com + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=dewemojiAPI_DB +DB_USERNAME=... +DB_PASSWORD=... + +DEWEMOJI_BILLING_MODE=live +DEWEMOJI_LICENSE_ACCEPT_ALL=false +DEWEMOJI_PRO_KEYS= + +DEWEMOJI_ALLOWED_ORIGINS=https://dewemoji.com,https://www.dewemoji.com +DEWEMOJI_FRONTEND_HEADER=web-v1 +DEWEMOJI_FREE_DAILY_LIMIT=30 + +DEWEMOJI_GUMROAD_ENABLED=true +DEWEMOJI_GUMROAD_VERIFY_URL=https://api.gumroad.com/v2/licenses/verify +DEWEMOJI_GUMROAD_PRODUCT_IDS=qfvcuT7RwcDn5Oi4KQcOBQ==,t8Kq1G5wzrd1KcYOgukpzw== + +DEWEMOJI_MAYAR_ENABLED=true +DEWEMOJI_MAYAR_API_BASE=https://api.mayar.id +DEWEMOJI_MAYAR_ENDPOINT_VERIFY=/v1/license/verify +DEWEMOJI_MAYAR_SECRET_KEY=... +``` + +## 4) Legacy -> NativePHP key map + +- `gateway_mode` -> `DEWEMOJI_BILLING_MODE` +- `allowed_origins[]` -> `DEWEMOJI_ALLOWED_ORIGINS` (comma-separated) +- `frontend_header` -> `DEWEMOJI_FRONTEND_HEADER` +- `free_daily_limit` -> `DEWEMOJI_FREE_DAILY_LIMIT` +- `gumroad.product_ids[]` -> `DEWEMOJI_GUMROAD_PRODUCT_IDS` (comma-separated) +- `gumroad.verify_url` -> `DEWEMOJI_GUMROAD_VERIFY_URL` +- `mayar.api_base` -> `DEWEMOJI_MAYAR_API_BASE` +- `mayar.endpoint_verify` -> `DEWEMOJI_MAYAR_ENDPOINT_VERIFY` +- `mayar.secret_key` -> `DEWEMOJI_MAYAR_SECRET_KEY` + +## 5) Final checks + +1. Run: `php artisan config:clear` +2. Run: `php artisan migrate --force` +3. Test verify endpoint with real key (Gumroad and Mayar) +4. Confirm `/v1/license/activate` + `/v1/license/deactivate` +5. Confirm frontend pages: `/`, `/browse`, `/support`, `/pricing`, `/api-docs` + +## 6) Security note + +Legacy `env.php` contains exposed secrets. Rotate all production credentials before final cutover: +- DB password +- Mayar key +- Turnstile keys +- OpenRouter key +- Redis password diff --git a/rebuild-progress.md b/rebuild-progress.md index c1817cc..6862001 100644 --- a/rebuild-progress.md +++ b/rebuild-progress.md @@ -43,7 +43,7 @@ - [x] Implement `GET /v1/categories`. - [x] Implement `POST /v1/license/verify` (temporary env-based validation). - [x] Support both `q` and `query`. -- [ ] Add/verify full response contract parity with live docs (`variants`, `related`, trimmed `keywords_en`, limit behavior by tier). +- [x] Add/verify full response contract parity with live docs (`variants`, `related`, trimmed `keywords_en`, limit behavior by tier). - [x] Match live cache/rate semantics baseline (`page=1` metering behavior, 401/429 payload shape, ETag/304 behavior). - [x] Verify header compatibility baseline: `Authorization`, `X-License-Key`, `X-Account-Id`, `X-Dewemoji-Frontend`, `X-Dewemoji-Tier`. - [x] Restrict CORS to configured origins (no default `*`). @@ -63,9 +63,9 @@ - [x] Keep URL behavior parity (canonical no-trailing-slash pages, redirect rules, pretty-to-query hydration). - [x] no-trailing-slash redirect middleware and canonical link baseline implemented. - [x] pretty route hydration wired into homepage initial filters + URL sync. -- [ ] Port homepage behavior parity: +- [x] Port homepage behavior parity: - API-backed filters (`q`, category, subcategory), URL sync, load-more pagination. - - API fallback when scoped search returns 0 (retry on `all` + hint). + - [ ] API fallback when scoped search returns 0 (retry on `all` + hint). - [ ] Port single emoji page parity: - 404 `noindex` for missing. - 410 + `X-Robots-Tag: noindex, noarchive` for policy-hidden emoji. @@ -73,17 +73,17 @@ - related fallback (same subcategory), prev/next navigation. - details blocks: aliases, shortcodes, EN/ID keywords, copy interactions. - curated blurbs support from `data/emoji_descriptions.json`. -- [ ] Port legal/support content parity and FAQ schema blocks. +- [x] Port legal/support content parity and FAQ schema blocks. ### Phase 4 - Pricing and payments -- [ ] Keep pricing structure parity: +- [x] Keep pricing structure parity: - Free, Pro subscription, Lifetime. - Pro: `$3/mo` and yearly display `$27/yr` in UI. - Lifetime: `$69`. -- [ ] Preserve live Gumroad links: +- [x] Preserve live Gumroad links: - `https://dwindown.gumroad.com/l/dewemoji-pro-subscription` - `https://dwindown.gumroad.com/l/dewemoji-pro-lifetime` -- [ ] Keep IDR/Mayar messaging parity (manual-renew note). +- [x] Keep IDR/Mayar messaging parity (manual-renew note). - [ ] Implement real license lifecycle (activate/deactivate/verify + max 3 Chrome profiles) in new backend. - [x] Implement real license lifecycle baseline in rebuild (`verify/activate/deactivate`, immutable owner binding behavior, max device cap). - [ ] Implement provider verification parity: @@ -92,10 +92,10 @@ - [x] Gumroad verify API flow (final payload/contract parity with live provider account) - [x] Mayar verify API flow (final payload/contract parity with live provider account) - gateway mode switch (`sandbox` vs `live`) -- [ ] Implement immutable license binding to user + multi-device activation policy parity. +- [x] Implement immutable license binding to user + multi-device activation policy parity. ### Phase 5 - SEO parity (must not disrupt GSC) -- [ ] Preserve canonical strategy for all pages (including emoji detail + pretty category pages). +- [x] Preserve canonical strategy for all pages (including emoji detail + pretty category pages). - [x] Add/verify meta + social tags parity baseline: title/description/OG/Twitter + theme color. - [ ] Port JSON-LD strategy: - [x] Global `WebSite` + `SearchAction` + Organization. @@ -105,12 +105,13 @@ - [x] `CreativeWork` + `BreadcrumbList` baseline on emoji pages. - [x] Implement `robots.txt` parity and dynamic `sitemap.xml` baseline. - [x] Ensure sitemap excludes policy-hidden emoji URLs (same filter policy as live). -- [ ] Keep core indexed URLs stable: `/`, `/pricing`, `/api-docs`, `/support`, `/privacy`, `/terms`, `/emoji/{slug}`. +- [x] Keep core indexed URLs stable: `/`, `/pricing`, `/api-docs`, `/support`, `/privacy`, `/terms`, `/emoji/{slug}`. ### Phase 6 - Analytics, consent, and compliance - [ ] Re-implement cookie consent flow before analytics activation. - [ ] Re-implement GA4 only on allowed production hosts (live uses `G-R7FYYRBVJK`). - [ ] Keep privacy/terms statements aligned with live content. + - [ ] Add light/dark mode toggle in UI (persist user preference). ### Phase 7 - Data/ops pipelines - [ ] Port blurb pipeline: @@ -124,6 +125,12 @@ - Keywords index build (`build_keywords_json_from_sql.php`) - Unicode parity validation (`validate_emojis_against_unicode.php`) - License expiry revocation cron (`check_license_expiry.php`) + - [x] Added live SQL import command for app DB (`php artisan dewemoji:import-live-sql`). + - [x] Added legacy table migrations + JSON normalization for import. + - [ ] Port legacy JSON generator as Laravel command (cache-first strategy): + - Source: `dewemoji-live-backend/jobs/build_emojis_json_from_sql.php` + - Output: `app/data/emojis.json` (default API dataset) + - [ ] Add scheduled task (Coolify) for JSON rebuild (daily or on-demand). ### Phase 8 - Community feature migration - [ ] Port contributor auth flow: @@ -159,6 +166,7 @@ - [ ] Add deployment runbook with minimum required env vars and health verification steps. - [ ] Add post-deploy smoke checks (`/`, `/v1/health`, `/v1/emojis`, `/robots.txt`, `/sitemap.xml`). - [x] Add container healthcheck for app service using `/v1/health`. + - [x] Staging data sync validated using R2 upload + import flow. ## Recent implementation update @@ -197,10 +205,22 @@ - Added billing provider hardening: - Gumroad: validate `is_valid`, reject refunded/chargebacked purchases, preserve product-id matching. - Mayar: broaden request payload compatibility, normalize multiple response shapes, optional product-id allowlist (`DEWEMOJI_MAYAR_PRODUCT_IDS`). +- Added live SQL import tooling: + - New migrations for legacy tables + import service + - JSON normalization for legacy `meta_json`/`payload`/`raw_response` fields +- API list responses now always include `plan` for pro/free tests. - Added SEO polish: - Global JSON-LD for `WebSite`, `SearchAction`, and `Organization` in shared layout. - Static `public/robots.txt` now explicitly allows crawling and exposes sitemap URL. +## Cache strategy decision (open) + +- Current API reads from `app/data/emojis.json`. +- Live legacy server regenerates that JSON from MySQL via cron: + - `dewemoji-live-backend/jobs/build_emojis_json_from_sql.php` +- Recommendation: keep JSON cache (fast + stable) and port the generator into Laravel, + then schedule it in Coolify (daily or on-demand). + ## Live audit highlights (reference) - Live web routes in `dewemoji-live/public_html`: `/`, `/emoji/{slug}`, `/browse`, `/pricing`, `/api-docs`, `/support`, `/privacy`, `/terms`, `/sitemap.xml`. diff --git a/redirection-dewemoji-plan.md b/redirection-dewemoji-plan.md new file mode 100644 index 0000000..0dfb662 --- /dev/null +++ b/redirection-dewemoji-plan.md @@ -0,0 +1,188 @@ +# Redirection Plan — Dewemoji Pivot (2026) + +**Source of truth:** `dewemoji-direction-2026.md` (Feb 8, 2026) + +This document maps the **2026 pivot** (“personal emoji library + sync”) against what we have **already built** in the rebuild app, then defines a concrete redirection plan. + +--- + +## 1) Pivot Summary (as confirmed) + +**New product north star:** +- Dewemoji is a **personal emoji library**. +- Users create private keywords in any language (including slang and non‑Latin scripts), sync across devices, and **own their vocabulary**. +- Public discovery remains free (EN/ID + semantic) as a growth engine. +- No public/community submissions → no moderation burden. + +**Monetization shift:** +- Free: public search only. +- Paid: private keyword library + sync + API keys + dashboard. +- Rename **Pro → Personal**. + +--- + +## 2) What We’ve Already Built (Current State) + +### ✅ Built & aligned +- Public emoji discovery (JSON dataset, EN + ID keywords). +- API endpoints: `/v1/emojis`, `/v1/categories`, `/v1/emoji`, `/v1/health`. +- Frontend search + browse + emoji detail pages. +- Basic SEO + sitemap + robots. +- License verification/activation endpoints (legacy‑style) and supporting services. +- The rebuild is already cache‑first (`app/data/emojis.json`). + +### ⚠️ Built but **misaligned** with pivot +- **License‑based Pro system** (Gumroad/Mayar validation). +- **Device activation** + license tables intended for legacy Pro (not Personal plan). +- “Pro” pricing page and marketing copy (old pricing, old narrative). +- API docs + support pages referencing license key flow. + +### ❌ Not built yet (required by pivot) +- User accounts (register/login/session). +- Personal tier subscription model (Stripe + subscriptions table). +- API key management tied to user (generate/revoke). +- Private keyword CRUD (user keywords table). +- Personal dashboard (keywords, API keys, billing). +- Extension account linking + private keyword sync. +- Public endpoint whitelisting (origin + extension UA) + soft throttling. + +--- + +## 3) Directional Conflicts to Resolve + +| Area | Current | Pivot Requirement | Decision | +|------|---------|------------------|----------| +| Monetization | Pro license keys | Personal subscription | **Replace** license key system with account + API key model | +| Identity | None | User accounts | **Add** auth system + dashboard | +| Keywords | Public only | Private per user | **Add** `user_keywords` + blended search | +| API Access | License key | User API keys | **Replace** authorization method | +| Community | Planned public contributions | Private‑only | **Remove** community feature scope | +| Pricing | $3/mo + $27/yr + $69 lifetime | $4.99/mo + $49/yr + $99 lifetime | **Update** pricing + copy | + +--- + +## 4) Redirection Plan (Phased) + +### Phase A — Foundation (Backend) ✅ *Start here* +Goal: replace license model with **account + API key** architecture. + +**Backend tasks** +- Add tables: `users`, `user_api_keys`, `user_keywords`, `subscriptions`. +- Add auth endpoints: + - `POST /v1/user/register` + - `POST /v1/user/login` + - `POST /v1/user/logout` +- Add API key endpoints: + - `GET /v1/user/apikeys` + - `POST /v1/user/apikeys` + - `DELETE /v1/user/apikeys/:key` +- Add private keyword endpoints: + - `GET /v1/keywords` + - `POST /v1/keywords` + - `DELETE /v1/keywords/:id` +- Add `GET /v1/search?private=true` to **blend private + public** results. +- Implement **origin/UA whitelist** for public endpoints and soft throttling. + +**What to freeze** +- Legacy license endpoints stay online temporarily but **deprecated**. +- No new features on Gumroad/Mayar flow. + +--- + +### Phase B — Dashboard UI (Web) +Goal: provide a **personal workspace** for private keywords and API keys. + +**Frontend tasks** +- Add `/register`, `/login`, `/dashboard`. +- Dashboard tabs: + - **My Keywords** (CRUD, bulk import/export) + - **API Keys** (generate/revoke) + - **Billing** (plan status, upgrade links) +- Update emoji detail page: + - “Add to My Keywords” for Personal users. + - Show personal keywords for this emoji (if any). + +--- + +### Phase C — Extension Integration +Goal: enable personal keywords in extension + sync. + +**Extension tasks** +- “Link Account” flow in extension. +- Store API key in `chrome.storage.sync`. +- Include `Authorization: Bearer dew_…` header when logged in. +- Blend private + public results. +- Upgrade prompt on missing keyword: “Create this in Personal?” + +--- + +### Phase D — Payments + Plan Rename +Goal: Personal tier + billing system. + +**Billing tasks** +- PayPal subscription plan (Monthly/Annual) + webhook handler. +- Keep pricing **admin‑controlled** (see Admin Dashboard plan). +- Webhooks → populate `subscriptions`. +- Plan rename everywhere: **Pro → Personal**. +- Pricing page update. + +--- + +### Phase E — Deprecate Legacy Licenses +Goal: cut off old Gumroad model cleanly. + +**Migration tasks** +- “Paste license → auto‑create account → grant Personal (lifetime)” tool. +- Email existing license users. +- Sunset date for legacy validation. + +--- + +## 5) Immediate File Updates (Recommended Next) + +- Update **API docs** to mention account/API keys (not licenses). +- Update **Pricing page** to Personal tier and new price points. +- Update **Support/Terms/Privacy** copy with Personal tier language. +- Update **community-plan.md** (already aligned with private‑only direction). + +--- + +## 6) Risk Notes + +- The pivot **removes public contribution features** and their associated moderation burden. This is consistent with the new revenue model but changes the original story. Make sure homepage and extension copy reflect **personal library** first. +- Referrer whitelist + soft throttle is required to keep free endpoints open without abuse. +- **Public unlimited usage** should only be granted to **real extension installs**. Plan: use Chrome Verified Access / `chrome.identity.getCertificationToken()` to prove the request is from a legitimate Web Store install before allowing unlimited public access. +- **Private keywords + sync** always require **user authentication** (magic‑link/OTP) — no exceptions. + +--- + +## 7) Quick Comparison Snapshot + +**What we should keep:** +- Public emoji search + dataset caching. +- Site UI/SEO baseline. +- API response contract (minus license semantics). + +**What we should replace:** +- Gumroad/Mayar license verification. +- Pro/lifetime license activation. +- Community submissions/voting. + +**What we should add:** +- User accounts + API keys. +- Private keyword library + sync. +- Dashboard + billing. + +--- + +## 8) Decision Checkpoints + +Before coding Phase A, confirm: +1. **Plan name** is officially “Personal” (not Pro). +2. **API key format** (`dew_…`) accepted. +3. Public endpoints remain unlimited for **dewemoji.com + extension**. +4. Stripe is the primary payment provider. + +--- + +If you want, I can immediately convert this into a task checklist by repo folder (backend, web, extension) and start Phase A scaffolding. diff --git a/references/email-designs/email-verification.html b/references/email-designs/email-verification.html new file mode 100644 index 0000000..9495570 --- /dev/null +++ b/references/email-designs/email-verification.html @@ -0,0 +1,141 @@ + + + + + + + Verify Email Address + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/staging-sync-checklist.md b/staging-sync-checklist.md index bcebd29..c0cb6ad 100644 --- a/staging-sync-checklist.md +++ b/staging-sync-checklist.md @@ -4,7 +4,7 @@ This is the exact, minimal checklist to sync **live SQL → staging MySQL**. ## 1) Point app to MySQL -Edit `app/.env` (or set in Coolify ENV): +Edit `.env` (or set in Coolify ENV): ``` DB_CONNECTION=mysql @@ -15,12 +15,18 @@ DB_USERNAME=YOUR_USER DB_PASSWORD=YOUR_PASS ``` -## 2) Run migrations + import +## 2) Run migrations + import (inside Coolify app container) ```bash -cd /Users/dwindown/Developments/dewemoji/app +cd /var/www/html php artisan migrate -php artisan dewemoji:import-live-sql /Users/dwindown/Developments/dewemoji-live-backend/dewemojiAPI_DB.sql --truncate +php artisan dewemoji:import-live-sql /var/www/html/dewemojiAPI_DB.sql --truncate +``` + +If your SQL file is elsewhere, locate it first: + +```bash +find / -name "dewemojiAPI_DB.sql" 2>/dev/null ``` ## 3) Quick sanity checks diff --git a/tableplus-ssh-tunnel-guide.md b/tableplus-ssh-tunnel-guide.md new file mode 100644 index 0000000..47e9b8b --- /dev/null +++ b/tableplus-ssh-tunnel-guide.md @@ -0,0 +1,70 @@ +# TablePlus (Paid) or Sequel Ace (Free) + SSH Tunnel Guide (MySQL) + +This is a complete, step‑by‑step guide to access your **internal Coolify MySQL** from your Mac using **SSH tunnel + TablePlus or Sequel Ace**. + +## 1) Install a GUI client + +Choose one: + +### Option A — Sequel Ace (Free) +```bash +brew install --cask sequel-ace +``` + +### Option B — TablePlus (Trial/paid) + +Pick one method: + +**Option A — Homebrew** +```bash +brew install --cask tableplus +``` + +**Option B — Download App** +- Download from TablePlus website and install normally. + +## 2) Create the SSH tunnel (Mac Terminal) + +Replace `USER` and `YOUR_SERVER` with your SSH credentials: + +```bash +ssh -N -L 3307:127.0.0.1:3306 USER@YOUR_SERVER +``` + +Keep this terminal **open** while you use TablePlus. +If you close it, the tunnel disconnects. + +## 3) Open TablePlus or Sequel Ace and create connection + +In the app: +1) Click **Create a new connection** +2) Choose **MySQL** +3) Fill in: + - **Name:** Dewemoji (or anything) + - **Host:** `127.0.0.1` + - **Port:** `3307` + - **User:** `dewesql` (or your MySQL user) + - **Password:** (your MySQL password) + - **Database:** `dewemoji` (or your DB name) + +4) Click **Test** → should be green +5) Click **Connect** + +## 4) Done + +You now have full GUI access to the internal MySQL. + +## Troubleshooting + +**“Connection refused”** +- Tunnel not running (step 2). Keep it open. + +**“Access denied”** +- Wrong MySQL username/password. + +**No tables** +- Wrong database name. + +--- + +If you want, I can add a short “quick commands” section for `mysql` CLI too.