Files
gw-svelte/mail-api/__pycache__/main.cpython-314.pyc
T

1943 lines
219 KiB
Plaintext
Raw Normal View History

2026-05-04 20:32:24 +12:00
+
2026-05-19 23:36:58 +12:00
0J ju‰ã"ópaEtØ0t^RIt^RIt^RIHt^RIHt^RIt^RIt^RI t ^RI
2026-05-04 20:32:24 +12:00
t
2026-05-19 23:36:58 +12:00
^RI t ^RI t ^RI
t
^RIHtHtHt^RIHt^RIHt^RIt^RIHtHtHt^RIHt^R IHt^R
IHtH t ^R I!H"t"H#t#H$t$H%t%^RI&t'^R I(H)t*H+t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2H3t3H4t4H5t6H7t7H8t8H9t9H:t;H<t<H=t=H>t>H?t?H@t@HAtAHBtBHCtCHDtDHEtEHFtFHGtGHHtHHItIHJtJHKtKHLtLHMtM^R
INHOtOHPtPHQtQHRtRHStSHTtTHUtUHVtVHWtW]RRl4tX]!R]XR7tYRRltZRRlt[RRlt\RRlt]RRlt^RRlt_RRlt`R R!ltaR"R#ltbR$R%ltcR&R'ltdR(R)lteR*R+ltfR,R-ltg][!4sh]^k]E'd3]EPÔ!4P×44/tl]^k/tm]^k/tn]^k]]!4so]^k]_!4sp]^k/tq]^k/tr]^k]!4ttRsu]^k]MPì!R.]w!44R/R0ltxR1R2ltyR3R4ltzR5R6lt{R7R8lt|R9R:lt}!R;R<4t~R=R>lt]YEP]~]BR?7]YEP]]!]L4R@7]YEP]]!]74RARB..ER ORCRDRE7]YEPRF4RGRHl4tƒRIRJlt„/t…]^ k/t†]^
k]!4t‡RKRLltˆRMRNlt‰RORPltŠRQRRltRSRTltŒRURVltRWRXltŽRYRZltR[R\ltR]R^ltR_R`ltRaRblt“RcRdlt”ReRflt•RgRhltRiRjlt—RkRllt˜RmRnlt™ER¡RpRqlltšRrRsltRtRultœRvRwltRxRyltžRzR{ltŸRCt R|t¡R}R~lt¢RR€lt£RRlt¤RƒR„lt¥R…R†lt¦R‡Rˆlt§R‰lt¨Rlt©]YEPUR4Rl4t«RRlt¬RR“lt­R”R•lt®RR—lt¯R˜R™lt°ER¢RšRllt±ER£RœRllt²Ržlt³R lt´]
EPj!R¢4t¶]YEPoR£4l4t¸]YEPoR¦4l4t¹]YEPUR©4l4tº]YEPoR¬4R­l4t»]YEPoR¯4l4t¼R²/R³R²bR´RµbR¶R·bR¸R¹bRºR»bR¼R½bR¾R¿bRÀRÁbRÂRÃbRÄRÅbRÆRÇbRÈRÉbRÊR¿bRËR½bRÌRÍbRÎR¿bRÏRÃbRÐRÑRÒR½RÓR¿RÔRoRÕRoRÖR×RØRÙRÚRÛRÜRÝRÞRoRßRàRáRâ/ CRã/R³RãbR´RäbR¶RåbR¸RæbRºRçbR¼RèbR¾RébRÀRêbRÂRëbRÄRìbRÆRíbRÈRÉbRÊRîbRËRébRÌRïbRÎRîbRÏRðbRÐRñRÒRèRÓRòRÔRóRÕRôRÖRõRØRöRÚR÷RÜRøRÞRùRßRàRáRú/ CRû/R³RûbR´RübR¶RýbR¸RþbRºRÿbR¼ERbR¾ERbRÀERbRÂRébRÄERbRÆERbRÈERbRÊERbRËERbRÌERbRÎERbRÏERbRÐER RÒERRÓERRÔER
RÕER RÖER RØER
RÚERRÜERRÞERRßRàRáER/ CER/R³ERbR´ERbR¶ERbR¸ERbRºERbR¼ERbR¾ERbRÀERbRÂERbRÄERbRÆERbRÈERbRÊERbRËERbRÌERbRÎERbRÏERbRÐERRÒERRÓERRÔER RÕER!RÖER"RØER#RÚER$RÜER%RÞER&RßRàRáER'/ CER(/R³ER(bR´ER)bR¶ER*bR¸ER+bRºER,bR¼R½bR¾R¿bRÀER-bRÂER.bRÄRÅbRÆRíbRÈRÉbRÊR¿bRËR½bRÌER/bRÎR¿bRÏR½bRÐER0RÒR½RÓR¿RÔER1RÕER2RÖER3RØER4RÚER5RÜER6RÞER7RßRàRáER8/ C/t½]^ kER9R³ER9R´ER:ER;ER<ER=RoER>ER?/ER@R³ER@R´ERAER;ERBER=ERCER>ERB/ERDR³ERDR´EREER;ER?ER=ERFER>ERG/ERHR³ERHR´ERIER;ERJER=ERKER>ERJ/ERLR³ERLR´ERMER;ERNER=EROER>ERN/ERPR³ERPR´ERQER;ERRER=ERSER>ERR/ERTR³ERTR´ERUER;ERVER=ERWER>ERV/ERXR³ERXR´ERYER;ERZER=ER[ER>ERZ//t¾]^ kER\ER]lt¿ER^ER_ltÀER`ERaltÁER¤ERbERclltÂER¥ERdERelltÃ]YEPUERf4ERgERhl4tÄ]YEPoERi4ERjERkl4tÅ]YEPoERl4ERmERnl4tÆ]YEPUERo4ERpERql4tÇ]YEPUERr4ERsERtl4tÈ]YEPUERu4ERvERwl4tÉ]YEPUERx4ERyERzl4tÊ]YEPUER{4ER|ER}l4tË]YEPUER~4ERER€l4tÌ]YEPUER4EREl4tÍ]YEPUER„4ER…ER†l4tÎ]YEPoER‡4ERˆER‰l4tÏ]YEPoERŠ4EREl4tÐ]YEPoER4EERl4tÑ]YEPoER4ERERl4tÒER“ER”ltÓER•ERltÔER—ER˜ltÕ]YEPoER™4EERl4tÖ]YEPoERœ4EREl4t×R#éN)Údeque)Úasynccontextmanager)ÚdatetimeÚ timedeltaÚtimezone)ÚPath)ÚAny)ÚFastAPIÚ
HTTPExceptionÚRequest)ÚCORSMiddleware)ÚTrustedHostMiddleware)Ú JSONResponseÚResponse)ÚASGIAppÚReceiveÚScopeÚSend)"ÚALLOWED_EMAILS_FILEÚ APP_VERSIONÚAUTH_CODE_MAX_ATTEMPTSÚAUTH_CODE_REQUESTS_PER_HOURÚAUTH_CODE_TTL_SECONDSÚAUTH_IP_BLOCK_DURATIONÚAUTH_IP_FAILURE_WINDOWÚAUTH_IP_MAX_FAILURESÚAUTH_SESSION_TTL_SECONDSÚBIRTHDAY_CHECK_INTERVAL_SECONDSÚ
CLIENT_BCCÚCLIENT_PROFILES_FILEÚCORS_ALLOWED_ORIGINSÚCP_ADMIN_EMAILSÚDEV_MODEÚ DRAFTS_FILEÚEMAIL_SEND_TIMEOUT_SECONDSÚENABLE_GENERAL_ENQUIRIESÚFORM_MAX_SECONDSÚFORM_MIN_SECONDSÚ
FROM_EMAILÚLOGO_URLÚMAX_REQUEST_BODY_BYTESÚMAX_SEND_ATTEMPTSÚ OWNER_BCCÚ OWNER_EMAILÚRATE_LIMIT_MAX_PER_EMAILÚRATE_LIMIT_MAX_PER_IPÚRATE_LIMIT_MIN_INTERVAL_SECONDSÚRATE_LIMIT_WINDOW_SECONDSÚREPLY_TOÚSTARTUP_TEST_RECIPIENTÚ
TRUSTED_HOSTSÚlogger) ÚBaseSubmissionÚBirthdayAutoSendRequestÚBirthdayEmailRequestÚBookingSubmissionÚContractSubmissionÚOnboardingSubmissionÚRenderMessageRequestÚSendMessageRequestÚWelcomePackEmailRequestcó$V^8„dQhR\/#)éÚapp)r
)Úformatsmain.pyÚ __annotate__rEJs÷ñcóš"\4GRjxL
R5x\4GRjxL
R#LL \4GRjxL
i;i5i©N)Ú_startup_mail_checkÚ_shutdown_background_tasks)rBs&rDÚ _lifespanrKIs<éä
Ó
×Ðð
ä ñ +øÔ*×*üs<A /A 3
A ¨1©A ±A ³AÁAÁAÁA zGoodWalk Mail API)ÚtitleÚlifespancó4V^8„dQhR\R\RR/#)rAÚpathÚpayloadÚreturnN)rÚobject)rCs"rDrErEVs!÷
ñ
œ$ð
¬ð
°Dñ
rFcóTVPPRRR7VPVPR,4pVP \
P !V^R7RR7\P!VR4\P!W 4R# \dL%i;i) zÊAtomically write a JSON file and chmod it owner-only (0600).
The chmod is best-effort: it is a no-op on Windows, but on the Linux
Docker host it ensures the file with PII is unreadable by other users.
T)ÚparentsÚexist_okz.tmp)Úindentúutf-8©Úencodingi€N) ÚparentÚmkdirÚ with_suffixÚsuffixÚ
write_textÚjsonÚdumpsÚosÚchmodÚOSErrorÚreplace)rOrPÚtmps&& rDÚ_write_pii_jsonrfVs„ð  ‡Kјd¨TÐÔ
×
Ñ
˜4Ÿ;™;¨Õ
0€C؇NN”4—:’:˜g¨aÔ0¸7€NÔ
Ü
Šô‡J‚JˆsÖøô ô
Ù ð
úsÁ*B B'Â&B'có:V^8„dQhR\\,/#©rArQ©ÚsetÚstr)rCs"rDrErEfs÷ñ¬¬C­ñrFcó0\PPRR4PR4Uu0uF8qP 4'gKVP 4P 4kK: pp\ P!4'dT\P!\ P!RR74pVPRVPR.444V#uupi \d#p\P!RT4Rp?T#Rp?ii;i) ÚALLOWED_EMAILSÚÚ,rWrXc3ór"TF-p\V\4'gKVP4xK/ R#5irH©Ú
isinstancerkÚlower©Ú.0Úes& rDÚ <genexpr>Ú1_load_allowed_emails_from_file.<locals>.<genexpr>ks'éÐXÑ+A aÄZÐPQÔSV×EWœ ˜ŸŸ ˜ Ó+Aùó7Ÿ7Úemailsz&Could not load allowed_emails file: %sN)raÚenvironÚgetÚsplitÚstriprsÚ_ALLOWED_EMAILS_FILEÚexistsr_ÚloadsÚ read_textÚupdateÚ Exceptionr6Úwarning)rvÚseedÚdataÚexcs rDÚ_load_allowed_emails_from_filer‰fÜ')§z¡z§~¡~Ð6FÈÓ'K×'QÑ'QÐRUÔ'VÓ dÑ'V !×ZaÑZa×ZcÔ ˆAG‰GIO‰OÖ Ñ'V€DÐ FÜ × &× —:2×<ÀgÔOˆ K‰KÑX¨4¯8©8°H¸bÔ+AÓ  €Kùò eøô
ôFÜŠÐ× €KûðFús$²C#Á"C#Á3A.C(Ã( DÃ3DÄDcó>V^8„dQhR\\,RR/#)rArzrQNri)rCs"rDrErEqs"÷FñF¤c¬#¥hðF°4ñFrFcóž\\R\V4/4R# \d#p\P
!RT4Rp?R#Rp?ii;i)rzz&Could not save allowed_emails file: %sN)rfrÚsortedr„r6r…)rzrˆs& rDÚ_save_allowed_emails_filerqs@ðFÜÔ,¨x¼À»Ð.HÖIøÜ ôFÜŠÐ×EûðFúsŸ A ªAÁA cóFV^8„dQhR\\\3,/#rh©Údictrk)rCs"rDrErExs÷ñ¬¬c´4¨i­ñrFcóö\P!4'd,\P!\P!RR74#/# \
d#p\ P!RT4Rp?/#Rp?ii;i)rWrXz'Could not load client_profiles file: %sN)Ú_CLIENT_PROFILES_FILEr€r_rrr„r6r…©rˆs rDÚ_load_client_profiles_from_filer”xsiðGÜ × '× —:3×=ÀwÔ   €Iøô ôGÜŠÐ@À#×
€IûðGúóA *A Á A8ÁA3Á3A8có(V^8„dQhR\RR/#)rAÚprofilesrQr)rCs"rDrErEs÷GñG¬ðG°$ñGrFcóˆ\\V4R# \d#p\P!RT4Rp?R#Rp?ii;i)z'Could not save client_profiles file: %sN)rfrr„r6r…)r—rˆs& rDÚ_save_client_profiles_fileršs7ðGÜÔ-¨xÖ8øÜ ôGÜŠÐ@À#×FûðGúó AŸ<¼Acó$V^8„dQhR\/#rhr˜)rCs"rDrErEˆs÷ñ¤ñrFcóö\P!4'd,\P!\P!RR74#/# \
d#p\ P!RT4Rp?/#Rp?ii;i)rWrXzCould not load drafts file: %sN)Ú _DRAFTS_FILEr€r_rrr„r6r…r“s rDÚ_load_drafts_from_filerŸˆseð × Ò × Ò Ü—:’:œl×4¸gÔ   €Iøô ôŠÐ×
€Iûð>úr•có(V^8„dQhR\RR/#)rAÚdraftsrQNr˜)rCs"rDrErEs÷>œdð> >rFcóˆ\\V4R# \d#p\P!RT4Rp?R#Rp?ii;i)zCould not save drafts file: %sN)rfr„r6r…)rˆs& rDÚ_save_drafts_filer£s3𜠠-øÜ ôŠÐ7¸×=ûð>úrcóV^8„dQhRR/#©rArQ)rCs"rDrErE˜s÷ Eñ E¨4ñ ErFcƒóh"\P!4p\P4UUu/uF wrVPR^4V8”gKWbK" ppp\P
2026-05-18 22:25:43 +12:00
!RV4GRjxL
R#uuppiL \ d#p\P!RT4Rp?R#Rp?ii;i5i)Persist live sessions to admin_kv so they survive container restarts.
Snapshot filters out expired entries before writing. Best-effort —
failure is logged but does not block the auth flow (memory remains
authoritative for the current process).
Ú
expires_atÚactive_sessionsNz%Could not persist active_sessions: %s) ÚtimeÚ_active_sessionsÚitemsr|Úadmin_dbÚset_kvr„r6r…)ÚnowÚtokÚsnapshotrˆs rDÚ_save_active_sessions_asyncr³˜séô )Š)+€CÜ%5×%;Ñ%;Ô%=Ô^Ñ%=™6˜ÇÁÀ|ÐUVÓAWÐZ]ÑA]”Ñ%=€HÑEÜoŠoÐÓ:ùó_á:øÜ ôEÜŠÐ×DûðEüsR-B2¯A:ÁA:ÁB2ÁBÁ3BÁ4BÁ8B2ÂB B/Â
2026-05-19 23:36:58 +12:00
B*Â$B2Â*B/Â/B2cóFV^8„dQhR\\\3,/#rhr)rCs"rDrErE§s÷ñ¬4´´T° ­?ñrFc ƒó@"\P!4'g/#\P!R4GRjxL
2026-05-18 22:25:43 +12:00
p\V\4'g/#\
P
!4pVP
4UUu/uF\wr#\V\4'gK\VPR4\\34'gKJVR,V8”gKZW#bK^ upp#Lªuuppi \d$p\P!RT4/uRp?#Rp?ii;i5i)Nr¨z0Could not load active_sessions from admin_kv: %s)
r­Ú
is_enabledÚget_kvrrrr|ÚintÚfloatr„r6r…)r‡rˆs rDÚ_load_active_sessions_asyncrº§éÜ × Ò × Ò Øˆ ð Ü—_’_Ð%6Óܘ$¤×ˆIÜiŠi‹kˆðŸ*™*œ,ô
á&ܘ!œT×
ä'1°!·%±%¸ Ó2EÌÌUÀ|×'Tô
2026-05-19 23:36:58 +12:00
àYZÐ[gÕYhÐknÑYnô
2026-05-18 22:25:43 +12:00
ˆCŠFÙ
2026-05-19 23:36:58 +12:00
ð
ñ 8ùó
øô
ôÜŠÐIÈ3Ô ûðüstD¡C-ºC%»C-ÁDÁ(C-Á?C'Â(C'à C'ÃC'Ã!C-Ã$DÃ%C-Ã'C-Ã- DÃ8DÄDÄDÄDÄDcó4V^8„dQhR\R\RR/#)rAÚkeyÚvaluerQN)rkr )rCs"rDrErE¹s&÷gñg¤Cðg´ðg¸ñgrFcƒó°"\P!W4GRjxL
R#L \d#p\P!RY4Rp?R#Rp?ii;i5i)zHWrite a single admin_kv blob to postgres when the database is available.NzBPostgres persist (%s) failed; JSON copy is still authoritative: %s)r­r„r6r…)rˆs&& rDÚ_persist_admin_stater¿¹sAéðgÜoŠo˜cÓ)øÜ ôgÜŠÐ[Ð]`×fûðgüs6A&$ž&¢A¤&¦ A±AÁAÁAÁAcóV^8„dQhRR/#)rCs"rDrErEÁs÷""?°Tñ"?rFc ƒóŠ"\PPRR4;'gRP4P 4pVR8XdR#\
P !4'gR#VR8Xd&\
P!4GRjxL
'dR#\4p\\44p\4pV'gV'g V'gR#V'd \
P!RV4GRjxL
V'd"\
P!RRV/4GRjxL
V'd \
2026-05-18 22:25:43 +12:00
P!RV4GRjxL
\P!R V\V4\V4\V44R#LLfLA \ d#p\P"!R
T4Rp?R#Rp?ii;i5i) a`Seed admin_kv from the JSON files on disk.
2026-05-19 23:36:58 +12:00
Controlled by ADMIN_DATA_SEED_FROM_JSON:
2026-05-18 22:25:43 +12:00
- "never": do nothing
2026-05-19 23:36:58 +12:00
- "auto": seed only when admin_kv has no rows yet (default, safe on every boot)
- "force": overwrite postgres with whatever the JSON files currently hold
The deployer exposes -SeedAdminData which sets this to "force" for one boot.
ÚADMIN_DATA_SEED_FROM_JSONÚautoÚneverNÚclient_profilesÚallowed_emailsrzzCSeeded admin_kv from JSON (mode=%s): clients=%d emails=%d drafts=%dzAdmin seed from JSON failed: %s)rar{r|r~rsr­Ú
has_any_valuer”r‰r6ÚinfoÚlenr„r…)ÚmodeÚ seed_clientsÚ seed_emailsÚ seed_draftsrˆs rDÚ%_seed_admin_state_from_json_if_neededrÎÁsAéô
2026-05-18 22:25:43 +12:00
J‰JN‰NÐÓ ?× IÀ6× Z€DØ ˆw„ÙÜ × Ò × Ò Ùð 6Œ>¤H×$:Ò$:Ó$<× Ü8ˆ ÜÔ Ü ß§K¿ Ù ß Ü—/’/Ð"3°\ÓB× Ü—//Ð"2°X¸{Ð4KÓL× Ü—/’/ (¨KÓ  Š Ø ”##¤S¨Ó%5´s¸;Ó7Gö
ñ
Cá 8øô
ôŠÐ8¸#×>ûð?üs®A*GÁ-GÁ0FÂF Â FÂGÂ6FÃFÃGÃFÃ%FÃ?F
Ä FÄ FÄ(FÄ) FÄ5FÅFÅ9FÆ GÆ FÆ
2026-05-18 22:25:43 +12:00
FÆFÆFÆ GÆF;Æ5GÆ;GÇGcó:V^8„dQhR\\,/#rhri)rCs"rDrErEæs÷  ,¬#¬c­ ,rFcƒó0"\P!4'\P!R4GRjxL
2026-05-19 23:36:58 +12:00
p\V\4'd´VP R.4p\V\ 4'\PP RR4PR4Uu0uF8q"P4'gKVP4P4kK: ppVPRV44V#\4#L×uupi5i)Nrzrmrnroc3ór"TF-p\V\4'gKVP4xK/ R#5irHrqrts& rDrwÚ-_load_allowed_emails_async.<locals>.<genexpr>ís#éÐL©v¨!¼ÀAÄs×9KœI˜AŸG™GŸI˜I«vùry)r­rrrr|Úlistrar{r}r~rsr‰)r‡rzrvr†s rDÚ_load_allowed_emails_asyncrÔæéÜ×Ò×ÒÜ—_’_Ð%5ÓÜ dœD× —X‘X˜Ó+ˆ˜&¤$×'Ü35·:±:·>±>ÐBRÐTVÓ3W×3]Ñ3]Ð^aÔ3bÓpÑ3b¨a×fmÑfm×foÔŸ› ŸÖ)Ñ3bÐ ÑL©vÓ Ü 7ùòqùs(5D·D¸A3DÂ+DÃ"DÃ)'DÄDcóFV^8„dQhR\\\3,/#rhr)rCs"rDrErEòs÷-¬4´´­-rFcƒóÄ"\P!4'd7\P!R4GRjxL
2026-05-18 22:25:43 +12:00
p\V\4'dV#\ 4#L&5i)N)r­rrrr”©r‡s rDÚ_load_client_profiles_asyncrØòsFéÜ×Ò×ÒÜ—_’_Ð%6ÓÜ dœD× ˆKÜ 8ùó5A ·A¸'A có$V^8„dQhR\/#rhr˜)rCs"rDrErEús÷$¤$ñ$rFcƒóÄ"\P!4'd7\P!R4GRjxL
p\V\4'dV#\ 4#L&5i)N)r­rrrr×s rDÚ_load_drafts_asyncrÜúsEéÜ×Ò×ÒÜ—_’_ XÓÜ dœD× ˆKÜ /ùrÙz Auth: loaded %d allowed email(s)có0V^8„dQhR\R\/#©rAÚrequestrQ©r rk)rCs"rDrErEs÷ ñ ¬'ð ´ rFcƒó,"VPPRR4pVPR4P4pV'g\ RRR7h\
;_uu_4GRjxL
\ PV4pV'g\ RRR7h\P!4VR,8”d$\ PVR4\ RR R7hVR
,uuRRR4GRjxL
#LL +GRjxL
'giR#;i5i) Ú
AuthorizationrnúBearer izNo token provided.©Ú status_codeÚdetailNzInvalid session.r¨z&Session expired. Please sign in again.Úemail) Úheadersr|Ú removeprefixr~r Ú
2026-05-19 23:36:58 +12:00
_auth_lockr«Úpop)Ú auth_headerÚtokenÚsessions& rDÚ_require_session_emailrï騗/‘/×% o°rÓ:€KØ × $ YÓ 7€Eç ܨÐ4HÔzŽzÜ"×& -ˆßܨCÐ8JÔ 9Š9‹;˜ Õ × Ñ  ¨Ô ¨CÐ8`Ô ÷zzzzzˆzüsOA#DÁ%C3Á&DÁ)A7C7Ã
DÃ-C5Ã.DÃ5DÃ7D Ã=DÃ>
D Ä D Ä Dcó0V^8„dQhR\R\/#)rCs"rDrErE#s÷ñ¬ð´CñrFcƒóh"\V4GRjxL
2026-05-19 23:36:58 +12:00
pV\9d\RRR7hV#L5i)Né“zOwner access required.rä)r"r )s& rDÚ_require_owner_emailró#s2éÜÓ 1€EØ ”OÔ¨Ð4LÔ €Lñ
2ùs 202có(V^8„dQhR\RR/#)rArQrk)rCs"rDrErE*s÷
Nñ
2026-05-19 23:36:58 +12:00
N¤ð
N¨ñ
NrFcƒó"VP4P4pV'gR#\;_uu_4GRjxL
V\9d\P V4\ \4p\ P!\\\44GRjxL
\RRV/4GRjxL
\P!RV4RRR4GRjxL
2026-05-19 23:36:58 +12:00
R#LEL1L +GRjxL
'giR#;i5i)NrÆrzz&Auth: registered new allowed email: %s)
2026-05-19 23:36:58 +12:00
r~rsÚ_allowed_emailsÚaddrŒÚasyncioÚ to_threadrrjr¿r6)Ú
normalizedr²s& rDÚ_register_emailrü*éØ×&€Jß ÙßzŽzØ œ_Ô × Ñ  
Ô œoÓ.ˆHÜ×#Ô$=¼sÄ?Ó?SÓT× &Ð'7¸(ÀHÐ9MÓN× KŠKÐ@À*Ô
z
UÙ zzzüsp;D½C ¾DÁAC(ÂC"ÂC(Â2C$Â3C(Ã DÃC&ÃDÃ"C(Ã$C(Ã&DÃ(D Ã.C1Ã/
2026-05-19 23:36:58 +12:00
D Ã:D Ã< Dcó4V^8„dQhR\R\RR/#)rAÚprofilerQrkr)rCs"rDrErE7s&÷DñD¤sðD´D¸DrFc
ƒóp"VP4P4pV'gR#\;_uu_4GRjxL
\P V/4p/VCVCP 4UUu/uF,wrEVfK \
V\4'd
VR8XdK*WEbK. pppWc8wdPV\V&\\4p\P!\V4GRjxL
\RV4GRjxL
RRR4GRjxL
R#LÍuuppiL2L L +GRjxL
'giR#;i5i)Nrn)
r~rsÚ_client_profilesr|rrrkrr¿)ÚexistingÚmergedr²s&& rDÚ_store_client_profiler7éØ×&€Jß ÙßzŽzÜ#×
°BÓð0˜8Ð/ wÐ
á7Øô
ä&0°´C×&8Ò&8¸QÀ"¹Wô
ˆAŠDÙ ñ
ð
Ô Ø+1Ô ˜ZÑ Ô-ˆHÜ×#Ô$>ÀÓI× &Ð'8¸C× zzùó
ñ
JÙ zzzüs‡;D6½D ¾D6Á.DÁ/D
Á<D
ÂD
Â!?DÃ DÃ!DÃ4DÃ5DÃ9 D6ÄDÄD6Ä
DÄDÄD6ÄD3 ÄD"Ä
D3 Ä+D3 Ä- D6có4V^8„dQhR\R\RR/#)rAÚipÚ
request_idrQNrõ)rCs"rDrErEHs!÷

!œ#ð
!¬3ð
!°4ñ
!rFcó(\P!4p\PV4pVedW#8dU\ W2,
2026-05-04 20:32:24 +12:00
4p\
P !RWV4\RRV^<,^, R2R\V4/R7h\VR#R#)Nz([%s] auth: blocked ip=%s (%ds remaining)é­z'Too many failed attempts. Try again in z minute(s).z Retry-After)) rªÚ monotonicÚ _blocked_ipsr|r¸r6r…r rk)rr Ú
unblock_atÚ remainings&& rDÚ_check_ip_blockedrHÜ
2026-05-19 23:36:58 +12:00
.Š.Ó
2026-05-04 20:32:24 +12:00
€CÜ×! %€JØÒØ Ô Ü˜JÕ-ˆIÜ NŠNÐEÀzÐW`Ô ØØÈbÅÐSTÕATÐ@UÐU`ШI«Ðð
2026-05-19 23:36:58 +12:00
ô ˜RÒ ñrFcó@V^8„dQhR\R\R\RR/#)rArr ÚreasonrQNrõ)rCs"rDrErEXs(÷ 
ñ 
œSð 
¬cð 
¼3ð 
À4ñ 
rFc óÖ\P!4p\PV\ 44pV'd+W4^,,
\
2026-05-04 20:32:24 +12:00
8”dVP
2026-05-19 23:36:58 +12:00
4K2VPV4\P!RWV\V44\V4\d=V\,\V&\P!RW\\V44R#R#)rz5[%s] auth: failure ip=%s reason=%r total_in_window=%dz2[%s] auth: ip=%s BLOCKED for %ds after %d failuresN)r Ú_auth_failures_by_ipÚ
setdefaultrrÚpopleftÚappendr6r…rrr
2026-05-04 20:32:24 +12:00
)rr rÚfailuress&&& rDÚ_record_auth_failurerXÜ
2026-05-19 23:36:58 +12:00
.Š.Ó
2026-05-04 20:32:24 +12:00
€CÜ.¨r´5³7Ó;€Hß
2026-05-19 23:36:58 +12:00
s a(Ô+AÔ×ÑÖØ ‡OOÜ
‡NJÈJÐ\bÔdgÐhpÓdqÔ
2026-05-04 20:32:24 +12:00
ˆ8ƒ}ÔÔ!7Õ ÜŠØ Ô2´C¸³Mö
2026-05-19 23:36:58 +12:00
ñ-rFcóHa]tRtRtoRtV3RlRltV3RlRltRtVtR#) Ú_BodySizeLimitMiddlewareigzûReject requests whose Content-Length exceeds MAX_REQUEST_BODY_BYTES.
Defence-in-depth alongside nginx ``client_max_body_size``. Streaming
2026-05-04 20:32:24 +12:00
requests without a Content-Length header are tracked byte-by-byte and
2026-05-19 23:36:58 +12:00
short-circuited if they overflow the cap.
có*<V^8„dQhRS[RS[RR/#)rArBÚ max_bytesrQN)rr¸)rCÚ
__classdict__s"€rDrEÚ%_BodySizeLimitMiddleware.__annotate__os"ø€÷#™Gðð#¸ñ#rFcóWnW nR#rH©rBr)ÚselfrBrs&&&rDÚ__init__Ú!_BodySizeLimitMiddleware.__init__os ØŒØrFcó0<V^8„dQhRS[RS[RS[RR/#)rAÚscopeÚreceiveÚsendrQN)rrr)rCrs"€rDrErss)ø€÷6¡Eð6±Gð6Á4ð6ÈDñ6rFcƒóbaaa a
"VR,R8wdSPVSV4GRjxL
R#VPR.4UUu/uF4wrEVPR4P4VPR4bK6 pppVPR4pVe2\ V4SP
2026-05-04 20:32:24 +12:00
8”d\
V4GRjxL
R#^o
Ro V VV
2026-05-19 23:36:58 +12:00
V3RlpS 'd\
2026-05-04 20:32:24 +12:00
V4GRjxL
2026-05-19 23:36:58 +12:00
R#SPWV4GRjxL
R#LäuuppiLU \dL]i;iL=L#5i)ÚtypeÚhttpNrèzlatin-1zcontent-lengthFcóÀ<"S!4GRjxL
pVR,R8Xd:S\VPRR44,
2026-05-04 20:32:24 +12:00
oSSP8”dRoRR/#V#LM5i)Nr*z http.requestÚbodyrFTzhttp.disconnect)r|r)ÚmessageÚ
overflowedr'Úreceivedr"s €€€€rDÚ_wrapped_receiveÚ;_BodySizeLimitMiddleware.__call__.<locals>._wrapped_receive…s\øéá#I—oˆGØv .ÔœC § ¡ ¨F°CÓ 8Ó9ؘdŸn™nÔ,Ø!%"Ð$5Ј
2026-05-19 23:36:58 +12:00
&ùsƒ AŽAAA)rBr|Údecodersr¸rÚ _send_413Ú
2026-05-04 20:32:24 +12:00
ValueError) r"r&r'r(rrÚdeclaredr1r/r0s f&f& @@rDÚ__call__Ú!_BodySizeLimitMiddleware.__call__ssûéØ =˜ —((˜5 '¨4Ó0× àPU×PYÑPYÐZcÐegÔPhÔiÑPhÉÈ1—88˜&×·±¸Ó0CÒCÑPhˆÑ—;‘;ÐØ Ò ð
Üx“= 4§>¡>Ô# D/×ð ˆØˆ
÷ ð ÷ ܘD“/× Øh‰hÓ5ñ;
2026-05-19 23:36:58 +12:00
1ùójñ
2026-05-04 20:32:24 +12:00
*øäô
Ùð
2026-05-19 23:36:58 +12:00
úñ"
5ùs{†%D/«D¬D/Á:DÂD/Â(DÃDÃDÃD/ÃD/Ã-D+Ã.D/Ä D-Ä
D/ÄD/ÄDÄ D(Ä%D/Ä'D(Ä(D/Ä-D/r!N) Ú__name__Ú
__module__Ú __qualname__Ú__firstlineno__Ú__doc__r#r7Ú__static_attributes__Ú__classdictcell__)rs@rDrrgsø‡ñ÷6rFrcó(V^8„dQhR\RR/#)rAr(rQN)r)rCs"rDrErEs÷ ñ œ$ð   rFcƒól"V!RRRRRR ./4GRjxL
V!RRRR/4GRjxL
2026-05-19 23:36:58 +12:00
R#LL5i)
r*zhttp.response.startÚstatusiNzhttp.response.bodyr-s${"detail":"Request body too large."})s content-typesapplication/jsonr¦)r(s&rDr4r4s_éÙ
2026-05-04 20:32:24 +12:00
ØÐÐó ÷ðñ
ØÐÐó ÷òñ ñ
ùs404©2ª4²4)r)Ú
2026-05-19 23:36:58 +12:00
allowed_hostsÚPOSTÚGETFiX)Ú
2026-05-04 20:32:24 +12:00
allow_originsÚ
allow_methodsÚ
2026-05-19 23:36:58 +12:00
allow_headersÚallow_credentialsÚmax_ager+có$V^8„dQhR\/#©rA©r )rCs"rDrErE®s÷ñ¬wñrFcƒó„"\P!4PR,pW Pn\
2026-05-04 20:32:24 +12:00
P !4pV!V4GRjxL
p\
2026-05-19 23:36:58 +12:00
P !4T,
2026-05-04 20:32:24 +12:00
R,p\P!RY PTPPTPT4Y$PR&T#Ly \d]\
P !4T,
2026-05-19 23:36:58 +12:00
R,p\P!RY PTPPT4hi;i5i)ºNéNNéèz[%s] %s %s crashed after %.0fmsu[%s] %s %s → %d (%.0fms)z X-Request-ID)ÚuuidÚuuid4ÚhexÚstater r r„r6Ú exceptionÚmethodÚurlrO)Ú call_nextr ÚstartedÚresponseÚ
2026-05-04 20:32:24 +12:00
elapsed_mss&& rDÚ_request_logging_middlewarer]­éä×! "Õ%€JØ)‡MÜnŠnÓ€GðÙ" +×+ˆô—." Õ4€JÜ
2026-05-19 23:36:58 +12:00
‡K‚KØ—NN G§K¡K×$4Ñ$4°h×6JÑ6JÈJôð(2×Ñ €Oñ,øÜ ôÜ—n’nÓÕ0°DÕ8ˆ
Ü×ÒØ Ÿ¨¯ © ×(8Ñ(8¸*ô
ð ð
üs2A EÁ CÁCÁCÁA5EÃCÃA'D=Ä=Ecó0V^8„dQhR\R\/#)rCs"rDrErEÆs÷@ñ@”Wð@¤ñ@rFcóèVPPR4pV'd'VPR4^,P4#VP'dVPP
2026-05-19 23:36:58 +12:00
#R#)zx-forwarded-forroÚunknown)r|r}r~ÚclientÚhost)Ú forwardeds& rDÚ_get_iprdÆsTØ×#Ð$5Ó6€Iߨ˜# &×.Ø")§.§. .ˆ7>‰>× Ñ Ð?°iÐ?rFcó0V^8„dQhR\R\/#©rArQ)rCs"rDrErEÒs÷ñ”CðœCñrFcó"VP4#rH)r~©s&rDÚ_trimmedriÒsØ ;‰;rFcóVV^8„dQhR\\,R\R\RR/#)rAÚattemptsr¯Úwindow_secondsrQN)rr¸)rCs"rDrErEÖs-÷ñœe¤E´ðÌðÐPTñrFcófV'd)W^,,
V8”dVP4K.R#R#)rN)r)rkrls&&&rDÚ_prune_attemptsrnÖs&ß
s a(¨>Ô×ÑÖñ:‰(rFcóHV^8„dQhR\R\R\R\/#)rAÚlast_attempt_atr¯Úmin_interval_secondsrQ)r¸)rCs"rDrErEÛs*÷ñ¬Eð¼ðÔUXðÔ]`ñrFcóJ\^\W!V,
2026-05-19 23:36:58 +12:00
,
44pV#)é)Úmaxr¸)rprqÚ retry_afters&&& rDÚ_seconds_until_allowedrvÛs"ÜÐ1¸?Õ5JÕM€KØ ÐrFcó@V^8„dQhR\R\R\RR/#)rAr rrQNrõ)rCs"rDrErEàs(÷44#´4#¼3ð4#Äsð4#Ètñ4#rFc
ƒóö"\P!4pVP4P4p\;_uu_4GRjxL
\
P
V\44p\P
V\44p\WS\4\Wc\4V'dmW5R
,,
2026-05-19 23:36:58 +12:00
\8dU\VR
,V\4p\P!RVVW5R
2026-05-04 20:32:24 +12:00
,,
\4\RRV R2R7h\!V4\"d0\P!RVV\"\4\RRR7h\!V4\$d0\P!RVV\$\4\RR R7hVP'V4VP'V4RRR4GRjxL
R#ELL +GRjxL
2026-05-19 23:36:58 +12:00
'giR#;i5i) NzB[%s] rate limited: ip=%s submitted again after %.1fs (minimum %ss)r zPlease wait about z seconds before trying again.räz7[%s] rate limited: ip=%s exceeded %d submissions in %sszIToo many enquiries from this connection. Please try again a little later.z:[%s] rate limited: email=%s exceeded %d submissions in %sszQThat email address has reached the enquiry limit for now. Please try again later.éÿÿÿÿ)r r~rsÚ_submit_rate_limit_lockÚ_submit_attempts_by_iprrÚ_submit_attempts_by_emailrnr2r1rvr6r…r r0r/r)r rÚnormalized_emailÚ ip_attemptsÚemail_attemptsrus&&& rDÚ_enforce_submit_rate_limitsr€àéÜ
.Š.Ó
€CØ—{‘{“}×ç&×,×7¸¼E»GÓDˆ Ü2×=Ð>NÔPUÓPWÓXˆä˜ Ô*CÔ˜Ô-FÔ ˜3¨R¥Õ0Ô3RÔ¸RµÀ#ÔGfÓgˆKÜ NŠNØØØ "•oÕ 
2026-05-04 20:32:24 +12:00
ô ØØ+¨K¨=Ð8UÐð
ô
ˆ{Ó Ô NŠNØØÜ 
ô ØØð
ô
ˆ Ô":Ô NŠNØØ Ü 
ô ØØð
2026-05-19 23:36:58 +12:00
ð
×ј3ÔØ×ј"÷a'×&×&×&×&×&üsOAG9ÁGÁ G9Á E9GÇ G9ÇGÇG9ÇG9ÇG6 Ç"G%Ç#
2026-05-04 20:32:24 +12:00
G6 Ç.G6 Ç0 G9có4V^8„dQhR\R\RR/#©rAr r‡rQN)rkr7)rCs"rDrErEs!÷ 
ñ 
¤Sð 
´ð 
À4ñ 
rFcóÈVPeVP^8:d%\P!RV4\RRR7h\P!4R,VP,
2026-05-19 23:36:58 +12:00
R, pV\
8d+\P!RVV\
4\RRR7hV\ 8”d+\P!RVV\ 4\RR R7hR#)
Nz/[%s] rejected: missing or invalid formStartedAtéz&Please refresh the page and try again.rärQz7[%s] rejected: form submitted too quickly (%.2fs < %ss)z;Please take a moment to fill in the form before sending it.z2[%s] rejected: stale form submission (%.0fs > %ss)zLThis form has been open for too long. Please refresh the page and try again.)Ú
formStartedAtr6r…r r(r')r r‡Úelapsed_secondss&& rDÚ_enforce_form_timingr‡Ø ×ÑÒ! T×%7Ñ%7¸1Ô%<ÜŠÐHÈ*ÔØØ
2026-05-04 20:32:24 +12:00
ð
ô
—yy“{ )¨D×,>Ñ,>Õ>À$ÕF€OàÔŠØ Ø Ü ô 
ô ØØ
ð
ð
2026-05-18 22:25:43 +12:00
ÔŠØ Ø Ü ô 
2026-05-04 20:32:24 +12:00
ô ØØ
ð
2026-05-19 23:36:58 +12:00
ñ*rFcó0V^8„dQhR\R\/#©rAr‡rQ)r7Úbool)rCs"rDrErE:s÷ð(´(rFcó>\\VP44#rH)riÚwebsiter×s&rDÚ_is_honeypot_triggeredr:sÜ ˜ŸÓ 'rFcó0V^8„dQhR\R\/#r‰)r:)rCs"rDrErE>s÷;´;rFcóN\VP4P4R8H#)Úgeneral)riÚ enquiryTypersr×s&rDÚ_is_general_enquiryr>s!Ü D× %× Ñ :rFcó0V^8„dQhR\R\/#r‰©r:rk)rCs"rDrErEBs÷QñQÔQ´QrFcó,\V4'dR#R#)zGeneral enquiryzBooking enquiry)rr×s&rDÚ_enquiry_type_labelrBsÜ 3°D× 9Ò 9Ð ÐPÐ?PÐPrFcó4V^8„dQhR\R\RR/#r)rkr:)rCs"rDrErEFs"÷3
ñ3
2026-05-04 20:32:24 +12:00
¤Sð3
Ô0Að3
Àdñ3
rFcó²\VP4P4pVR9d/\P!RWP4\ RRR7h\VP 4'g%\P!RV4\ RRR7h\VP4'g%\P!RV4\ RRR7h\V4'dr\'g%\P!R V4\ R
R R7h\VP4'g%\P!R V4\ RR
R7hR#\VP4'g%\P!RV4\ RRR7h\VP4'g%\P!RV4\ RRR7hR#)Úbookingz%[%s] rejected: invalid enquiryType=%rr„z1Please choose a valid enquiry type and try again.räz [%s] rejected: missing full nameúPlease enter your full name.z#[%s] rejected: missing phone numberz!Please enter your contact number.z-[%s] rejected: general enquiries are disabledròz>General enquiries are currently unavailable through this form.z.[%s] rejected: missing general enquiry messagezPlease tell us how we can help.Nz[%s] rejected: missing pet nameúPlease enter your dog's name.z[%s] rejected: missing locationzPlease enter your location.>r™r)
rirrsr6r…r ÚfullNameÚphonerr&r.ÚpetNameÚlocation)r r‡Ú enquiry_types&& rDÚ_validate_submissionr¡FsˆÜ˜D×5€LàЊÐ
×L\ÑL\ÔØØ
ð
ô
D—MM× ŠÐ9¸ØØ
ð
ô
D—J‘J× Ò ÜŠÐ<¸jÔØØ
ð
ô
˜4× Ò ß NŠNÐJÈJÔ ØØð
2026-05-19 23:36:58 +12:00
ô˜Ÿ × NŠNÐKÈZÔ ØØð
2026-05-04 20:32:24 +12:00
ñ ä D—L‘L× ŠÐ8¸*ÔØØ
ð
ô
D—MM× ŠÐ8¸ØØ
ð
ñ #rFcó(V^8„dQhR\RR/#©rAr‡rQr:)rCs"rDrErE|s÷ñÔ 1ð°dñrFcóœ\V4'dRMRVn\VP4Vn\VP4Vn\VP
4Vn\VP 4Vn\VP4Vn\VP4Vn\VP4Vn VPUu.uF!p\V4'gK\V4NK# upVn
VPUu.uF!p\V4'gK\V4NK# upR,Vn \^VP4Vn
RF'p\W4pVe
V^8:gK\WR4K) \V4'dRVnRVn.Vn
R#R#uupiuupi)rr™:Né NNrn©ÚvisitStartedAtÚ
pageEnteredAtÚfirstInteractionAtÚ
sendClickedAt)rrrirr.ÚreferrerÚpageÚservicesÚjourneyrtÚ stepChangesÚgetattrÚsetattr)r‡ÚserviceÚstepÚ
field_namer½s& rDÚ_normalize_submissionr¶|sJÜ$7¸×$=Ò$=‘yÀ9€DÔܘTŸ]™]Ó+€D„Mܘ$Ÿ*™*Ó%€D„JܘDŸL™LÓ)€D„LܘTŸ]™]Ó+€D„MܘDŸL™LÓ)€D„LܘTŸ]™]Ó+€D„MܘŸÓ#€D„IØ6:·m²mÓY±m¨7ÄxÐPW×GXÔ&”X˜&±mÑY€D„MØ/3¯|ª|ÓN©| t¼xÈ¿~”N”H˜T–N©|ÑNÈsÕS€D„Lܘ1˜d×/€DÔã
Ü˜ÓØ Š=˜E QžJÜ D  aô
˜4× Ò ØˆŒ ؈Œ
؈Ž
ñ!ùòZùÚNsÃGÃ7GÄG Ä4G có4V^8„dQhR\R\RR/#r)rkr<)rCs"rDrErEs(÷+añ+a´ð+aÔ;Oð+aÐTXñ+arFcóô\VP4'g%\P!RV4\ RRR7h\VP
4'g%\P!RV4\ RRR7hRRRR R
R R R
RRRRRR/pVP
4FCwr4\\W44'dK!\P!RW4\ RVR7h VP'g%\P!RV4\ RRR7hVP'g\ RRR7hVP'g\ RRR7hVP'g\ RRR7hVP'g\ RRR7h\VP4pVPR4'd\V4^€8d%\P!RV4\ RRR7hR#)z+[%s] onboarding rejected: missing full namer„z'[%s] onboarding rejected: missing phoneúPlease enter your phone number.ÚaddressúPlease enter your address.ÚdogNamerÚdogBreedúPlease enter your dog's breed.ÚvetNamez"Please enter your vet clinic name.ÚvetPhonez#Please enter your vet phone number.ÚemergencyContactNamez'Please enter an emergency contact name.ÚemergencyContactPhonez/Please enter an emergency contact phone number.z$[%s] onboarding rejected: missing %sz*[%s] onboarding rejected: missing servicesz#Please choose at least one service.z$Please confirm council registration.z(Please confirm vaccinations are current.z,Please confirm emergency veterinary consent.z*Please confirm the onboarding declaration.údata:image/png;base64,z3[%s] onboarding rejected: invalid signature payloadú)Please add your signature before sending.N)rir6r…r rÚservicesNeededÚcouncilRegistrationConfirmedÚvaccinationsConfirmedÚemergencyVetConsentÚ
termsAcceptedÚsignatureDataUrlÚ
startswithrÉ)r r‡Úrequired_fieldsrµr.Ú signatures&& rDÚ_validate_onboarding_submissionrÎs´Ü D—MM× ŠÐDÀjÔ¨Ð4RÔ D—J‘J× Ò ÜŠÐ@À*Ô¨Ð4UÔ ÐÐÐÐÐÐ IØÐ!Rð€Oðˆ
Üœ Ó NŠNÐAÀ:Ô ¨C¸Ô 
2026-05-19 23:36:58 +12:00
× × Ð ÜŠÐCÀZÔ¨Ð4YÔ × ¨Ð4ZÔ × ¨Ð4^Ô × ¨Ð4bÔ × × Ð Ü¨Ð4`Ô˜×/€IØ × Ñ Ð 8× 9¼SÀ»^ÈcÔ=QÜŠÐLÈjÔ¨Ð4_Ô>RrFcó(V^8„dQhR\RR/#)r<)rCs"rDrErEÂs÷,Ô+?ð,ÀDñ,rFcóþ\VP4Vn\VP4Vn\VP4Vn\VP4Vn\VP
2026-05-04 20:32:24 +12:00
4Vn\VP 4Vn\VP4Vn\VP4Vn\VP4Vn \VP4Vn
\VP4Vn \VP4Vn \VP4Vn
\VP4Vn\VP4VnVP Uu.uF!p\V4'gK\V4NK# upR,VnRF'p\#W4pVe
V^8:gK\%WR4K) R#uupi)rONr§)rirÚdogAgeÚ temperamentÚ medicalNotesÚaccessInstructionsr¿r­)r‡s& rDÚ _normalize_onboarding_submissionrÕÂsgܘTŸ]™]Ó+€D„Mܘ$Ÿ*™*Ó%€D„JܘDŸL™LÓ)€D„LܘDŸL™LÓ)€D„LܘTŸ]™]Ó+€D„Mܘ4Ÿ;™;Ó'€D„KÜ × 0Ñ 0Ó1€DÔÜ  ×!2Ñ!2Ó3€DÔÜ& t×'>Ñ'>Ó?€DÔܘDŸL™LÓ)€D„LܘTŸ]™]Ó+€D„MÜ (¨×)BÑ)BÓ C€DÔÜ!)¨$×*DÑ*DÓ!E€DÔܘTŸ]™]Ó+€D„MܘŸÓ#€D„IØ<@×<OÒ<OÓeÑ<O°ÔS[Ð\c×SdÔ,œ8 ,Ñ<OÑeÐfhÕi€DÔã`ˆ
Ü˜ÓØ Š=˜E QžJÜ D  aùòfs ÆG:Æ-G:có0V^8„dQhR\R\/#)rAÚuarQ)rCs"rDrErEÚs÷

$”#ð
$œ#ñ
$rFcóŽaS'gR#.ROp.ROp\V3RlV4R4p\V3RlV4R4pV RV 2#)ÚUnknownc3ó><"TFwrVS9gKVxK R#5irH©ruÚnr×s& €rDrwÚ_parse_ua.<locals>.<genexpr>âsøéÐ6¡(™$˜!¨a°2©g—A’A£(ùóƒ 
zUnknown browserc3ó><"TFwrVS9gKVxK R#5irHs& €rDrwãsøéИ¨A°©G—1’1£ùrßz
Unknown OSz on ))zEdg/ÚEdge)zOPR/ÚOpera)zChrome/ÚChrome)zFirefox/ÚFirefox)zSafari/ÚSafari))z
Windows NT 10z
Windows 10/11)z Windows NT 6z Windows 8)zMac OS XÚmacOS)ÚiPhonerç)ÚiPadrè)ÚAndroidré)ÚLinuxrê)Únext)r×ÚbrowsersÚsystemsÚbrowserÚsystemsf rDÚ _parse_uarðÚsPø€ß
Ùò@€Hò;€GôÔ6¡(Ó6Ð8IÓJ€GÜ
ÔÓ4°lÓ
C€F؈Yd˜6˜ #rFcó<V^8„dQhR\R\R\/#©rAÚlabelr½rQ)rCs"rDrErEçs!÷ 
ñ 
”sð 
¤3ð 
¬3ñ 
rFcó(V'gR#RV RV R2#)rn
<tr>
<td style="padding:8px 0;color:#888;font-size:13px;white-space:nowrap;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;width:130px;">z×</td>
<td style="padding:8px 0 8px 16px;color:#213021;font-size:14px;font-weight:500;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">ú</td>
</tr>r¦©s&&rDÚ _detail_rowr÷çs/ß Ùð49°'ð:'ð(- .
ð
ð
rFcó<V^8„dQhR\R\R\/#)rCs"rDrErEõs!÷ 
ñ 
”Sð 
¤ð 
– 
rFcó(V'gR#RV RV R2#)rn
<tr>
<td style="padding:5px 0;color:#aaa;font-size:12px;white-space:nowrap;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;width:100px;">zÙ</td>
<td style="padding:5px 0 5px 16px;color:#666;font-size:12px;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;word-break:break-all;">rõs&&rDÚ _meta_rowrúõs1ß Ùð49°'ð:<ð=B¸C
ð
ð
rFcó>V^8„dQhR\R,R\/#)rAÚ duration_msNrQ©r¸rk)rCs"rDrErEs÷ ñ ¤S¨4¥Zð ´Cñ rFcóÐVeV^8dR#\\VR, 44p\V^<4wr#\V^<4wrBV^8”d V RV R2#V^8”d V RV R2#V R2#)NrnrQzh Úmzm r±)r¸ÚroundÚdivmod)Ú
total_secondsÚminutesÚsecondsÚhourss& rDÚ_format_duration_msrsØÒ˜k¨AœoÙ䜘k¨DÕ2€Mܘm¨RÓ€GܘG RÓ(N€Eà ˆq„yؘ˜7˜) 1Є{ؘ"˜W˜I ˆYaˆrFcóXV^8„dQhR\R,R\R,R\/#)rAÚstart_msNÚend_msrQ)rCs"rDrErEs)÷ 
2026-05-19 23:36:58 +12:00
ð2´C¸$µJð2Ä3ñ2rFcóDVe VeW8dR#\W,
2026-05-04 20:32:24 +12:00
4#)Nrn)r)rr s&&rDÚ_duration_betweenr s"ØÒ˜6š>¨VÔ->ÙÜ ˜ 1rFcóFV^8„dQhR\\,R\/#)rArQ)rk)rCs"rDrErEs÷ ñ œ4¤ ¬ñ rFcó8V'gR#RPV4#)rnz -> )Újoin)s&rDÚ
2026-05-19 23:36:58 +12:00
_journey_textrsß ÙØ ;‰; ÐrFrncó<V^8„dQhR\R\R\/#)rAÚ
2026-05-04 20:32:24 +12:00
badge_htmlÚsubtitlerQ)rCs"rDrErE s!÷
ñ
2026-05-19 23:36:58 +12:00
œSð
2026-05-04 20:32:24 +12:00
´ð
¼cñ
2026-05-19 23:36:58 +12:00
rFcóbV'dRV R2MRpV'dRV R2MRpR\ RV RV R2#)z<div style="margin-top:20px;">ú</div>rnz¿<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
2026-05-04 20:32:24 +12:00
font-size:13px;color:#7aaa7a;letter-spacing:0.04em;margin-top:8px;">
zx
<tr>
<td style="background:#213021;padding:36px 48px 32px;text-align:center;">
<img src="zŠ" width="161" height="32" alt="GoodWalk"
style="display:inline-block;max-width:161px;height:auto;border:0;">
ú
z
</td>
2026-05-19 23:36:58 +12:00
</tr>)r*)rrÚbadgeÚsubs&& rDÚ _logo_headerr scßCMÐ,¨Z¨L¸Ñ ?ÐSU€E÷(0ðà
2026-05-04 20:32:24 +12:00
˜ $à57ððô !
à
ˆ
Ø
ˆð
 ðrFcó0V^8„dQhR\R\/#r‰r”)rCs"rDrErE0s÷F ñF ÔF ¬SñF rFc ó\V4pVP'dRPVP4MRp\RVP4\R\ VP 44\RVP4\R\V44.pV'd?VP'd&VP\RVP44RpRpR pMŸVP\R
VP4\R VP4\R V4.4VP'd&VP\R
VP44RVP R2pRVP R2pRpR\VR7 RVPP4^, RV RRPV4 RV R2 #)ú, z
Not specifiedz Your nameÚEmailÚPhoneÚTypeÚMessagezBWe&rsquo;ve received your message and we will be in touch shortly.z<We will review your message and reply within 1 business day.z)General enquiries and dog walking supportzDog&rsquo;s nameÚLocationÚServicesú
2026-05-19 23:36:58 +12:00
About the dogz•We&rsquo;ve received your enquiry and we will be in touch shortly to arrange a <strong style="color:#213021;">Meet &amp; Greet</strong> with you and Ú.zWe will review your details and reach out within 1 business day to schedule a free Meet &amp; Greet. No commitment required &mdash; just a chance for z to make a new best friend.z!Professional dog walking servicesav<!DOCTYPE html>
2026-05-04 20:32:24 +12:00
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>We received your enquiry</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#f2f2f0;padding:40px 16px;">
<tr><td align="center">
<table width="600" cellpadding="0" cellspacing="0" role="presentation"
style="max-width:600px;width:100%;border-radius:16px;overflow:hidden;
box-shadow:0 4px 24px rgba(0,0,0,0.08);">
)ra?
<!-- Body -->
<tr>
<td style="background:#ffffff;padding:48px 48px 40px;">
<h1 style="margin:0 0 8px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:26px;font-weight:700;color:#213021;line-height:1.2;">
Thanks, zÚ! &#x1F43E;
</h1>
<p style="margin:0 0 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:16px;color:#555;line-height:1.65;">

</p>
<!-- Details card -->
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#f8f7f4;border-radius:12px;margin-bottom:36px;">
<tr>
<td style="padding:28px 32px;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;
color:#888;text-transform:uppercase;margin-bottom:20px;">
Your enquiry summary
</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
rna*
</table>
</td>
</tr>
</table>
<!-- What's next -->
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="border-left:3px solid #FFD100;margin-bottom:36px;">
<tr>
<td style="padding:4px 0 4px 20px;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:13px;font-weight:700;color:#213021;margin-bottom:6px;">
What happens next?
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#666;line-height:1.6;">

</div>
</td>
</tr>
</table>
<p style="margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#888;line-height:1.6;">
Questions? Just reply to this email or reach us at 022 642 1011.
</p>
</td>
</tr>
<!-- Footer -->
<tr>
<td style="background:#213021;padding:24px 48px;text-align:center;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#5a8a5a;line-height:1.6;">
GoodWalk &middot; Auckland, New Zealand<br>
<a href="https://www.goodwalk.co.nz" style="color:#7aaa7a;text-decoration:none;">
2026-05-04 20:32:24 +12:00
goodwalk.co.nz
</a>
2026-05-04 20:32:24 +12:00
</div>
</td>
2026-05-04 20:32:24 +12:00
</tr>
</table>
</td></tr>
2026-05-04 20:32:24 +12:00
</table>
2026-05-04 20:32:24 +12:00
</body>
2026-05-19 23:36:58 +12:00
</html>)rrrkrrr.rÚextendržrr})r‡Ú
2026-05-04 20:32:24 +12:00
is_generalÚ
services_textÚenquiry_summary_rowsÚ
intro_htmlÚnext_steps_htmlÚ
logo_subtitles& rDÚ client_emailr+0s¿Ü$ *€JØ04·
2026-05-04 20:32:24 +12:00
·
°
D—II˜dŸm™mÔ,À?€Mä§¡ÓGœS §¡›_ÓG˜TŸZ™ZÓÓÐ÷Ø <<ˆ × °I¸t¿|¹|Ó(LÔ  ð
2026-05-04 20:32:24 +12:00
Kð ðD
à×з ± Ó˜J¨¯
©
2026-05-04 20:32:24 +12:00
Ó˜
Ó
ô
ð <<ˆ × °OÀTÇ\Á\Ó(RÔ 
Yà|‰|ˆn˜
ð ð 
àŸ,™,˜Ð'Bð
Dð ð
2026-05-04 20:32:24 +12:00
<ˆ
ð ô"
˜}Ô -Ð/ð—}‘}×,¨QÕ1ðˆlðð—W‘WÐ4ð" &ðy\ ð\ rFcóHV^8„dQhR\R\R\R\/#©rAr‡rrQr”)rCs"rDrErE¹s/÷w ñw Ôw ¬Sðw ¼3ðw Ä3ñw rFcóÌ\V4pVP'dRPVP4MRp\P!4pVP R4P
R4pVPP4'd"VPP4^,MRpV'dRMRpV'dRMRp VP'dR V R
VP R 2MR p
R
PVR7p VP'd\RVP4M \RR4p VP'd\RVP4MR p
\R\VP VP"44p\R\VP$VP"44p\R\VP&VP"44p\R\VP(VP"44pVP*'d \R\-VP*44MR p\R\/VP044pV'dRMRp\3R\5V44.pV'dpVP6'd&VP9\3RVP644VP:'d&VP9\3RVP:44MFVP=\3RVP64\3RVP:4\3RV4.4R P.RNV NRN\?V R 7 NR!NV NR"NVP@ NR#NVP@ NR$NVP NR%NVP@ NR&NVP@ NR'NVPB NR&NVPB NR(NV NR)NR PV4 NR*NV
NR+NVP@ NR,NV NR-NVPB NR.NVPB NR/N\R0V4 NR*N\R1V4 NR*NV NR*NV NR*NV NR*NV NR*NV NR*NV NR*NV
NR*NV NR2N4#)3rõ—ú%d %b %Y at %I:%M %pÚthemzNew GoodWalk EnquiryzNew GoodWalk Leadrr"a)
2026-05-04 20:32:24 +12:00
<tr>
<td colspan="2" style="padding:16px 0 0;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#888;
text-transform:uppercase;margin-bottom:8px;">zë</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#444;line-height:1.6;background:#f0efe9;
border-radius:8px;padding:14px 16px;">z</div>
</td>
</tr>rnar<div style="display:inline-block;background:#FFD100;border-radius:100px;
padding:10px 28px;">
<span style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:18px;font-weight:700;color:#213021;">
&#x1F4E9;&nbsp; New enquiry!
</span>
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#5a8a5a;margin-top:12px;">
Submitted {submitted_at}
</div>)Ú submitted_atú Came fromúDirect / bookmarkÚPageú Time on siteú Time on pageúActive form timeúForm open timez Step changesÚJourneyzEnquiry detailszDog &amp; servicesrÚDogr r!zú<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light only">
<meta name="supported-color-schemes" content="light">
<title>a</title>
<style>
:root {
color-scheme: light only;
supported-color-schemes: light;
}
body,
table,
td,
div,
p,
span,
a {
forced-color-adjust: none !important;
-webkit-text-size-adjust: 100%;
}
.gw-owner-body {
background: #f2f2f0 !important;
color: #213021 !important;
}
.gw-owner-shell {
background: #ffffff !important;
}
.gw-owner-dark-panel {
background: #213021 !important;
}
.gw-owner-email-chip {
display: inline-block;
background: #ffffff !important;
color: #213021 !important;
2026-05-04 20:32:24 +12:00
border-radius: 10px;
padding: 12px 14px;
border: 1px solid #d9dfd9;
text-decoration: none !important;
}
.gw-owner-email-chip,
.gw-owner-email-chip a,
a.gw-owner-email-chip {
color: #213021 !important;
}
@media (prefers-color-scheme: dark) {
html,
body,
.gw-owner-body {
background: #f2f2f0 !important;
color: #213021 !important;
}
.gw-owner-shell,
.gw-owner-shell td {
background: #ffffff !important;
color: #213021 !important;
}
.gw-owner-dark-panel,
.gw-owner-dark-panel td {
background: #213021 !important;
}
.gw-owner-email-chip,
.gw-owner-email-chip a,
a.gw-owner-email-chip {
background: #ffffff !important;
color: #213021 !important;
}
}
2026-05-04 20:32:24 +12:00
</style>
</head>
<body class="gw-owner-body" style="margin:0;padding:0;background:#f2f2f0;color:#213021;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" bgcolor="#f2f2f0"
style="background:#f2f2f0;padding:40px 16px;">
<tr><td align="center">
<table class="gw-owner-shell" width="600" cellpadding="0" cellspacing="0" role="presentation" bgcolor="#ffffff"
style="max-width:600px;width:100%;border-radius:16px;overflow:hidden;
box-shadow:0 4px 24px rgba(0,0,0,0.08);background:#ffffff;">
)ra
<!-- Body -->
<tr>
<td bgcolor="#ffffff" style="background:#ffffff;padding:40px 48px 36px;color:#213021;">
<!-- Quick contact -->
<table class="gw-owner-dark-panel" width="100%" cellpadding="0" cellspacing="0" role="presentation" bgcolor="#213021"
style="background:#213021;border-radius:12px;margin-bottom:28px;">
<tr>
<td bgcolor="#213021" style="padding:22px 24px;background:#213021;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
2026-05-19 23:36:58 +12:00
font-size:11px;font-weight:700;letter-spacing:0.1em;color:#7aaa7a;
text-transform:uppercase;margin-bottom:10px;">
2026-05-04 20:32:24 +12:00
Quick contact
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#d8e6d8;line-height:1.6;margin-bottom:10px;">
Email z| directly:
</div>
<div style="margin-bottom:12px;">
<a href="mailto:aß" class="gw-owner-email-chip"
style="display:inline-block;background:#ffffff;color:#213021 !important;
font-family:Menlo,Consolas,'SFMono-Regular',monospace;
font-size:20px;font-weight:700;line-height:1.4;word-break:break-all;
border-radius:10px;padding:12px 14px;border:1px solid #d9dfd9;
2026-05-19 23:36:58 +12:00
text-decoration:none;">
a 
</a>
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#b7cbb7;line-height:1.6;">
Tap and hold the address to copy on iPhone, or tap below to open a new email.
</div>
2026-05-19 23:36:58 +12:00
</td>
</tr>
</table>
<!-- Owner details -->
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;
text-transform:uppercase;margin-bottom:16px;">Owner details</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#f8f7f4;border-radius:12px;margin-bottom:28px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td style="padding:6px 0;font-size:13px;color:#888;width:80px;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">Name</td>
<td style="padding:6px 0 6px 16px;font-size:15px;font-weight:600;
color:#213021;font-family:-apple-system,BlinkMacSystemFont,
'Segoe UI',sans-serif;vertical-align:top;">a#</td>
</tr>
<tr>
<td style="padding:6px 0;font-size:13px;color:#888;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">Email</td>
<td style="padding:6px 0 6px 16px;font-size:14px;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">
<a href="mailto:zX" style="color:#213021;font-weight:500;
text-decoration:none;">a9</a>
</td>
</tr>
<tr>
<td style="padding:6px 0;font-size:13px;color:#888;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">Phone</td>
<td style="padding:6px 0 6px 16px;font-size:14px;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">
<a href="tel:a¤</a>
</td>
</tr>
</table>
</td></tr>
</table>
<!-- Dog & service details -->
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;
text-transform:uppercase;margin-bottom:16px;">aO</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#f8f7f4;border-radius:12px;margin-bottom:28px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
2026-05-19 23:36:58 +12:00
ú
a4
</table>
</td></tr>
</table>
<!-- CTA buttons -->
<table cellpadding="0" cellspacing="0" role="presentation" style="margin-bottom:32px;">
<tr>
<td style="padding-right:12px;">
<a href="mailto:ac"
style="display:inline-block;background:#213021;color:#FFD100;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;font-weight:600;text-decoration:none;
border-radius:8px;padding:12px 24px;">
Email zb
</a>
</td>
<td>
<a href="tel:a{"
style="display:inline-block;background:#f8f7f4;color:#213021;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;font-weight:600;text-decoration:none;
border-radius:8px;padding:12px 24px;border:1px solid #e0e0d8;">
Call aµ
</a>
2026-05-19 23:36:58 +12:00
</td>
</tr>
</table>
<!-- Session info -->
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="border-top:1px solid #eeeee8;padding-top:20px;">
<tr><td>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
2026-05-19 23:36:58 +12:00
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#ccc;
text-transform:uppercase;margin-bottom:12px;">Session info</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
ú
IP addressÚBrowseraE
</table>
</td></tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td style="background:#f8f7f4;padding:18px 48px;text-align:center;
border-top:1px solid #e8e8e4;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#bbb;">
Sent automatically by GoodWalk enquiry form
</div>
2026-05-19 23:36:58 +12:00
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)"rrrÚstrftimeÚlstriprœr~r}r.rCr­r r…rkrrrr$rr)r‡rr%r&r3Ú
first_nameÚ email_titleÚ
2026-05-19 23:36:58 +12:00
message_labelÚ
message_blockrÚ referrer_rowÚpage_rowÚvisit_time_rowÚ
page_time_rowÚactive_time_rowÚ
form_time_rowÚstep_changes_rowÚ journey_rowÚdetail_headingÚ detail_rowss&&& rDÚ owner_emailrP¹Ü$ *€JØ04·
·
°
D—II˜dŸm™mÔ,À5€MÜ
2026-05-04 20:32:24 +12:00
,Š,.€CØ—<<Ð 6Ó7×>¸C€LØ-1¯]©]×-@Ñ-@×-BÒ-B×& €Jß,6Ñ(Ð<O€Kç!+€Mð ðBð
CPÀðQ<@¿<¹<¸I
ñ

2026-05-19 23:36:58 +12:00
ð#%ðð
2026-05-18 22:25:43 +12:00
÷¨\˜Ó
ð=A¿M¿M¸M”9˜[¨$¯-©-Ô8ÌyÐYdÐfyÓOz€LØ/3¯y¯y¨yŒy˜ §¡Ô+¸b€Hܘ~Ô/@À×ATÑATÐVZ×VhÑVhÓ/iÓj€NܘnÔ.?À×@RÑ@RÐTX×TfÑTfÓ.gÓh€MÜÐ 2Ô4EÀd×F]ÑF]Ð_c×_qÑ_qÓ4rÓs€OÜÐ.Ô0AÀ$×BTÑBTÐVZ×VhÑVhÓ0iÓj€MØKO×K[×K[ÐK[”y ´°T×5EÑ5EÓ1FÔGÐacÐܘI¤}°T·\±\Ó'BÓC€Kß*4Ñ&Ð:N€NܘvÔ':¸4Ó'@ÓB€KçØ <<ˆ × Ñ œ{¨5°$·,±,Ó ==ˆ=Ø × Ñ œ{¨:°t·}±}Ó Føà×Ñä˜E 4§<¡<Ó˜¯
©
2026-05-19 23:36:58 +12:00
Ó˜
Ó
ô
2026-05-18 22:25:43 +12:00
÷} ó} ð
ð} ð ˆð} ðU ð} ôx
 Ô 'Ð(ðy} ðx)ðy} ð\&˜,ð]} ð\'%ð]} ðb&*§Z¡Z Lðc} ðb1ðc} ðn—zzlðo} ðn#Kðo} ðbLPÏ=É=È/ðc} ðb Z'ðc} ðt(,§z¡z lðu} ðt31ðu} ðv26·±° ðw} ðv
=$ðw} ðJ%)§J¡J <ðK} ðJ01ðK} ðL26·±° ðM} ðL
=GðM} ð`HVÐFVða} ð`Wða} ðl—77˜(ðm} ðl)ðm} ðn!/ðo} ðn "#ðo} ð@$(§:¡: ,ðA} ð@/ðA} ðJ&˜,ðK} ðJ' ðK} ðR!%§
¡
˜|ðS} ðR,ðS} ð\Ÿ*™*˜ð]} ð\&ð]} ôx˜\¨2Ó/ðy} ðx0ðy} ôz˜Ó1ð{} ðz2ð{} ð|"ð}} ð|#ð}} ð~!} ð~"ð} ð@#ðA} ð@$ðA} ðB!/ðC} ðB"ðC} ðD$ðE} ðD%ðE} ðF .ðG} ðF!ðG} ðH*ðI} ðHðI} ðJ-ðK} ðJ ôK} ð} rFcóHV^8„dQhR\R\R\R\/#r-©r<rk)rCs"rDrErEós0÷f ñf Ô!5ðf ¼3ðf Ìðf ÔQTñf rFc óî\P!4PR4PR4pRP VP
4p\
R\VPVP44p\
R\VPVP44p\
R\VPVP44p\
R\VPVP44pVP'd\
RVP4M \
RR4p VP'd\
R VP4MR
p
2026-05-19 23:36:58 +12:00
VP'dR VP R 2MR
2026-05-18 22:25:43 +12:00
p VP 'dR
VP R 2MR
2026-05-19 23:36:58 +12:00
p VP"'dRVP" R 2MR
p
RVP$ R2pRV R2pR
P .RN\'VRR7 NRNVP( NRNVP( NRNVP* NRNVP* NRN\-RVP.4 NRN\-R\1VP(44 NRN\-RVP*4 NRN\-RVP24 NR N\-R!VP44 NRN\-R"VP64 NRN\-R#VP8;'gR$4 NRN\-R%V4 NRNV NRNV NRNV
NR&N\-R'VP:4 NRN\-R(VP<4 NRN\-R)VP>4 NRN\-R*VP@4 NRN\-R+R,4 NRN\-R-R,4 NRN\-R.R,4 NRN\-R/R04 NR1NV NR2N\
R3V4 NRN\
R4V4 NRNV NRNV NRNV NRNV NRNV NRNV
NR5N4#)6r0r1rr7r8r9r:r4r5r6rna;
2026-05-19 23:36:58 +12:00
<tr>
<td colspan="2" style="padding:16px 0 0;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#888;
text-transform:uppercase;margin-bottom:8px;">Temperament and routine</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#444;line-height:1.6;background:#f0efe9;
border-radius:8px;padding:14px 16px;">ú </div>
</td>
</tr>a1
<tr>
<td colspan="2" style="padding:16px 0 0;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#888;
text-transform:uppercase;margin-bottom:8px;">Medical notes</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#444;line-height:1.6;background:#f0efe9;
2026-05-19 23:36:58 +12:00
border-radius:8px;padding:14px 16px;">a<
<tr>
<td colspan="2" style="padding:16px 0 0;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
2026-05-19 23:36:58 +12:00
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#888;
text-transform:uppercase;margin-bottom:8px;">Home access instructions</div>
2026-05-19 23:36:58 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#444;line-height:1.6;background:#f0efe9;
border-radius:8px;padding:14px 16px;">á•
<div style="margin-top:16px;border-radius:16px;background:#ffffff;border:1px solid #e3e3db;padding:14px 14px 10px;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;
text-transform:uppercase;margin-bottom:10px;">Captured signature</div>
<img src="ú{" alt="Client signature" style="display:block;max-width:100%;height:auto;border-radius:10px;background:#fff;">
</div>aT<div style="display:inline-block;background:#FFD100;border-radius:100px;
padding:10px 28px;">
<span style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:18px;font-weight:700;color:#213021;">
&#x270D;&nbsp; New onboarding form
</span>
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#5a8a5a;margin-top:12px;">
Submitted ú
</div>aZ<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>New GoodWalk onboarding form</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:40px 16px;">
<tr><td align="center">
<table width="680" cellpadding="0" cellspacing="0" role="presentation"
style="max-width:680px;width:100%;border-radius:16px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.08);">
zSigned onboarding form©rr
2026-05-18 22:25:43 +12:00
<tr>
2026-05-19 23:36:58 +12:00
<td style="background:#ffffff;padding:38px 40px 34px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#213021;border-radius:12px;margin-bottom:26px;">
<tr>
<td style="padding:22px 24px;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#7aaa7a;text-transform:uppercase;margin-bottom:10px;">
Quick contact
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;color:#d8e6d8;line-height:1.6;margin-bottom:10px;">
Reply directly to the owner or call them back:
</div>
<div style="margin-bottom:10px;">
<a href="mailto:úé" style="display:inline-block;background:#ffffff;color:#213021;text-decoration:none;border-radius:10px;padding:12px 14px;border:1px solid #d9dfd9;font-family:Menlo,Consolas,'SFMono-Regular',monospace;font-size:18px;font-weight:700;">ú=</a>
</div>
<a href="tel:úã" style="display:inline-block;background:#ffd100;color:#213021;text-decoration:none;border-radius:999px;padding:10px 16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;font-weight:700;">Call aU</a>
</td>
</tr>
</table>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;text-transform:uppercase;margin-bottom:16px;">Owner details</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f8f7f4;border-radius:12px;margin-bottom:24px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
ÚNamer=rrÚAddressac
</table>
</td></tr>
</table>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;text-transform:uppercase;margin-bottom:16px;">Dog and service details</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f8f7f4;border-radius:12px;margin-bottom:24px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
r<ÚBreedÚAger/ÚServiceaZ
</table>
</td></tr>
</table>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;text-transform:uppercase;margin-bottom:16px;">Safety details</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f8f7f4;border-radius:12px;margin-bottom:24px;">
<tr><td style="padding:24px 28px;">
2026-05-19 23:36:58 +12:00
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
z
Vet clinicz Vet phonezEmergency contactzEmergency phonezCouncil registrationÚ ConfirmedÚ VaccinationsúEmergency consentÚ DeclarationÚSignedú*
2026-05-18 22:25:43 +12:00
</table>
2026-05-19 23:36:58 +12:00
á
</td></tr>
</table>
2026-05-18 22:25:43 +12:00
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="border-top:1px solid #eeeee8;padding-top:20px;">
<tr><td>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.08em;color:#ccc;text-transform:uppercase;margin-bottom:12px;">Session info</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
r>r?úž
</table>
</td></tr>
</table>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)!rr@rArr r…r­rrrkr¿)r‡rr3r&rHrIrJrKrFrGÚdog_notes_blockÚ
medical_blockÚ access_blockÚsignature_blockrs&&& rDÚowner_onboarding_emailrmós”Ü—<<“>×*Ð+AÓB×IÈ#ÓN€LØ—I‘I˜d×2€Mܘ~Ô/@À×ATÑATÐVZ×VhÑVhÓ/iÓj€NܘnÔ.?À×@RÑ@RÐTX×TfÑTfÓ.gÓh€MÜÐ 2Ô4EÀd×F]ÑF]Ð_c×_qÑ_qÓ4rÓs€OÜÐ.Ô0AÀ$×BTÑBTÐVZ×VhÑVhÓ0iÓj€MØ<@¿M¿M¸M”9˜[¨$¯-©-Ô8ÌyÐYdÐfyÓOz€LØ/3¯y¯y¨yŒy˜ §¡Ô+¸b€Hð×"×>B×=MÑ=MÐ<NðO ñ
ð)+ðð,×#×>B×=NÑ=NÐ<OðP ñ
ð*,ðð,×)×>B×=TÑ=TÐ<UðV ñ
ð02ððð
×*
ð €Oð ð)˜*ð
€E÷d ód ð
 ðd ô
 Ð1IÔ JÐd ðLd ð8&*§Z¡Z Lð9d ð81Zð9d ð8[_÷[eñ[eðZfð9d ð8f ð9d ð<!%§
¡
˜|ð=d ð<,Oð=d ð<PT÷PZñPZðO[ð=d ð< [ð=d ôN˜v t§}¡}Ó6ðOd ðN7ðOd ôP˜w¬¨D¯J©J«Ó9ðQd ðP:ðQd ôR˜¯
©
Ó4ðSd ðR5ðSd ôT˜y¨$¯,©,Ó8ðUd ðT 9ðUd ôf˜u d§l¡lÓ4ðgd ðf5ðgd ôh˜¯
2026-05-19 23:36:58 +12:00
©
2026-05-18 22:25:43 +12:00
Ó7ðid ðh8ðid ôj˜u d§k¡k×&:Ð&:°UÓ<ðkd ðj=ðkd ôl˜y¨-Ó9ðmd ðl:ðmd ðn#ðod ðn$ðod ðp!/ðqd ðp"ðqd ðr .ðsd ðr !ðsd ôD˜|¨T¯\©\Ó;ðEd ðD<ðEd ôF˜{¨D¯M©MÓ;ðGd ðF<ðGd ôHÐ2°D×4MÑ4MÓOðId ðHPðId ôJÐ0°$×2LÑ2LÓNðKd ðJOðKd ôLÐ5°{ÓDðMd ðLEðMd ôN˜~¨{Ó<ðOd ðN=ðOd ôPÐ2°KÓAðQd ðPBðQd ôR˜}¨hÓ8ðSd ðR9ðSd ðV!ðWd ðV"ðWd ôf˜\¨2Ó/ðgd ðf0ðgd ôh˜Ó1ðid ðh2ðid ðj"ðkd ðj#ðkd ðl!/ðmd ðl"ðmd ðn#ðod ðn$ðod ðp!/ðqd ðp"ðqd ðr .ðsd ðr!ðsd ðt*ðud ðt
ôud ðd rFc óbV^8„dQhR\R\R\R\R\R,/#)rAÚdog_nameÚdog_birth_dateÚ
owner_namer rQNrÿ)rCs"rDrErEœs7÷)ñ)¤sð)¼Cð)ÌSð)Ô^að)ÔfjÐmqÕfqñ)rFcóN\V4p\V4p\V4pV'd V'gR#\P!VR4P4pT\^R7,p\P!RRTP44PR4;'gRp T R2p
RT R 2p T'gT
MT
R
T 2p R \P!4 R \P!\P 4P#R
4 RTP#R4 RTP#R4 RT
RT RT R2p
RRT R2R\$P&!T
P)R44P+R4/# \d\
P !RY14R#i;i)%Y-%m-%dz<[%s] onboarding birthday calendar skipped: invalid dogAge=%r)Údaysú
[^a-z0-9]+Údogz 's BirthdayzGoodWalk reminder: z 's birthday.ú for zƒBEGIN:VCALENDAR
VERSION:2.0
PRODID:-//GoodWalk//Dog Birthday Reminder//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
2026-05-19 23:36:58 +12:00
UID:z@goodwalk.co.nz
DTSTAMP:z%Y%m%dT%H%M%SZz
DTSTART;VALUE=DATE:z%Y%m%dz
DTEND;VALUE=DATE:z
RRULE:FREQ=YEARLY
SUMMARY:z
DESCRIPTION:z
X-WR-CALNAME:z
END:VEVENT
END:VCALENDAR
Úfilenameú goodwalk-z
-birthday.icsÚcontentrWÚascii)rirÚstrptimeÚdater5r6r…rÚrerrsr~rRrSrÚutcr@Úbase64Ú b64encodeÚencoder3)rorprqr Údog_name_cleanÚbirth_date_cleanÚowner_name_cleanÚ starts_onÚends_onÚ safe_nameÚsummaryÚ descriptionÚ
calendar_nameÚics_bodys&&&& rDÚ_birthday_ics_attachmentrŽœÜ˜hÓ'€NÜ ÓÜ 
Óç ×!1ÙðÜ×%Ð&6¸
ÓC×Jˆ ð
œ)¨Ô+€GÜ} c¨>×+?Ñ+?Ó+AÓB×ÓVÐQV€IØÐ   Ð,€GØÐ'7°|ÐD€Kß#3G¸G¸9ÀEÐJZÐI[Ð9\€Mð ô zŠz|ˆÜ—<§ ¡ Ó-×6Ð7GÓJØ'×Ó<Ø#×,¨XÓ8àØ"$Ø%ð'ð ð
ð( i  ˜{¨-Д6×# H§O¡O°GÓ$<Ó=×DÀWÓ ðøô9 ôÜŠÐUÐWaÔðúsµ%E>Å>"F$Æ#F$có0V^8„dQhR\R\/#)rAÚhtmlrQ)rkÚbytes)rCs"rDrErEÈs÷)œ3ð)¤5ñ)rFcó<^RIHpV!VR7P4#)r)ÚHTML)Ústring)Ú
weasyprintr“Ú write_pdf)rr“s& rDÚ_render_pdf_syncr—ÈsÝÙ  × (rFTc óbV^8„dQhR\R\R\R\R\R,/#)rArÚ full_nameÚkindr rQNrÿ)rCs"rDrErEÓs7÷ ñ ¬Cð ¼Cð Äsð ÔX[ð Ô`dÐgkÕ`kñ rFc ƒóî"\P!RR\V4P44P R4;'gRp\
P !\V4GRjxL
p\P!RY2\T44RR T RT R
2R \P!T4PR 4/#LU \d&p\P!RY2TRR7Rp?R#Rp?ii;i5i)
rurvraNz![%s] %s PDF generation failed: %sT©Úexc_infoz[%s] %s PDF generated: %d bytesryrzz.pdfr{r|)rrrirsr~r—r„r6ÚerrorrÈrrr3)rr™r r‰Ú pdf_bytesrˆs&&&& rDÚ_signed_form_pdf_attachmentr ÓéÜ} c¬8°IÓ+>×+DÑ+DÓ+FÓG×MÈcÓR×^ÐV^€IðÜ!×+Ô,<¸C×Cˆ ô
 ‡K‚KÐ1°:ÄSÈÃ^Ôi ˜v Q y Ð”6×# .×5°gÓ ðñ
DøÜ ôÜ Š Ð8¸*ÈCÐZ^ÕûðüsCA C5Á CÁ*CÁ+CÁ/AC5ÃCÃ C2Ã
C-Ã'C5Ã-C2Ã2C5cóHV^8„dQhR\R\R\R\/#)rArPr rQr)rCs"rDrErEäs(÷2ñ2œtð2¬Cð2¼Sð2ÄTñ2rFcƒóÂ"\'dAVPR.4pVPRR4p\P!RWV4RR/#Rp\ ^\
^,4p\ P!4p\P!\P!\PPV4\R7GRjxL
p\ P!4V,
R,p \V\ 4'dVPR4MRp
\P"!R Y!VPR4T\
Yš;'gR
4T;'g/u# VfQhVhL  \$Edap T p\ P!4T,
R,p \'T R R4;'g\'T R R4p \T \(4;'d$R
T u;8*;'dR8Mu;'dT R8gp
\P!RY!T\
T \+T 4P,Y¼RR7
T
'd \P"!RY!T 4Rp ? T\
8Xd Rp ? EK^T^,
,\.P0!^R4,p\P"!RY!T4\P2!T4GRjxL
Rp ? EKoRp ? ii;i5i)ÚtoÚsubjectz (no subject)u7[DEV] skipping email send — label=%s to=%s subject=%rÚidzdev-modeN)ÚtimeoutrQz1[%s] %s sent to %s (attempt %d/%d, %.0fms, id=%s)zn/aråÚcoder„r z?[%s] %s send failed (attempt %d/%d, %.0fms): %s: %s (status=%s)Trœz2[%s] %s: non-retryable status %s, aborting retriesgš™™™™™Ù?z[%s] retrying %s in %.2fs)r#r|r6r…Úranger,r Úwait_forrúÚresendÚEmailsr(r%rrrr„r¸r*r9ÚrandomÚuniformÚsleep)rPr Úlast_excÚattemptrZÚresultr\Úemail_idrˆrBÚ
non_retryableÚbackoffs&&& rDÚ _send_emailrµäsFé߃xØ
[‰[˜˜
Ø—+‘+˜i¨ÓÜŠÐPÐRWÐ]dÔ!à!%€Hä˜ÔÕÜ—."ˆð$ )Ü"××!¤&§-¡-×"4Ñ"4°gÓ÷ˆFôŸ.š.Ó*¨WÕ4¸Õ<ˆJÜ+5°f¼d×+CÒ+Cv—zz ˆ KŠKØ 7§;¡;¨tÓ#4°gÔ?PØ×ô
ð
—<<˜ ñ3ðP Ò ÐÐ Ø
€NñMøôõˆHÜŸ.š.Ó*¨WÕÕ<ˆ˜S Ó6×T¼'À#ÀvÈtÓ:Tˆ˜6¤3Ó'×Q¨C°6×,?Ô,?¸CÔ,?×QÀFÈcÁMð
ô
NŠNØ 7Ô,=¸S“ ×" õ 
÷ Ü Ø vôöØÔؘW q)¬V¯^ª^¸A¸sÓ-CÕCˆGÜ KŠKÐ3°ZÈÔ —-’- Ó (ûð/ )üs‰A>KÂA E0Ã
E.ÃBE0ÅE0ÅE0Å!
KÅ.E0Å0 KÅ<AKÇKÇ)KÇ8AKÉKÉ KÉ%KÉ-AKË
K
Ë KËKËKËKcó$V^8„dQhR\/#rh)rCs"rDrErEs÷ñÔ(9ñrFcó\\P!4R,4p\R/RRbRRbRRbRRbR R
bR R bR
RbRRR.bRVR,
bRVR,
bRVR ,
bRVR!,
bRVbR^bR.R"ObRRbRRbp\V4V#)#rQrr™zSarah Thompsonrçzsarah.thompson@example.comrz 021 555 0142ržÚMilorŸz Grey Lynnr.zÉMilo is a 2-year-old cavoodle with good recall and a friendly nature. He loves other dogs, is comfortable off lead in safe areas, and we are looking for regular weekday pack walks while we are at work.r®z
Pack Walksz Puppy Visitsr…z=https://www.google.com/search?q=goodwalk+auckland+dog+walkingr­z2https://www.goodwalk.co.nz/book?service=pack-walksr¦iPø i(|iâ)Ú/z /pack-walksz /our-pricingz/book)r¸r:)Únow_msÚsamples rDÚ_build_startup_test_submissionr¼Ü
˜
$€Fä
òÙðáññð ñ
ð ñ ð
ñ
Kðð ÑðÐ 9ÖðÐ!;ÖðÐ 8Öð "Ð%>Ö?ð!ñ"ð#ñ$ð%ó&>ð'ñ(Qð)ñ*Bð+€Fô.˜ €MrFcóV^8„dQhRR/#)rCs"rDrErE7s÷RñR¨ñRrFcƒóJ"\'g\P!R4R#Rp\4pR\R\.R\ VP 4RRVP RVP R 2R
\VR R \ R 24/p\VR
VR7GRjxL
R#L5i)zBStartup test email skipped: OWNER_BCC is not set to a real addressNz startup-testÚfromr£Úreply_tor¤u*Startup preview — New GoodWalk lead — ú)rz 127.0.0.1zStartup Preview (Ústartup_test_email©r ) r4r6r)rkrPr)r rPs rDÚ_send_startup_test_emailrÅ7séß  Š Ðà€JÜ
-€Fà
Ø Ô”C˜Ÿ ÓÐÇÁÐ?PÐPRÐSY×SaÑSaÐRbÐbcÐ ˜F KÐ3DÄ[ÀMÐQRÐ1SÓ €Gô gÐ%9ÀjÔ
Q×QùsBB#ÂB!ÂB#cóV^8„dQhRR/#)rCs"rDrErEKs÷lñl lrFcƒóæ"\P!\R4GRjxL
\P!R4R#L \
d#p\P !RT4Rp?R#Rp?ii;i5i)zImport WeasyPrint and run a trivial render to surface native-lib issues
(libpango/cairo/etc.) at boot rather than on the first PDF request.z<html><body>ok</body></html>Nu:Startup smoke: WeasyPrint OK — PDF attachments availableuNStartup smoke: WeasyPrint UNAVAILABLE — PDF attachments will be skipped (%s))r—r6r„r“s rDÚ_startup_smoke_pdfrÈKsZéðlÜ×ÒÔ 0Ð2PÓ Š Ð Røä ôlÜ Š ÐeÐgj×kûðlüs;A1A¢?£A½A1¿AÁ A.Á A)Á#A1Á)A.Á.A1cóV^8„dQhRR/#)rCs"rDrErEUs÷IñI IrFcƒóT"\P!4'g\P!R4R#\P!4GRjxL
pVf\P!R4R#\P
!4GRjxL
VP
4;_uu_4GRjxL
pVPR4GRjxL
pRRR4GRjxL
X'd7VR,'d(VR,'d\P!R4R#\P!RV'd
VR,MRV'd
2026-05-18 22:25:43 +12:00
VR,MR4R#ELL•L‡ +GRjxL
'giLž;i \d#p\P!R T4Rp?R#Rp?ii;i5i)
z‡Force schema creation at boot and verify the new tables exist so the
activity log isn't silently empty if CREATE permission is missing.uNStartup smoke: postgres disabled — activity/submissions will NOT be recordedNuVStartup smoke: postgres pool unavailable — activity/submissions will NOT be recordedzSselect to_regclass('public.events') as ev, to_regclass('public.submissions') as subÚevru:Startup smoke: pg tables OK — events + submissions readyuRStartup smoke: pg tables MISSING (events=%s submissions=%s) — check CREATE permsz+Startup smoke: pg schema verify FAILED (%s)) r­r6r…Úget_poolÚ_ensure_schemaÚacquireÚfetchrowrÈr„)ÚpoolÚconnÚrowrˆs rDÚ_startup_verify_schemarÓUséô × Ò × Ò ÜŠÐðIÜ×(×(ˆØ Š<Ü NŠNÐ Ü×'×—<<—>—>”> Ÿ
Ø÷ˆ"—>÷ 3t—9”9  ¤Ü KŠKÐ LŠLÐmß&)˜˜¨tÇ3°S¸¶ZÈDö
Rò÷"—>—>>ûô ôIÜ Š ÐBÀC×HûðIüsè4F(·E8ÁEÁE8Á.F(Á0E8ÂEÂ E8Â)EÂ*E8Â-EÃEÃEÃ E8ÃEÃ E8ÃE8Ã.E8Ã=E8ÄF(ÄE8Ä.E8ÅE8ÅF(ÅE8ÅE8ÅE8ÅEÅE8ÅE5 Å"E%Å#
E5 Å.E5 Å0E8Å8 F%ÆF ÆF(Æ F%Æ%F(cóV^8„dQhRR/#)rCs"rDrErEns÷(Pñ(P (PrFc ƒóž"\4GRjxL
\4GRjxL
\4GRjxL
\P!4'Ed?\ 4GRjxL
p\
V\4'dVs\4GRjxL
p\
V\4'dEVs \'d7\P\P!4P44\!4GRjxL
p\
V\4'dVs\%4GRjxL
pV'd\&P)V4\*P,!R\/\4\/\4\/\"4\/\&44\54GRjxL
\6e\6P94'd!\:P<!\?44sR#R#EEEELELiLÿL× \0d\*P2!R4Li;iL \0d\*P2!R4L£i;i5i)NzOAdmin state refreshed from postgres: clients=%d emails=%d drafts=%d sessions=%dz=Admin state refresh from postgres failed; using JSON snapshotzStartup test email failed) rÈr­rrrrrjr.r~rsÚ_draftsrºr6r„rVÚ_birthday_auto_taskÚdonerùÚ create_taskÚ_birthday_auto_sender_loop)Ú
db_clientsÚ db_emailsÚ db_draftsÚ db_sessionss rDrIrInéô Ó
×ÐÜ
Ó
"×
×Ò×Óð ^Ü<×<ˆ˜*¤d×+Ø#-Ð Ü:ˆ˜)¤S×)Ø"+ß“;Ü#× ×(9Ò(9Ó(;×(AÑ(AÓ(CÔ2×2ˆ˜)¤T×#Ü ;Ó =×=ˆÜ × Ô KŠKØÔ%¤s¬?Ó';¼SÄ»\Ì3ÔO_ÓK`ô
ð(×Ò"Ô&9×&>Ñ&>×&@Ò&@Ü%×1Ô2LÓ2NÓñ'AòGÚ 
>øôô ^Ü × Ò Ð  ^úñ )øÜ ô×ÒÐ6üsßI
G*I
¢G-£I
´G0µI
Á
G=Á#G3Á$)G=Â
G6Â'G=Â6AG=Ã9G9Ã:)G=Ä#G;Ä$ G=Ä0A#G=Æ
H&Æ!H$Æ"H&Æ&!I
Ç#I
Ç-I
2026-05-19 23:36:58 +12:00
Ç0I
Ç3G=Ç6G=Ç9G=Ç;G=Ç=!H!ÈI
2026-05-18 22:25:43 +12:00
È H!È!I
2026-05-19 23:36:58 +12:00
È$H&È&!I
2026-05-18 22:25:43 +12:00
ÉI
É I
É
I
2026-05-19 23:36:58 +12:00
cóV^8„dQhRR/#)rCs"rDrErEs÷#¨$ñ#rFcƒó¦"\e(\P4\GRjxL
2026-05-18 22:25:43 +12:00
RsR#R#L
\PdLi;i5irH)r×ÚcancelrùÚCancelledErrorr¦rFrDrJrJsNéäÒ× Ü%× ñ

&øÜ× Ù ð üs1A  6©4ª6®A´6AÁ AÁ
AÁAz/healthcó$V^8„dQhR\/#rhr˜)rCs"rDrErE¤s÷ñ”dñrFcƒó"RR/#5i)rBÚokr¦rFrDÚhealthræ£séà  Ðùscó<V^8„dQhR\R\R\/#)rArQ)rCs"rDrErE¨s!÷) ñ) œCð) ¤sð) ¬sñ) rFcó8R\ RV R\^<, R2#)a¿<!DOCTYPE html>
<html lang="en">
2026-05-19 23:36:58 +12:00
<head>
2026-05-18 22:25:43 +12:00
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Your Goodwalk login code</title>
</head>
2026-05-19 23:36:58 +12:00
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:40px 16px;">
<tr><td align="center">
2026-05-18 22:25:43 +12:00
<table width="480" cellpadding="0" cellspacing="0" role="presentation"
style="max-width:480px;width:100%;border-radius:16px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.08);">
<tr>
2026-05-19 23:36:58 +12:00
<td style="background:#213021;padding:32px 40px;text-align:center;">
2026-05-18 22:25:43 +12:00
<img src="aÊ" width="161" height="32" alt="Goodwalk" style="display:inline-block;max-width:161px;height:auto;border:0;">
2026-05-19 23:36:58 +12:00
</td>
</tr>
<tr>
<td style="background:#ffffff;padding:40px 40px 36px;text-align:center;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#888;margin-bottom:16px;">Your login code</div>
2026-05-18 22:25:43 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:52px;font-weight:800;letter-spacing:0.18em;color:#213021;background:#f8f7f4;border-radius:14px;padding:20px 28px;display:inline-block;margin-bottom:24px;">aŽ</div>
2026-05-19 23:36:58 +12:00
<p style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;color:#666;line-height:1.6;margin:0 0 8px;">
Enter this code on the Goodwalk onboarding page.
2026-05-18 22:25:43 +12:00
</p>
2026-05-19 23:36:58 +12:00
<p style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;color:#aaa;margin:0;">
This code expires in aë minutes. If you didn&rsquo;t request this, you can safely ignore it.
</p>
2026-05-19 23:36:58 +12:00
</td>
</tr>
<tr>
<td style="background:#213021;padding:20px 40px;text-align:center;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;color:#5a8a5a;">
Goodwalk &middot; Auckland, New Zealand
2026-05-19 23:36:58 +12:00
</div>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)r*r)s&&rDÚ_auth_code_emailré¨sEðô !Að BFðAGðG
%:¸RÕ$?Ð#@ðAð3( ð( rFcó0V^8„dQhR\R\/#rf)rCs"rDrErEÔs÷ñœcð¤cñrFcóÀ\V4pV'gR#\P!V4pVP RVP R4 2# \
dTu#i;i)zTo be confirmedÚ z%b %Y)rirÚ
2026-05-19 23:36:58 +12:00
fromisoformatÚdayr@r5)ÚrawÚparseds& rDÚ_format_date_labelrñÔsYÜ
5‹/€Cß Ù ðÜ×Ó,ˆØ—*‘*˜Q˜vŸ¨wÓ9øÜ ôØŠ
ðús—5A
2026-05-19 23:36:58 +12:00
Á
AÁAc ó`V^8„dQhR\R\R\R\R\R\/#)rAÚ client_nameroÚ service_typeÚ
price_detailsÚ
start_daterQ)rCs"rDrErEßs9÷8 ñ8 ¬#ð8 ¼ð8 ÌCð8 Ô`cð8 Ôqtð8 Ôy|ñ8 rFcó8VP4'dVP4^,MRpVP4'dRV 2MRp\V4pR\ RT RT;'gR RV R \ R
V4 R \ R V4 R \ R
V4 R2#)rÚthererxrn<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Welcome to the pack</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:28px 12px;">
2026-05-19 23:36:58 +12:00
<tr><td align="center">
<table width="560" cellpadding="0" cellspacing="0" role="presentation" style="max-width:560px;width:100%;border-radius:22px;overflow:hidden;box-shadow:0 10px 32px rgba(17,20,24,0.08);">
<tr>
<td style="background:#213021;padding:28px 24px;text-align:center;">
<img src="aÜ" width="161" height="32" alt="Goodwalk" style="display:inline-block;max-width:161px;height:auto;border:0;">
</td>
</tr>
2026-05-19 23:36:58 +12:00
<tr>
<td style="background:#fbfaf7;padding:34px 24px 30px;">
<div style="display:inline-block;background:#ffd100;border-radius:999px;padding:8px 14px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;font-weight:700;color:#213021;letter-spacing:0.06em;text-transform:uppercase;">
Welcome to the pack
</div>
<h1 style="margin:18px 0 12px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:32px;line-height:1.05;letter-spacing:-0.03em;color:#171b20;">
Hi z, we&rsquo;d love to get úyour dogzø started with Goodwalk.
</h1>
<p style="margin:0 0 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;line-height:1.7;color:#4b584b;">
We&rsquo;ve set aside the details belowaÈ. When you&rsquo;re ready, complete your onboarding form and we&rsquo;ll take it from there.
</p>
2026-05-19 23:36:58 +12:00
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#ffffff;border-radius:18px;border:1px solid rgba(33,48,33,0.08);margin-bottom:22px;">
<tr><td style="padding:22px 20px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
r`r=ÚPriceú
Start datea
</table>
</td></tr>
</table>
2026-05-18 22:25:43 +12:00
<a href="https://onboarding.goodwalk.co.nz/" style="display:inline-block;background:#213021;color:#ffffff;text-decoration:none;border-radius:999px;padding:14px 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;font-weight:700;">
Complete onboarding
</a>
<p style="margin:18px 0 0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;line-height:1.7;color:#657365;">
2026-05-19 23:36:58 +12:00
Use the same email address you originally used with Goodwalk. We&rsquo;ll send you a one-time code when you sign in.
</p>
</td>
</tr>
</table>
</td></tr>
</table>
2026-05-18 22:25:43 +12:00
</body>
</html>)r~r}r*)rorBÚdog_lineÚformatted_start_dates&&&&& rDÚ_welcome_pack_email_htmlrþߨ+6×+<Ñ+<×+>Ò+>×$ 'ÀG€JØ%-§^¡^×%5Ò%5x!¸2€HÜ-¨jÓð
ô !ðÐ6°x×7MÐ7MÀ:Ð6NðO7?°Zð@ô ˜y¨,Ó9ܘw¨
2026-05-19 23:36:58 +12:00
Ó8ܘ|Ð-AÓDðC3 ð3 rFcó0V^8„dQhR\R\/#r‰rR)rCs"rDrErEs÷] ñ] Ô.Bð] Äsñ] rFcóœVPP4'd"VPP4^,MRp\VP4pVP
Uu.uFCp\
V\4'gKVP4'gK3VP4NKE ppV'dRPVR,4MRp\V4^8”dVR\V4^,
R2,
pRpRpR \VR
2026-05-18 22:25:43 +12:00
R 7 R T R
V'dRV 2MR RVP RT;'gR RV RV R2#uupi)rr:NrANzyour selected servicez + z morezhttps://clients.goodwalk.co.nz/a <div style="display:inline-block;background:#ffd100;border-radius:999px;padding:8px 14px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;font-weight:700;color:#213021;letter-spacing:0.06em;text-transform:uppercase;">Submitted</div>aV<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Your onboarding has been submitted</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:28px 12px;">
2026-05-19 23:36:58 +12:00
<tr><td align="center">
2026-05-18 22:25:43 +12:00
<table width="560" cellpadding="0" cellspacing="0" role="presentation" style="max-width:560px;width:100%;border-radius:22px;overflow:hidden;box-shadow:0 10px 32px rgba(17,20,24,0.08);">
2026-05-19 23:36:58 +12:00
z*Your onboarding details are safely with usrXa
<tr>
2026-05-18 22:25:43 +12:00
<td style="background:#fbfaf7;padding:34px 24px 30px;">
<h1 style="margin:0 0 12px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:32px;line-height:1.05;letter-spacing:-0.03em;color:#171b20;">
Thanks, zù. Your onboarding is complete.
2026-05-19 23:36:58 +12:00
</h1>
2026-05-18 22:25:43 +12:00
<p style="margin:0 0 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;line-height:1.7;color:#4b584b;">
We&rsquo;ve received your detailsrxrna5 and they&rsquo;re now on file with Goodwalk.
You can sign back in any time to review what you submitted.
</p>
2026-05-19 23:36:58 +12:00
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#ffffff;border-radius:18px;border:1px solid rgba(33,48,33,0.08);margin-bottom:22px;">
<tr><td style="padding:22px 20px;">
2026-05-18 22:25:43 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;text-transform:uppercase;margin-bottom:16px;">
2026-05-19 23:36:58 +12:00
Snapshot
2026-05-18 22:25:43 +12:00
</div>
<div style="display:grid;gap:14px;">
<div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;font-weight:700;color:#7b867b;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:4px;">Owner</div>
2026-05-19 23:36:58 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:18px;font-weight:700;color:#171b20;">a§</div>
</div>
2026-05-18 22:25:43 +12:00
<div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;font-weight:700;color:#7b867b;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:4px;">Dog</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:18px;font-weight:700;color:#171b20;">zDetails submitteda¬</div>
2026-05-19 23:36:58 +12:00
</div>
2026-05-18 22:25:43 +12:00
<div>
2026-05-19 23:36:58 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;font-weight:700;color:#7b867b;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:4px;">Services</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:16px;line-height:1.5;color:#425042;">a</div>
</div>
</div>
2026-05-18 22:25:43 +12:00
</td></tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="border-left:3px solid #ffd100;margin-bottom:24px;">
<tr>
<td style="padding:4px 0 4px 20px;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:700;color:#213021;margin-bottom:6px;">
What happens next?
</div>
2026-05-19 23:36:58 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;color:#666;line-height:1.65;">
2026-05-18 22:25:43 +12:00
We&rsquo;ll review your submission and come back to you if we need anything clarified.
If you need to check your details again, use the button below to sign back in with a one-time code.
2026-05-19 23:36:58 +12:00
</div>
</td>
</tr>
</table>
2026-05-18 22:25:43 +12:00
<a href="aò" style="display:inline-block;background:#213021;color:#ffffff;text-decoration:none;border-radius:999px;padding:14px 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;font-weight:700;">
Review your submission
</a>
<p style="margin:18px 0 0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;line-height:1.7;color:#657365;">
Your submitted form is read-only after completion. If anything needs changing, just reply to this email or contact us directly.
</p>
</td>
</tr>
<tr>
<td style="background:#213021;padding:24px 48px;text-align:center;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;color:#5a8a5a;line-height:1.6;">
Goodwalk &middot; Auckland, New Zealand
</div>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>) r~r}rirrrkrr)r‡rBroÚ
service_namesÚservice_summaryÚonboarding_urlrs& rDÚ#_onboarding_confirmation_email_htmlrsØ-1¯]©]×-@Ñ-@×-BÒ-B×& qÖ€JܘŸ Ó%€HØ48×4GÒ4GÓxÑ4G¨Ì:ÐV]Ô_b×Kc”_Ðho×huÑhu×hw”_W—]]_Ñ4G€MÐxß6Cd—ii 
¨bÕ 1Ô2ÐI`€OÜ
ˆ=Ó˜AÔØ˜S¤ ]Ó!3°aÕ!7Ð 8¸Ð>ˆà6€Nð jðð  ô
 Ð6bÔ cÐeð"#0÷GO°%¸°zÑ0BÐTVÐ/Wð XSðTX÷TañTaðSbðbSðT\÷TsðTsð`sðStðtSðTcðSdðdð(&ðuN ðN ùòysÁ'E ÂE ÂE có<V^8„dQhR\R\R\/#)rArorQ)rCs"rDrErEzs!÷( ñ( ¤cð( ´( ¼Sñ( rFc óºVP4'dVP4^,MRpVP4;'gRpR\ RV RV RV R2 #)r<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Happy birthday from Goodwalk</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:28px 12px;">
2026-05-19 23:36:58 +12:00
<tr><td align="center">
2026-05-18 22:25:43 +12:00
<table width="560" cellpadding="0" cellspacing="0" role="presentation" style="max-width:560px;width:100%;border-radius:22px;overflow:hidden;box-shadow:0 10px 32px rgba(17,20,24,0.08);">
<tr>
<td style="background:#213021;padding:28px 24px;text-align:center;">
<img src="aæ" width="161" height="32" alt="Goodwalk" style="display:inline-block;max-width:161px;height:auto;border:0;">
</td>
</tr>
<tr>
<td style="background:#fbfaf7;padding:34px 24px 30px;">
<div style="display:inline-block;background:#ffd100;border-radius:999px;padding:8px 14px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;font-weight:700;color:#213021;letter-spacing:0.06em;text-transform:uppercase;">
Happy birthday
</div>
<h1 style="margin:18px 0 12px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:32px;line-height:1.05;letter-spacing:-0.03em;color:#171b20;">
Happy birthday to z¾.
</h1>
<p style="margin:0 0 18px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;line-height:1.7;color:#4b584b;">
Hi zE, sending a little birthday love from all of us at Goodwalk. We hope aJ has a very good day.
</p>
<p style="margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;line-height:1.7;color:#4b584b;">
Aless and the Goodwalk pack
</p>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)r~r}r*)rorBr„s&& rDÚ_birthday_email_htmlrzswØ+6×+<Ñ+<×+>Ò+>×$ 'ÀG€JØ—^%×€Nð
ô !!ð"0Ð 0ð1ðÐbÐcqÐbrð sð3$ ð$ rFcó>V^8„dQhR\R\R,/#)rArpÚtodayN)rkr)rCs"rDrErE¥s÷ñ¬Cð¼À4½ñrFcó\V4pV'gR#\P!VR4P4pT;'g\P
!4P4pTP pTPTR7pYd8dT^,
pTPTR7pT#T# \dR#i;i \dTPT^^R7pKZi;i \dTPT^^R7pT#i;i)Nrs)Úyear)r Úmonthrî)rirr}r~r5r rd)rpr Ú
birth_dateÚ
today_dateÚ target_yearÚ candidates&& rDÚ_upcoming_birthday_dater¥sÜ

"€Cß ÙðÜ×& s¨JÓ7×>ˆ
ð×)œ8Ÿ<š<>×1€JØ—//€Kà
ð Ø"× Ð<ˆ ð ÔØˆ ð NØ"× Ð<ˆ Ј9Ðøô- ôÚðûôô à"× À1È"ÐMˆ ð ûôô NØ"× À1È"ÐM‰Ià Ðð Nús5—%B0Á7CÂC(Â0 B?Â>B?ÃC%Ã$C%Ã(D Ä
D c ófV^8„dQhR\R\R\R\R,R\RR/#)rAr Úmark_auto_yearNÚpreviewrQ)rkrr¸)rCs"rDrErEÅsH÷7´#ðð7ÔRUð7ÔgjÐmqÕgqðDHðUYñ7rFc
ƒóÈ"\VPRR44P4p\VPRR44P4pV'd$\P!4P 4MTpRT;'gR 2pV'dRT;'gT RV 2pR\
RV.R \ R
VR \WV4/p \'dV'g \.V R &\Y”'dR
MRVR7GRjxL
V'dR#R\P!4PRR7/p
Ve\V4V
R&\W
4GRjxL
R#L\L5i)rnzHappy birthday z
from Goodwalkú
[PREVIEW for ú] r¿rÚbccÚbirthday_email_previewÚbirthday_emailrÄbirthdayEmailLastSentAtr©ÚtimespecÚbirthdayEmailLastSentYear)rkr|r~r.rsr)r3rrrÚ isoformatr) r rrroÚ recipientr¤rPÚprofile_updates &&&&& rDÚ _send_birthday_email_for_profiler"Ås=éÜg—k‘k *¨bÓ2×:€KÜ7—;;˜y¨"Ó.×6€Hß/6” ×+¸E€IØ × ;Ð ;¨OÐ=€Gߨ! +×"6Ð"6°Ð!7°r¸'¸ÐCˆà
Ø ˆyˆkØ”HØÔ$ [Ó €G÷ƒzŸ'܈ä
Ñ%=ÐN^ÐkuÔ
v×Ùð "¤8§<¢<£>×#;Ñ#;ÀYÐ#;Ó#Oð€NðÒ!Ü69¸.Ó6IˆÐ
 Ó
6×wñ7ùsCB E"Â E"Â E"Â#9E"Ã$E"ÄEÄ E"ÄA E"ÅE ÅE"Å E"cóV^8„dQhRR/#)rCs"rDrErEãs÷^ñ^¨dñ^rFc ƒó‚"\P!4P4pVPVP3p\ \ P44EF(wr#VPR4'gKVPR4'gK8\\VPRR444pV'dVPVP3V8wd\VPRR44P4pV\VP48XdR\P!4PR, 2p\!W#W`PR7GRjxL
\"P$!R Wb4EK+ R#L" \&d&p\"P(!R
YgR R 7Rp?EK\Rp?ii;i5i)
ÚonboardingCompletedÚbirthdayAutoSendrÑrnrzbirthday-auto-:NéN)rNz'[%s] auto birthday email sent: email=%sz#[%s] auto birthday email failed: %sTrœ)rr~r rr|rrkr~r rRrSrTr"r6r„)r Útoday_month_dayrçÚupcomingÚlast_sent_yearr rˆs rDÚ_run_birthday_auto_sender_oncer+ãsGéÜ LŠL‹N× Ñ Ó !€EØ—{‘{ E§I¡IÐ.€OäÔ8‰ˆØ{‰{Ð Ø{‰{Ð ä*¬3¨w¯{©{¸8ÀRÓ/HÓ+IÓJˆß˜HŸN™N¨H¯L©LÐ9¸_Ô ä˜WŸ[™[Ð)DÀbÓØ œS §¡›_Ô à%¤d§j¢j£l×&6Ñ&6°rÕ&:Ð%;Ð<ˆ
ð ^ÜÀ×\fÑ\fÔg×
2026-05-19 23:36:58 +12:00
+Š+Ð×
2026-05-18 22:25:43 +12:00
Só# høäô ^Ü
,Š,Ð<¸jÐX\×
]ûð ^üsIBF?ÂB;F?Å
F Å'F
Å(F ÆF?Æ
F Æ F<ÆF7Æ0F?Æ7F<Æ<F?cóV^8„dQhRR/#)rCs"rDrErEýs÷=¨$ñ=rFcƒóú"\4GRjxL
\P !\4GRjxL
K8L( \Pdh\d\P
!R4L^i;iLD5i)TNz Birthday auto sender loop failed)r+r„r6rVrrFrDýshéØ
ð AÜ2×
mŠmÔ<×
3øÜ× Ø Üô AÜ × Ò Ð  Aúá<ùsAA;
=;=A;´A9µA;»=½A6ÁA6Á3A;Á5A6Á6A;z^[^\s@]+@[^\s@]+\.[^\s@]+$z/auth/request-codecó$V^8„dQhR\/#rLrM)rCs"rDrErE s÷0ñ0¤Wñ0rFc
ƒóÒ"\VPR\P!4PR,4p\ V4pVP
4GRjxL
p\VPRR44P4P4p\;_uu_4GRjxL
2026-05-19 23:36:58 +12:00
\W!4RRR4GRjxL
2026-05-18 22:25:43 +12:00
V'd\PV4'g\RRR7hV\ 9dY\"P$!RWV4\;_uu_4GRjxL
\'W!R 4RRR4GRjxL
\R
R R7h\(P*!4p\;_uu_4GRjxL
\,P/V\144pV'd'WV^,,
R 8”dVP34K.\5V4\6d\R
RR7hVP9V4\\:P<!R4R,4pRVR\(P(!4\>,R^/\@V&RRR4GRjxL
\"P$!RW4\B'd\"PD!RVX4M-\GR\HRV.RRR\KVX4/RVR7GRjxL
\LPN!RWVRR7GRjxL
RR /#ELELREL: +GRjxL
'giELR;iEEL× +GRjxL
'giELï;iE+GRjxL
'giLö;iL”Lt5i)!r rONrçrnr„z#Please enter a valid email address.räz![%s] auth: unknown email=%s ip=%sÚ
unknown_emailròu‡We don’t have your email on file. Please use the address you used when enquiring with Goodwalk, or contact us at info@goodwalk.co.nz.ir z8Too many code requests. Please wait before trying again.i »
i †rkz#[%s] auth: code issued for email=%sz[DEV] auth code for %s: %sr¿zYour Goodwalk login coderÚauth_code_emailrÄÚauth_code_requestedrå©Ú
event_typer Ú actor_emailrrBT)(r±rUrRrSrTrdr_rkr|r~rsrÚ _EMAIL_REÚmatchr r6rr Ú_code_requestsrrrrrÚsecretsÚ randbelowrÚ_pending_codesr#r…r)r­Ú record_event)r rr-Úrequestsr§s& rDÚauth_request_coder> s]é䘟¨ ´d·j²j³l×6FÑ6FÀrÕ6JÓK€JÜ Ó €BØ× €DÜ ˜  &× .× 6€EçzŽzܘ œ Ÿ¨×¨Ð4YÔ ”OÔ Š ÐÈBÔ—:–:Ü  °Ô —:äØð]ô
ð
ô
2026-05-19 23:36:58 +12:00
.Š.Ó
€CßzŽzÜ!×,¨U´E³GÓߘ3¨!¥Õ,¨tÔ × Ñ Ö Ü ˆx‹=Ô ¨CÐ8rÔ ˜Ôä”7×$ VÓ,¨vÕ6ˆØ!'¨¨|¼T¿YºY»[ÔK`Õ=`ÐblÐnoÐ pŒ÷ ‡K‚KÐ5°zÔƒxÜŠÐ3°U¸DÕØ
2026-05-18 22:25:43 +12:00
”Z ¨ w° Ð;UÐW]Ô_oÐpuÐw{Ó_|Ð 
2026-05-19 23:36:58 +12:00
÷
2026-05-18 22:25:43 +12:00
ð
ô ×
Ò
ذRÀô ÷ðð
$ˆò[ ÷zzzú÷—:—:—:ú÷zzzúñ 
ñ ùs$AM'ÁK9ÁA
2026-05-19 23:36:58 +12:00
M'Â*K<Â+M'Â. LÂ: M'ÃK?Ã M'ÃM'Ã-AM'Ä/LÄ0M'Ä3
L%Å M'Å L"Å 8M'ÆMÆM'Æ&MÆ/B+MÉ M'É%MÉ&A(M'ËM#Ë!M'Ë0M%Ë1 M'Ë<M'Ë?M'ÌL ÌL Ì
2026-05-18 22:25:43 +12:00
L ÌL Ì
M'Ì"M'Ì%L? Ì+L.Ì,
2026-05-19 23:36:58 +12:00
L? Ì7L? Ì9
M'ÍM'ÍM Í
MÍ
M ÍM Í M'Í%M'z/auth/verify-codecó$V^8„dQhR\/#rLrM)rCs"rDrErE@s÷++8¤Gñ+8rFc
2026-05-18 22:25:43 +12:00
ƒóð"\VPR\P!4PR,4p\ V4pVP
4GRjxL
2026-05-19 23:36:58 +12:00
p\VPRR44P4P4p\VPRR44P4p\;_uu_4GRjxL
\W!4\PV4pV'g\W!R4\RRR 7h\ P !4VR
,8”d0\P#VR4\W!R 4\RR R 7hVR
;;,^,
uu&VR
,\$8”d0\P#VR4\W!R4\RRR 7hVR,V8wdH\'^\$VR
,,
2026-05-18 22:25:43 +12:00
4p\W!R4\RRT RV^8wdRMR R2R 7h\P#VR4\(P*!^ 4pRVR
2026-05-19 23:36:58 +12:00
\ P !4\,,/\.V&RRR4GRjxL
\14GRjxL
\2P4!RW4\6P8!RWVRR7GRjxL
RRRXRV/#ELrEL] +GRjxL
'giLt;iLiL25i)r rONrçrnÚno_pending_coder„z7No code found for this email. Please request a new one.räÚ expired_codez0Your code has expired. Please request a new one.rkÚmax_attempts_exceededz7Too many incorrect attempts. Please request a new code.Ú
wrong_codezIncorrect code. z attemptr±z remaining.z'[%s] auth: session created for email=%sÚ
auth_loginrår3Trí)rUrRrSrTrdr_rkr|r~rsrr;rr rrtr9Ú
token_urlsaferr6r­r<) rßr rr-Úpendingrs & rDÚauth_verify_coderH?s`é䘟¨ ´d·j²j³l×6FÑ6FÀrÕ6JÓK€JÜ Ó €BØ× €DÜ ˜  &× .× 6€EÜ ˆtx‰x˜ Ó ,€DçzŽzܘ ×$ çÜ  Ð1BÔ ¨CÐ8qÔ 9Š9‹;˜ Õ × Ñ ˜u dÔ  °Ô ¨CÐ8jÔ 
טqÕ ÓØ  Ô!7Ô × Ñ ˜u dÔ  Ð1HÔ ¨CÐ8qÔ 6?˜ ˜5¸À
Õ8KÕLˆ  °Ô ¨CÐ:JÈ9È+ÐU]ÐenÐrsÔesÑ^aÐy{Ð]|ð}Hð9IôJð
2026-05-18 22:25:43 +12:00
Jä×ј5 ×% )ˆØ#*¨E°<ÄÇÂÃÔOgÕAgÐ"hÔ˜Ñ÷9zô<
'×
2026-05-19 23:36:58 +12:00
‡K9¸
×
Ò
ØØ°RÀô ÷ðð
 ¨°Ð 7òQ ÷zzzúñ<ùs€AK6ÁKÁA6K6ÃKÃK6ÃFKÉ+ K6É6KÉ7K6ÊK2Ê 8K6ËK4Ë
K6ËK6ËK6ËK/ ËKË
K/ Ë(K/ Ë* K6Ë4K6z /auth/verifycó$V^8„dQhR\/#rLrM)rCs"rDrErEos÷ ñ œwñ rFc ƒó¾"\V4GRjxL
p\PV/4p\PV/4pRRRVRVRVRV\9R\
/#LI5i)NråTrçÚdraftÚcpAdminÚ
ownerEmail)rr|r"r.)rKs& rDÚ auth_verifyrNnsféäÓ1× 1€EÜ×" 5¨"Ó-€GÜ K‰K˜˜ "€Eà ˆdØØØ5œOÑ”kð
 ðñ
2ùsAAA
Az /auth/logoutcó$V^8„dQhR\/#rLrM)rCs"rDrErE~s÷
ñ
œwñ
rFcƒó*"VPPRR4pVPR4P4pRpV'dy\;_uu_4GRjxL
\
P
VR4p\V\4'dVPR4MRpRRR4GRjxL
\4GRjxL
\P!RV\V4RR7GRjxL
RR/#L”LG +GRjxL
2026-05-18 22:25:43 +12:00
'giL^;iLSL*5i) rârnNrçÚ auth_logoutrå)r4r5rrBT)
2026-05-19 23:36:58 +12:00
r|r~rrrr­r<rd)Úlogged_out_emailrs& rDrQrQ}éà—/‘/×% o°rÓ:€KØ × $ YÓ 7€EØÐß ß—:–:Ü'×+¨E°4Ó8ˆHÜ8BÀ8ÌT×8RÒ8R˜xŸ|™|¨GÔ4ÐX\Ð ÷—:ô
×
2026-05-18 22:25:43 +12:00
Ò
Ø Ø°Ó)9À$ô ÷ðð
$ˆ÷—:—:”:úñùsmADÁC/ÁDÁAC3 DÂ)C1Â*DÂ;DÂ<*DÃ&DÃ' DÃ1DÃ3D Ã9C<Ã:
2026-05-19 23:36:58 +12:00
D ÄD Ä DÄDz/auth/save-draftcó$V^8„dQhR\/#rLrM)rCs"rDrErEs÷ñ¤7ñrFcƒóÜ"\V4GRjxL
pVP4GRjxL
p\VPRR44P 4pVPR/4pVR 9d\ RRR7h\
V\4'g\ RRR7h\;_uu_4GRjxL
\PV/4pWEV&\\4pRRR4GRjxL
\P!\X4GRjxL
\RV4GRjxL
\P !R W4R
R /#EL1ELL•L^ +GRjxL
'giLu;iLYLG5i)
formrnr‡r„z(form must be 'onboarding' or 'contract'.räzdata must be an object.r¡zDraft saved: email=%s form=%sråT)Ú
onboardingÚcontract)r_rkr|r~r rrrrr¿r6)r-rUr‡Ú user_draftsr²s& rDÚauth_save_draftrYŽséäÓ 1€Eà× €DÜ ˆtx‰x˜ Ó $× ,€DØ 8‰8F˜BÓ €Dà ШÐ4^Ô dœD× ¨Ð4MÔzŽzÜ×°Ó Ø Üœ“=ˆ÷
×
Ò
Ô-¨xÓ
2026-05-18 22:25:43 +12:00
8×
˜Ó
2026-05-19 23:36:58 +12:00
2×
‡KÔ $ˆò'
÷zzŒzúñ
2026-05-18 22:25:43 +12:00
2ùsŒE,EE,©EªBE,Â2EÂ3E,Â6*E à E,Ã+E
2026-05-19 23:36:58 +12:00
Ã,"E,ÄE(ÄE,Ä"E*Ä# E,ÅE,ÅE,Å
2026-05-18 22:25:43 +12:00
E,Å E% ÅEÅ
E% ÅE% Å E,Å*E,rÚnamezGeneral updaterz6Clean Goodwalk branding for everyday news and updates.Úkickerz
From GoodwalkÚ banner_emojiuðŸ¾Úaccentz#ffd100Ú accent_textz#213021Úpage_bgz#f3f0e5Úcard_bgz#fbfaf7Ú
2026-05-19 23:36:58 +12:00
heading_colorz#171b20Ú
2026-05-18 22:25:43 +12:00
body_colorz#4b584bÚ muted_colorz#6b766bÚband_bgÚ band_textÚband_decorationu$🾠· 🾠· 🾠· 🾠· ðŸ¾Ú footer_bgÚ footer_textÚ highlight_bgz#fff8d6Úhighlight_borderÚhighlight_textÚ ornament_topÚornament_bottomÚdefault_subjectzA note from GoodwalkÚdefault_headingzHello from the packÚdefault_sub_headingz*A quick update from your dog walking team.Ú default_bodyzÍThank you for being part of our community. Every wag and woof matters to us, and we have a small update to share.
2026-05-19 23:36:58 +12:00
We're always here if you need to chat about walks, training, or anything else dog-related.Údefault_highlightÚdefault_sign_offzAless & the Goodwalk packÚdefault_footer_noteugoodwalk.co.nz · Auckland, NZÚ christmasÚ Christmasz5Deep green and red festive styling with snow accents.zSeason's greetingsu🎄z#c0392bz#ffffffz#e8dccbz#fbf6ecz#0d3b1ez#3a4a3az#0d4d2au>℠· 🎄 · ℠· 🎠· ℠· 🦌 · ℠· ⭠· â„z#ffe8d6z#fff0eaz#7a1d12uOâ„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„u$🎄 ⭠🎠🦌 ℠🎠⭠🎄u+Merry Christmas from the Goodwalk pack 🎄z"Wishing you a very woofy Christmasu<From our pack to yours — thank you for an incredible year.a'It's been a year full of muddy paws, sunny walks, and very good dogs. From all of us at Goodwalk, we wish you and your pup a warm, joyful Christmas.
2026-05-18 22:25:43 +12:00
We'll be taking a short break over the holidays and will be back in full swing for the new year. Looking forward to many more adventures in 2026.u?🎠Holiday schedule: walks pause from 24 Dec, resuming 6 Jan.z'Wishing you a warm and joyful ChristmasÚeasterÚEasterz2Soft pastel styling with floral and bunny accents.z Happy EasteruðŸ°z#d8a8dez#3a2a4az#fdf3f8z#5a4a5az#8a7a8az#f5d6e5z#5a2a6bu4🌷 · 🰠· 🌸 · 🥚 · 🣠· 🌷 · 🌸z#e7c9f0z#fff0fau1🌷 🌸 🌷 🌸 🌷 🌸 🌷 🌸 🌷 🌸u🥚 🰠🌸 🣠🥚 ðŸ°u%Hop on into Easter with Goodwalk ðŸ°zA happy, hoppy Easter to youz+Spring is in the air and tails are wagging.aWishing you and your pup a beautiful Easter weekend. May your walks be sunny, your eggs uneaten by curious snouts, and your treats plentiful.
A little reminder: chocolate is not for dogs, no matter how sweetly they ask. We'll be sticking to the good stuff on our walks.uT🣠Keep chocolate well out of reach — even small amounts can be harmful to dogs.zHappy Easter from all of usÚ halloweenÚ Halloweenz&Dark purple and orange spooky styling.zTrick or treatu🎃z#ff7518z#1a0d1fz#2b1838z#ffe8d0z#d8c8d8z#9a8aaaz#0a0410u<🎃 · 👻 · 🕷 · 🦇 · 🌙 · 🕸 · 🎃 · 👻z#4a2b66u1🦇 🕸 🦇 🕸 🦇 🕸 🦇 🕸 🦇 🕸u"🎃 👻 🕷 🌙 🦇 🕸 🎃uSpooky season at Goodwalk 🎃zIt's Howl-oweenz$Costumes optional. Treats mandatory.uúSpooky season is upon us. We'll be out walking with extra vigilance — fireworks, doorbell mayhem, and rogue chocolate are all on our radar.
If your pup is nervous around fireworks or doorbells, let us know and we'll factor it into walks this week.u_🫠Reminder: chocolate, raisins, and xylitol are all toxic to dogs. Keep the treat bowl high.zStay spooky out thereÚpromozSale / promotional offerz@Bright yellow promotional styling with a clear discount callout.z
Limited offeru🦴z#fffaebz#fffdf5u2★ · SPECIAL OFFER · ★ · LIMITED TIME · ★z#fff3a0u;★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★u🦴 ★ 🾠★ 🦴 ★ ðŸ¾u%A little something from Goodwalk 🦴zA special offer for our packzBecause regulars are family.zÊWe're running a small thank-you offer for our existing clients. As a regular, you're first in line.
2026-05-19 23:36:58 +12:00
Reply to this email or hit the button below to take it up. Offer is limited and won't be around long.u?20% off your next week of walks · Use code PACKLOVE at bookinguLimited time — be quickrïzSystem (clean sans-serif)Ústackú<-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serifÚlinkÚ
2026-05-18 22:25:43 +12:00
heading_stackzGeorgia,'Times New Roman',serifÚlorazLora (warm serif)z&'Lora',Georgia,'Times New Roman',serifz\https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;0,700;1,400&display=swapÚplayfairz"Playfair Display (editorial serif)zyhttps://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700;900&family=Source+Sans+3:wght@400;600&display=swapz2'Playfair Display',Georgia,'Times New Roman',serifÚ merriweatherzMerriweather (readable serif)z.'Merriweather',Georgia,'Times New Roman',serifzOhttps://fonts.googleapis.com/css2?family=Merriweather:wght@400;700&display=swapÚcrimsonzCrimson Text (classic serif)z.'Crimson Text',Georgia,'Times New Roman',serifzdhttps://fonts.googleapis.com/css2?family=Crimson+Text:ital,wght@0,400;0,600;0,700;1,400&display=swapÚinterzInter (modern sans)zD'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serifzPhttps://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swapÚ
montserratzMontserrat (geometric sans)zI'Montserrat',-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serifzUhttps://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swapÚopensanszOpen Sans (friendly sans)zH'Open Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serifzahttps://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,600;0,700;1,400&display=swapc
2026-05-19 23:36:58 +12:00
óTV^8„dQhR\R\R\R\R\/#)rAÚ body_htmlÚ
font_stackrbÚ accent_colorrQ)rCs"rDrErE s1÷$
2026-05-18 22:25:43 +12:00
ñ$
2026-05-19 23:36:58 +12:00
¤ð$
´ð$
Ä#ð$
2026-05-18 22:25:43 +12:00
ÔUXð$
2026-05-19 23:36:58 +12:00
Ô]`ñ$
2026-05-18 22:25:43 +12:00
rFcóŽa
2026-05-19 23:36:58 +12:00
a ^RIo RV RV R2pRV RV R2pRV RV R2pTpRV R 2o
2026-05-18 22:25:43 +12:00
TpS P!R
R V4pVPR R
4pVPRR4PRR4pRV 3Rllp V !RWH4pV !RWh4pV !RWx4pV !RWX4pS P!RV
3RlVS PR7pV#)zQApply email-safe inline styles to common HTML tags in user-provided body content.Nzmargin:0 0 16px;font-family:ú&;font-size:16px;line-height:1.7;color:Ú;zmargin:0 0 6px;font-family:z1margin:0 0 16px 0;padding:0 0 0 22px;font-family:ú;color:zcolor:z;text-decoration:underline;z <div\b[^>]*>z<p>rú</p>z<br>z<br/>z<br />cóHV^8„dQhR\R\R\R\/#)rAÚtagÚstyleÚtextrQ)rCs"rDrEÚ&_style_body_html.<locals>.__annotate__ s(÷
ñ
”Sð
2026-05-19 23:36:58 +12:00
¤ð
¬Cð
´
rFcóZ<aaSP!RS R2VV3RlVSPR7#)Ú<z (\s[^>]*)?>cóL<RS VP^4;'gR RS R2#)rrnú style="ú">)Úgroup)rÿrrs&€€rDÚ<lambda>Ú3_style_body_html.<locals>._inject.<locals>.<lambda>• s)ø€˜˜#˜˜qŸw™w q›z×/¨Rи%¸ÀÑDrF©Úflags)rÚ
IGNORECASE)rrr“rsff&€rDÚ_injectÚ!_style_body_html.<locals>._inject s-ú€ØvŠvØ Ø—-‘-ô 
ð
rFÚulÚolÚliz
<a(\s[^>]*?)>cóž<RVP^4P49dRVP^4 RS R2#VP^4#)zstyle=z<ar˜r™)rs)rÿÚa_styles&€rDrÚ"_style_body_html.<locals>.<lambda>  sJø€¸HÈAÏGÉGÐTUËJ×L\ÑL\ÓL^Ô<^Bq—ww˜q“zl )¨G¨9°CÐnÐde×dkÑdkÐlmÓdnÐnrFr)rrrd) rˆr‰rbÚ base_p_styleÚ
base_li_styleÚ
base_ul_styleÚ
2026-05-18 22:25:43 +12:00
base_ol_styler±r rs &&&& @@rDÚ_style_body_htmlr¬ s ù€ã
à1°*°Ð=cÐdnÐcoÐopÐq€LØ1°*°Ð=cÐdnÐcoÐopÐq€MØ
2026-05-19 23:36:58 +12:00
À|ÐSZÐ[eÐZfÐfgÐh€MØ!€MØ|nÐ$?Ð@€Gð €AØ
2026-05-18 22:25:43 +12:00
Šˆ  qÓ)€AØ (˜#€AØ &˜"×*¨8°WÓ=€A÷
2026-05-19 23:36:58 +12:00
ð
2026-05-18 22:25:43 +12:00
ñ %€AÙ'€AÙ'€AÙ'€AØ
ŠØÜ Øm‰mô  €Að
2026-05-19 23:36:58 +12:00
€HrFc
óTV^8„dQhR\R\R\R\R\/#)rAÚ body_textr‰rbrQ)rCs"rDrErE¨ s1÷ñœSð¬cð¼sðÔRUðÔZ]ñrFcóJaaV'dVP4'gR#RV9dRV9d\VSSV4#VPR4Uu.uF*qDP4'gKVP4NK, ppRPVV3RlV44#uupi)zÑConvert user body input to email-safe HTML.
If the input already looks like HTML (contains a tag), we treat it as HTML and inline-style it.
Otherwise we split on blank lines and wrap each paragraph in a <p>.
2026-05-18 22:25:43 +12:00
rnrÚ>z
2026-05-19 23:36:58 +12:00
2026-05-18 22:25:43 +12:00
c3ó<<"TFpRS RS RV R2xK R#5i)z&<p style="margin:0 0 16px;font-family:rŒú;">rNr¦)ruÚpararbr‰s& €€rDrwÚ _body_to_html.<locals>.<genexpr>µ s4øéðáˆDð ° Ð<bÐcmÐbnÐnqÐrvÐqwÐw{Õùsƒ)r~r}r)r‰rbÚpartss&ff& rDÚ
_body_to_htmlr¶¨ sˆù€÷ ˜IŸO™O×à
ˆiÔ˜C   ¨:°zÀ<ÓPà )§¡°Ô 7Ó EÑ 7˜1¿7¹7¿9ŒYˆQW‰WŽYÑ 7€EÐ
7‰7õáóó ðùò
2026-05-19 23:36:58 +12:00
Fs ÁB Á.B có0V^8„dQhR\R\/#rf)rCs"rDrErE» s÷pñpœðp¤ñprFcóšT;'gRPRR4PRR4PRR4PRR4#) rnÚ&amp;Ú"z&quot;rú&lt;r°ú&gt;)rdrhs&rDÚ _escape_attrr¾» sEØ KˆK Ñ   gÓ 6°s¸HÓ E× MÈcÐSYÓ Z× bÐcfÐhnÓ orFc ó`V^8„dQhR\R\R\R\R\R\/#)rArXÚbgÚ
text_colorr‰rQ)rCs"rDrErE¿ s<÷ ñ œsð ¬ð ´#ð Ä3ð ÔTWð ô^añ rFcóLVP4'dVP4'gR#\VP44pVP4PRR4PRR4PRR4pRV RV R V R
V R V R V R
2026-05-18 22:25:43 +12:00
V RV RV R2#)rnr
<table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin:22px 0 6px;">
2026-05-19 23:36:58 +12:00
<tr><td align="left">
2026-05-18 22:25:43 +12:00
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="z\" style="height:48px;v-text-anchor:middle;width:240px;" arcsize="50%" stroke="f" fillcolor="z4">
2026-05-19 23:36:58 +12:00
<w:anchorlock/>
<center style="color:zV;font-family:Arial,sans-serif;font-size:14px;font-weight:bold;letter-spacing:0.04em;">zV</center>
</v:roundrect>
<![endif]-->
2026-05-18 22:25:43 +12:00
<!--[if !mso]><!-- -->
2026-05-19 23:36:58 +12:00
<a href="zO" style="display:inline-block;padding:14px 28px;border-radius:999px;background:rŽz
2026-05-18 22:25:43 +12:00
;font-family:zZ;font-size:14px;font-weight:700;text-decoration:none;letter-spacing:0.04em;mso-hide:all;">z/</a>
<!--<![endif]-->
</td></tr>
</table>)r~rd)rXr‰Úsafe_urlÚ
safe_labels&&&&& rDÚ_bulletproof_buttonrÅ¿ Ø ;‰;=Š= § ¡ § ¢ ÙܘCŸI™I›KÓ(€HØ—+‘+“-ß‘7˜3 Ó©°°fÓ)=¿g¹gÀcÈ6Ó>RððpðqyÐoyðzVðWYðVZðZà&˜<Ð'}ðIð~JðJðˆfÐgiÐfjÐjqÐr|Ðq}ð~KðLVðKWðWqðr|ðq}ð} ð
ð
2026-05-19 23:36:58 +12:00
 rFcóœV^8„dQhR\R\R\R\R\R\R\R\R \R
2026-05-18 22:25:43 +12:00
\R \/ #) rAÚ template_idÚheadingr-Ú cta_labelÚcta_urlÚ sub_headingrkÚsign_offÚ footer_noteÚfont_idrQ)rCs"rDrErEÕ ÷d ñd Üðd ä
ðd ô ðd ôð d ô
2026-05-19 23:36:58 +12:00
ð d ô ð
d ôðd ôðd ôðd ôðd ô ñd rFc
óV\PV\R,4p
2026-05-18 22:25:43 +12:00
\PV \R,4p V R,p V R,p
V R,pV
R,pV
R,pV
2026-05-19 23:36:58 +12:00
R,pV
R,pV
R ,pV
R
,pV
R ,pV
R ,pV
R
,pV
2026-05-18 22:25:43 +12:00
R,pV
2026-05-19 23:36:58 +12:00
R,pV
2026-05-18 22:25:43 +12:00
R,pV
2026-05-19 23:36:58 +12:00
R,pV
2026-05-18 22:25:43 +12:00
R,pV
2026-05-19 23:36:58 +12:00
R,pV
R,pV
R,pV
R,p V
R,p!T;'g
V
R,P4p"T;'g
2026-05-18 22:25:43 +12:00
V
R,P4p#T;'gV
2026-05-19 23:36:58 +12:00
PRR4P4p$T;'g
V
R,P4p%T;'g
V
R,P4p&T;'g
V
R,P4p'\ V'V VV4p(RV R V R!V( R"2p)Rp*V&'dR#V R$V R%V R&V R'V& R(2 p*\ W4VVV 4p+Rp,V#'d
2026-05-18 22:25:43 +12:00
R)V
R*V R+V# R,2p,Rp-V'd
2026-05-19 23:36:58 +12:00
R-V R.V R/V R02p-Rp.V'd
R-V R1V R/V R02p.R2T R3T R4T R5V!'d
V!R6,MR V R72
p/Rp0V'dR8V R92p0RP
.R:NV0 NR;NV" NR<NV NR=NV NR>NT#;'gT" NR?NV NR@NV NRANV NRBNV NRCNV NRDNV NREN\ NRFNV- NRGNV NRHNV/ NRINV
2026-05-18 22:25:43 +12:00
NRJNV NRKNV" NRLNV, NRMNV) NRMNV* NRMNV+ NRMNV$'d;RNV ,RO,V,RP,V,RQ,V$,RR,MR NRSNV. NRTNV NRUNV NRVNV NRWNV NRQNT;'gRX NRYNV%'dRZV%,R",MR NR[N4#)\rr|rr~r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmr[r\rorprsrnrtrrrqz<div style="font-family:rŽz";font-size:16px;line-height:1.7;">r
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="margin:8px 0 18px;">
2026-05-19 23:36:58 +12:00
<tr><td style="background:z;border-left:4px solid zK;padding:14px 18px;border-radius:8px;">
<p style="margin:0;font-family:z';font-size:14px;line-height:1.55;color:z;font-weight:600;">
z
</p>
</td></tr>
</table>z'
<p style="margin:0 0 22px;font-family:z8;font-style:italic;font-size:16px;line-height:1.5;color:z;">
2026-05-18 22:25:43 +12:00
z
</p>z-
2026-05-19 23:36:58 +12:00
<tr>
<td align="center" style="background:z\;padding:18px 24px 0;font-family:Arial,sans-serif;font-size:13px;letter-spacing:0.4em;color:z;line-height:1;">
z
</td>
</tr>z\;padding:0 24px 22px;font-family:Arial,sans-serif;font-size:15px;letter-spacing:0.4em;color:z}
<table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 18px;">
<tr><td style="background:z2;border-radius:999px;padding:8px 16px;font-family:z&;font-size:11px;font-weight:700;color:z7;letter-spacing:0.12em;text-transform:uppercase;">
z &nbsp; z
</td></tr>
</table>z<!--[if !mso]><!--><link href="z3" rel="stylesheet" type="text/css"><!--<![endif]-->a(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="x-apple-disable-message-reformatting">
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no">
<!--[if mso]>
<xml><o:OfficeDocumentSettings><o:PixelsPerInch>96</o:PixelsPerInch><o:AllowPNG/></o:OfficeDocumentSettings></xml>
<![endif]-->
<title>z<</title>
</head>
<body style="margin:0;padding:0;background:z£;width:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;">
<div style="display:none;max-height:0;overflow:hidden;font-size:1px;line-height:1px;color:z
2026-05-04 20:32:24 +12:00
;opacity:0;">zn</div>
2026-05-19 23:36:58 +12:00
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="background:zÁ;">
<tr><td align="center" style="padding:24px 12px;">
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="600" style="max-width:600px;width:100%;background:zd;border-radius:18px;overflow:hidden;">
2026-05-04 20:32:24 +12:00
<tr>
<td align="center" style="background:z;padding:14px 20px;font-family:z,;font-size:13px;letter-spacing:0.18em;color:z ;font-weight:700;">
2026-05-19 23:36:58 +12:00
z
</td>
</tr>
<tr>
<td align="center" style="background:#213021;padding:22px 24px;">
<img src="z¯" width="161" height="32" alt="Goodwalk" style="display:block;max-width:161px;height:auto;border:0;outline:none;text-decoration:none;">
</td>
</tr>
2026-05-19 23:36:58 +12:00
z/
2026-05-19 23:36:58 +12:00
<tr>
<td style="background:z&;padding:30px 30px 8px;">
2026-05-18 22:25:43 +12:00
z4
<h1 style="margin:0 0 14px;font-family:z=;font-size:32px;line-height:1.1;letter-spacing:-0.02em;color:z";font-weight:700;">
2026-05-19 23:36:58 +12:00
z
</h1>
rz&<p style="margin:24px 0 0;font-family:z&;font-size:14px;line-height:1.6;color:z&;">With love,<br><strong style="color:r²z
</strong></p>z(
</td>
</tr>
z>
<tr>
<td align="center" style="background:z$;padding:22px 24px 18px;font-family:z&;font-size:12px;line-height:1.6;color:zX;">
<div style="font-size:14px;letter-spacing:0.3em;margin-bottom:8px;color:u🾠· 🾠· ðŸ¾z</div>
z<div style="font-weight:600;">zY
</td>
</tr>
2026-05-19 23:36:58 +12:00
</table>
</td></tr>
</table>
</body>
</html>)ÚMESSAGE_TEMPLATESr|Ú
MESSAGE_FONTSr~rr*)1rÇr-rkÚtmplÚfontr‰Úheading_font_stackÚ font_linkr]r^r_r`rarbrcrdrerfrgÚfooter_text_colorrirjÚhighlight_text_colorrlrmr[ÚemojiÚshÚsoÚfnÚhlr®Úbody_html_innerrˆÚhighlight_htmlÚcta_htmlÚsub_heading_htmlÚornament_top_htmlÚornament_bottom_htmlÚ kicker_htmlÚfont_link_htmls1&&&&&&&&&& rDÚ_render_message_htmlræÕ sHô × Ñ  Ô.?À Õ.JÓ K€DÜ × Ñ ˜W¤m°HÕ&=Ó >€DØg•€JؘoÕØV• €IØ
2026-05-19 23:36:58 +12:00
(^€FØ%€KØ9o€GØ9o€GؘÕ)€MØ#€JØ%€KØ9o€GØ!€IØÐ-€OØ!€IؘؘÕ'€LØÐØÐ 0ÕØ˜Õ'€LØÐ-€OØ
(^€FØ Õ €Eà × +Ð ++×4€AØ
×
2026-05-19 23:36:58 +12:00
4˜Ð4× ;Ñ ;Ó =€BØ
×
6d—h1°2Ó6× =Ñ =Ó ?€BØ
×
4˜Ð4× ;Ñ ;Ó =€BØ
×
2026-05-19 23:36:58 +12:00
5˜DÐ!4Õ5× <Ñ <Ó >€BØ×-˜˜-×6€Iä# I¨z¸:ÀvÓN€Oà
" : ,¨g°j°\ÐAcØ Ð
Ø
ð ðð €Nß ðà)˜NÐ*AÐBRÐASðT$Ø$. <Ð/VÐWkÐVlðmØ €dð ð  ˆô# 9°v¸{ÈJÓW€HàÐß ð 'Ø'9Ð&:Ð:rÐs~Ðrð@Ø€$ððÐð
Ðßð!(à(/ 1MðNTðMUðUØ€Nðð ÐðÐßð$(à(/ 1MðNTðMUðUØÐðð Ððà#˜HÐ$VÐWaÐVbðcIðJUðIVðVß"€eˆ¨Ð+¨F¨8ð4 ð €Kð€Nßà-¨i¨[Ð8kÐ  ÷> ó> ðð> ðÐð> ð
ð> ð ˆð> ð
> ð-4¨9ð> ð5]ð> ð^eÐ\eð> ðfsð> ðtv×szÐszÐyzÐr{ð> ð|hð> ðipÐgpð> ðqFð> ð$GNðFOð%> ð$O0ð%> ð*18¨yð+> ð*9Xð+> ð*YcÐWcð+> ð*dPð+> ð*QZðP[ð+> ð*[
ð+> ð,Ð ð-> ð,ð-> ô8 jð9> ð8! ð9> ð@
2026-05-19 23:36:58 +12:00
ÐðA> ð@!ðA> ðF")  ðG> ðF*
ðG> ðHˆMðI> ðH4ðI> ðJ5GÐ3GðK> ðJHEðK> ðJFSðETðK> ðJTðK> ðLˆcðM> ðL
ðM> ðPÐ ðQ> ðP
ðQ> ðRˆKðS> ðR
ðS> ðTÐ ðU> ðT
ðU> ðVˆJðW> ðV
ðW> ÷X\^Ð6¸ÕCÐFnÕnÐq|Õ@hõhðkxõxð{@õ@ðCEõEðHWöWðdfð
gðY> ðXg ðY> ð`
Ðða> ð`0ða> ðf1:¨{ðg> ðf;_ðg> ðf`jÐ^jðg> ðfkQðg> ðfRcðQdðg> ðfdUðg> ðhVgÐTgði> ðhhkði> ðhl{÷lUðlUðUðkVði> ðhV
ði> ÷jDFÐÕ3°hÖ>È2Ð Nðk> ðj Oôk> ð> rFz/owner/message-templatescó$V^8„dQhR\/#rLrM)rCs"rDrErE}
s÷@ñ@¬7ñ@rFcƒó"\V4GRjxL
\P4Uu.uFzpRVR,RVR,RVR,RVR,RVR,RVR,R VR
,R VR ,R
2026-05-19 23:36:58 +12:00
VR,RVR,RVPRR4RVR,/ NK| pp\P4Uu.uF)pRVR,RVR,RVR,RVR,/NK+ ppRRRVRV/#Lëuupiuupi5i)Nr¥rZrr]Ú bannerEmojir\ÚdefaultSubjectrnÚdefaultHeadingroÚdefaultSubHeadingrpÚ defaultBodyrqÚdefaultHighlightrrÚdefaultSignOffrsrnÚdefaultFooterNotertr~r|TÚ templatesÚfonts)Úvaluesr|)ÚtrñÚfròs& rDÚowner_message_templatesrö|
s5éä
˜
'×#×ñ,ˆAð
!D•'Ø Af•IØ ˜1˜ •kØ ˜1˜^Õ ˜aÐ 1Õ ˜aÐ 1Õ  Ð#8Õ!9Ø ˜1˜  Ð"5Õ 6Ø ˜aŸe™eÐ$6¸Ó  Ð#8Õ!9ó
ñðô&×
á'ˆ
ˆqw˜  &¥ ¨6°1°Vµ9¸gÀqÈÅzÓ
ð
ð
  Y°¸Ð ?ñ-(ùòùò"
2026-05-19 23:36:58 +12:00
ùs-D C=D ¬BC?Â,D Ã/DÃ3 D Ã?
D z/owner/render-messagecó0V^8„dQhR\R\/#©rAr‡)r=r )rCs"rDrErE˜
s÷&Ô%9ð&ÄGñ&rFc
ƒóv"\V4GRjxL
VP\9d\RRR7h\ VPVP
VP VPVPVPVPVPVPVPR7
pRRRV/#L¥5i)Nr„úUnknown template.rä©rkTr)Ú
templateIdrÐr r-ÚctaLabelÚctaUrlÚ
subHeadingÚ
2026-05-19 23:36:58 +12:00
highlightTextÚsignOffÚ
footerNoteÚfontId)r‡rs&& rDÚowner_render_messager
séä
˜
'× Ô¨Ð4GÔ Ø Ø Ø ‰ Ø
Ø Ø—O‘OØ×Ø—O‘OØ ô €Dð
 Ð (ùsB9B7B&B9z/owner/send-messagecó0V^8„dQhR\R\/#)r>r )rCs"rDrErE¬
s#÷FAñFAÔ#5ðFAÄñFArFcƒó˜"\VPR\P!4PR,4p\ V4GRjxL
2026-05-19 23:36:58 +12:00
pVP \9d\RRR7h\VP4pV'g\RRR7h\VP4pVP;'g.Uu.uFKp\V4P4'gK$\V4P4P!4NKM ppV'gV'g\RRR7h\#VP VP$VP&VP(VP*VP,VP.VP0VP2VP4R7
p\6P!4P!4p V'd6R \8R
V .R \:R R
V 2RV/p
\=V
RVR7GRjxL
RRRR/#R \8R
V .RVR \:R VRV/p
\=V
2026-05-19 23:36:58 +12:00
RVR7GRjxL
\@PD!RY P \GT44\HPJ!RY#\MT4RRTP R TR \GT4R!T/R"7GRjxL
RRR \GT4/#ELvuupi\>d0p \@PB!RY+RR7\RRTRR/R7hRp ? ii;i\>d0p \@PB!RY+RR7\RRTRR/R7hRp ? ii;iL™5i)#r rONr„zPlease enter a subject.z%Please choose at least one recipient.rûr¿z
[PREVIEW] rÚbulk_message_previewrÄz$[%s] bulk message preview failed: %sTrœéör.zThe preview could not be sent.rårrÚ bulk_messagez[%s] bulk message failed: %szThe message could not be sent.z1[%s] bulk message sent: template=%s recipients=%dÚowner_message_sentrüÚrecipientCountÚ
recipients©r4r r5rrB)'r±rUrRrSrTr rirr rkr~rsr-rÿrrrrr.r)r3r„r6r­r<rd) r‡r rPÚ
is_previewrvÚrecipient_emailsrÚ
owner_addrrPrˆs && rDÚowner_send_messager«
sé䘟¨ ´d·j²j³l×6FÑ6FÀrÕ6JÓK€JÜ,¨WÓ5€Kà Ô¨Ð4GÔt—|‘|Ó$€Gß Ü¨Ð4MÔd—l#€JØ9=¿¹×9NÐ9NÈBÐ9NÓbÑ9N°1ÔSVÐWXÓSY×S_ÑS_×SaÔ˜AŸ ×.Ñ9NÐРרÐ4[Ô Ø Ø Ø ‰ Ø
2026-05-19 23:36:58 +12:00
Ø Ø—O‘OØ×Ø—O‘OØ ô €Dô×$×,€Jçà ”JØ : œØ ˜ G 9Ð  
ˆð AܘgÐ-CÐPZÔ[× d˜I  
Ø ˆzˆ
ÐØ”HØð
€Gð}ܘÀJÔO×
 ‡KCÀZ×Q`ÑQ`ÔbeÐfvÓbwÔ
×
Ò
ؼ7À7Ó;KÐTXà ˜$Ÿ/™/Ø  œcÐ"2Ó Ð
ô ÷ ð ð
(¬#Ð.>Ó*?Ð @òI6ùòcñ8
\øÜô AÜ LŠLÐÐ[_Õ ¨C¸ÀzÐS\Ð^~Ð8ôAð
Aûð Aúñ PøÜ ô}Ü Š Ð3°ZÈtÕ¨°\À:ÈyÐZzÐ4{Ô|ûð}úñ
ùs±A
M
Á KÁ
A7M
ÃM
Ã
!KÃ0+KÄM
Ä-C M
Ç7K ÈK
È K È
M
È+L È<L È=L ÉA-M
Ê.MÊ/M
2026-05-19 23:36:58 +12:00
ËM
Ë
K Ë LË*LÌLÌM
Ì L Ì MÌ*MÍMÍM
z/owner/client-enquirycó$V^8„dQhR\/#rLrM)rCs"rDrErEö
s֖,rFcė "\V4GRjxL
VPPR4;'gRP4P 4pV'g\ RRR7h\ PV4pV'g\ RRR7h\VPR4\4'dVPR4MRpV'R VPR
2026-05-19 23:36:58 +12:00
R4R VPR R4R VPR R4RTR
VPR
R4RVPRR4RVPRR4R\VPR4\4'dVPR.4M.RRRRRR/ pRRRV/#ELz5i)Nrçrnr„úEmail is required.räé”zClient not found.Ú lastEnquiryÚ submittedAtÚ
lastEnquiryAtrrr.r­enquiry)
Ú query_paramsr|r~rsr rrrr)rs& rDÚowner_client_enquiryrõ
s[éä
˜
'×
×
2026-05-18 22:25:43 +12:00
!×
% 
2026-05-19 23:36:58 +12:00
.×
4°"× =× E€Eß Ü¨Ð4HÔ×" )€Gß Ü¨Ð4GÔHÜ,6°w·{±{À=Ó7QÔSW×,XÒ,Xˆgk‰k˜(Ð^b€Gß ð
˜7Ÿ;™; ¸Ó ˜7Ÿ;™; }°bÓ ˜Ÿ  J°Ó  W—[[ ¨"Ó w—{{ 9¨bÓ ˜Ÿ  J°Ó ´zÀ'Ç+Á+ÈjÓBYÔ[_×7`Ò7`˜Ÿ  J°Ô3ÐfhØ  ˜Ø  
ˆð
$˜   +ò/(ùs(FF %F¸&FÁ)FÂ A FÃB6Fz/owner/activitycó$V^8„dQhR\/#rLrM)rCs"rDrErE s÷*¤'ñ*rFcƒó8"\V4GRjxL
VPp\VPRR44pVPR4;'gVPR4pV'd \V4MRp\ VPRR44;'gRp\ VPRR44;'gRp\ P!VVVVR7GRjxL
pR R
R V/#\d^dpLÃi;i \dRpLi;iL25i) limitÚ100ÚbeforeIdÚ before_idÚ eventTypernÚ
actorEmail)rr!r4r5events)rr¸r|r5rir­Ú list_events)Úqprr!Ú
before_id_intr4r5r$s& rDÚowner_activityr( séä
˜
'×× Ñ €BðÜB—F‘F˜7 EÓ+ˆð"×9 b§f¡f¨[Ó&9€Iðß*3œ˜¸ˆ
ô˜"Ÿ&™& ¨bÓ2×:°d€Jܘ2Ÿ6™6 Ó4×<¸€KÜ×ØØØô ÷€Fð
2026-05-19 23:36:58 +12:00
$˜  )ñ'(øô ôØŠðûô
ôØŠ
ðúñùóyDC0D£C2¾DÁDÁ)DÁ1
2026-05-19 23:36:58 +12:00
DÁ>!DÂ $DÃ DÃ%DÃ& DÃ2
DÃ?DÄDÄDÄ
DÄDÄDÄDz/owner/submissionscó$V^8„dQhR\/#rLrM)rCs"rDrErE* s÷-¤Wñ-rFcƒó8"\V4GRjxL
VPp\VPRR44pVPR4;'gVPR4pV'd \V4MRp\ VPRR44;'gRp\ VPRR44;'gRp\ P!VVVVR7GRjxL
pR R
R V/#\d^dpLÃi;i \dRpLi;iL25i) Nrrr r!rn)rr! submissions)rr¸r|r5rir­Úlist_submissions)r&rr!r'Ú email_filterÚrowss& rDÚowner_submissionsr0) séä
˜
'×× Ñ €BðÜB—F‘F˜7 EÓ+ˆð"×9 b§f¡f¨[Ó&9€Iðß*3œ˜¸ˆ
ô B—FF˜6  '× /¨4€DܘBŸF™F 7¨BÓ8°D€LÜרØ
Øô ÷ €Dð
$˜
  ,ñ'(øô ôØŠðûô
ôØŠ
ðúñ ùr)z/owner/pending-onboardingcó$V^8„dQhR\/#rLrM)rCs"rDrErEB s÷&&4¬Gñ&4rFcƒó&a"\V4GRjxL
RRlo.p\P4EF:wr#V\P!4P 48XdK0VP
R4'dKITPRTRVP
RR4RVP
RR4RVP
RR4R VP
R R4R
\VP
R
4\4'dVP
2026-05-19 23:36:58 +12:00
R
.4M.R VP
R R4R VP
R R4R
\VP
R
4\4'dVP
R
/4M// 4EK= VPV3RlR7RRRV/#EL|5i)Ncó0V^8„dQhR\R\/#rf©r )rCs"rDrEÚ.owner_pending_onboarding.<locals>.__annotate__E ó÷ñœsð¤uñrFcó°\V\4'd V'g^#\P!V4P 4# \
d^#i;i©r©rrrkrÚ timestampr5rhs&rDÚ_sort_timestampÚ1owner_pending_onboarding.<locals>._sort_timestampE óEܘ×%¯UÙð Ü×)¨%Ó0× <øÜô Úð úó¢#AÁ AÁAr%rnrrÚwelcomePackSentAtÚwelcomePackOffercóœ<VPRR4R8gS!VPR44)VPRR4P43#)r?rnr©r|rs©Úitemr;s&€rDrÚ*owner_pending_onboarding.<locals>.<lambda>a sGø€Ø H‰HÐ(¨"Ó Ñ
˜TŸX™X 
H‰HZ Ó $× 
2026-05-19 23:36:58 +12:00
rF©clients) rr.r~rsr|rrrrÚsort)Úpending_clientsrçr;s& @rDÚowner_pending_onboardingrJA sjøéä
˜
'×ð-/€OÜ*×2‰ˆØ ”K×'× Ø ;‰;Ð à×ÑØ  ˜Ÿ  J°Ó W—[[ ¨"Ó w—{{ 9¨bÓ ˜Ÿ  J°Ó ´zÀ'Ç+Á+ÈjÓBYÔ[_×7`Ò7`˜Ÿ  J°Ô3ÐfhØ ˜WŸ[™[¨¸"Ó  §¡Ð-@À"Ó!EØ ÄzÐRY×R]ÑR]Ð^pÓRqÔsw×GxÒGx § ¡ Ð,>ÀÔ CðAð
÷
ñ
3ð$×Ñô
ðôð
2026-05-04 20:32:24 +12:00
$˜   3òK(ùsƒFF“A&FÁ:DFz/owner/completed-onboardingcó$V^8„dQhR\/#rLrM)rCs"rDrErEl s÷=ñ=¬gñ=rFcƒó˜a
"\V4GRjxL
2026-05-19 23:36:58 +12:00
RRlo
\^\VPP RR444p\
^\^\VPP RR4444p.p\P4EFwrEV\P!4P48XdK0VP R4'gKIVPRVR VP R R
2026-05-18 22:25:43 +12:00
4R VP R R
4R VP R R
4R
VP R
2026-05-19 23:36:58 +12:00
R
4RVP RR
4RVP RR
4RVP RR
4R\\\VP RR
4444/ 4EK
VP!V
3RlR7\#V4p\^Wb,^,
2026-05-18 22:25:43 +12:00
V,4p\
2026-05-19 23:36:58 +12:00
W4pV^,
2026-05-04 20:32:24 +12:00
V,pW,p RRRW8V RRVRVRVRV//#EL
\
d^pELåi;i \
d^
2026-05-19 23:36:58 +12:00
pEL¿i;i5i)Ncó0V^8„dQhR\R\/#rfr4)rCs"rDrEÚ0owner_completed_onboarding.<locals>.__annotate__o r6rFcó°\V\4'd V'g^#\P!V4P 4# \
d^#i;ir8r9rhs&rDr;Ú3owner_completed_onboarding.<locals>._sort_timestampo r=r>r­Ú1Ú page_sizeÚ10r%rnrÚonboardingSubmittedAtÚhasBirthdayInvitecót<S!VPR44)VPRR4P43#)rTrnrBrCs&€rDrÚ,owner_completed_onboarding.<locals>.<lambda>” s4ø€Ù
˜TŸX™XÐ&=Ó
2026-05-18 22:25:43 +12:00
H‰HZ Ó $× 
2026-05-19 23:36:58 +12:00
rFrFTrGÚ
paginationÚpageSizeÚtotalÚ
totalPages)rtr¸rr|r5Úminrr.r~rsrrirkrH) r­rRÚcompleted_clientsrçrZÚ total_pagesÚstartÚendr;s & @rDÚowner_completed_onboardingrak s/øéä
˜
'×ðÜ1”c˜'×.×2°6¸ðܘœC ¤3 w×';Ñ';×'?Ñ'?À ÈTÓ'RÓ#SÓUˆ ð/1ÐÜ2‰ˆØ ”K×'× Ø{‰{Ð à× Ñ Ø  ˜Ÿ  J°Ó W—[[ ¨"Ó w—{{ 9¨bÓ w—{‘{ 9¨bÓ ˜Ÿ  J°Ó g—k‘k (¨BÓ # W§[¡[Ð1HÈ"Ó%MØ ¤¤h¬s°7·;±;¸Ó3LÓ/MÓ&NÓ!Oð
2026-05-18 22:25:43 +12:00
"
2026-05-19 23:36:58 +12:00
÷
ñ
3ð$×Ñô
ðôô
Ð "€EÜa˜+¨aÕ/°IÕ>€KÜ ˆ !€DØ
AX˜Õ "€EØ