Files
VoiceVault/backend/__pycache__/api_routes.cpython-311.pyc

126 lines
29 KiB
Plaintext
Raw Normal View History

2026-02-14 21:46:48 -07:00
<EFBFBD>
2026-02-14 22:04:39 -07:00
<00>Q<EFBFBD>i<EFBFBD>C<00><00>2<00>UdZddlZddlZddlZddlZddlmZddlmZddl m
2026-02-14 21:46:48 -07:00
Z
2026-02-14 22:04:39 -07:00
ddl m Z m Z mZddlmZmZddlmZdd lmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(e<08><00>e d
e)d <0B> <0C><00>Z*eej+d d<0E><00><00><00>Z,e,<2C>-dd<0F><10><00>hd<11>Z.ej+dd<13><00>Z/ej+dd<15><00>Z0ej+dd<17><00>Z1da2e
dze3d<de
fd<1A>Z4dQde5de6fd<1E>Z7de5de8fd <20>Z9d!ede5fd"<22>Z:d#e5d$e5de5fd%<25>Z;e*<2A><d&<26><00>d'<27><00><00>Z=e*<2A>>d(<28><00>d)<29><00><00>Z?e*<2A>>d*<2A><00>d+<2B><00><00>Z@e*<2A>>d,<2C><00>d-<2D><00><00>ZAe*<2A><d.<2E><00>d/e6fd0<64><04><00>ZBe*<2A><d1<64><00>d2<64><00><00>ZCe*<2A>>d3<64><00>d4<64><00><00>ZDe*<2A><d5<64><00>d/e6fd6<64><04><00>ZEe*<2A>>d7<64><00>d8<64><00><00>ZFe*<2A><d7<64><00>d9<64><00><00>ZGe*<2A><d:<3A><00>d;e6fd<<3C><04><00>ZHe*<2A>Id:<3A><00>d;e6fd=<3D><04><00>ZJe*<2A><d><3E><00>d;e6fd?<3F><04><00>ZKe*<2A>>d@<40><00>d;e6fdA<64><04><00>ZLe*<2A><d@<40><00>d;e6fdB<64><04><00>ZMe*<2A>NdC<64><00>d;e6fdD<64><04><00>ZOe*<2A><dC<64><00>d;e6fdE<64><04><00>ZPe*<2A>NdF<64><00>d;e6fdG<64><04><00>ZQe*<2A><dF<64><00>d;e6fdH<64><04><00>ZRe*<2A>>dI<64><00>d;e6fdJ<64><04><00>ZSe*<2A><dI<64><00>d;e6fdK<64><04><00>ZTe*<2A>>dL<64><00>dM<64><00><00>ZUe*<2A><dL<64><00>dN<64><00><00>ZVe*<2A><dO<64><00>d;e6fdP<64><04><00>ZWdS)Rz}
2026-02-14 21:46:48 -07:00
Flask API routes aligned with TitanForge/schema.sql.
2026-02-14 22:04:39 -07:00
Includes auth, upload+transcription, history, and RAG search workflow.
<EFBFBD>N)<01>Path)<01> load_dotenv)<01> WhisperModel)<03> Blueprint<6E>jsonify<66>request)<02>check_password_hash<73>generate_password_hash)<01>secure_filename)<14>add_archive_file<6C> add_audit_log<6F>add_rag_chunks<6B>create_audio_post<73> create_user<65>get_archive_metadata<74>get_archive_rights<74>get_audio_post_by_id<69>get_post_bundle<6C>get_user_by_email<69>get_user_by_id<69>list_archive_files<65>list_audio_posts<74>list_audit_logs<67>list_rag_chunks<6B>list_user_history<72>search_rag_chunks<6B>update_audio_post<73>upsert_archive_metadata<74>upsert_archive_rights<74>apiz/api)<01>
url_prefix<EFBFBD>BACKEND_UPLOAD_DIR<49>uploadsT)<02>parents<74>exist_ok> <00>m4a<34>mkv<6B>mov<6F>mp3<70>mp4<70>ogg<67>wav<61>flac<61>webm<62> WHISPER_MODEL<45>base<73>WHISPER_DEVICE<43>cpu<70>WHISPER_COMPUTE_TYPE<50>int8<74>_whisper_model<65>returnc<00>`<00>t<00>!tttt<00><01><00>atS)N)<02>device<63> compute_type)r5rr/r1r3<00><00><00>VC:\Users\Gk230\OneDrive\Desktop\My_DOCS\Calgary_Hacks\TitanForge\backend\api_routes.py<70>_modelr=8s-<00><00><15><1D>%<25> <19>!<21>-<2D>
<EFBFBD>
<EFBFBD>
<EFBFBD><0E>
<1A>r;<00><><00>message<67>statusc<00>(<00>td|i<01><00>|fS)N<>error)r)r?r@s r<<00>_errorrCCs<00><00> <12>G<EFBFBD>W<EFBFBD>%<25> &<26> &<26><06> .<2E>.r;<00>filenamec<00>x<00>d|vrdS|<00>dd<03><00>d<00><00><00>tvS)N<>.F<>)<03>rsplit<69>lower<65>ALLOWED_MEDIA_EXTENSIONS)rDs r<<00> _allowed_filerKGs=<00><00>
<EFBFBD>(<28><1A><1A><14>u<EFBFBD> <13>?<3F>?<3F>3<EFBFBD><01> "<22> "<22>1<EFBFBD> %<25> +<2B> +<2B> -<2D> -<2D>1I<31> I<>Ir;<00>pathc<00>
<00>tj<00><00>}|<00>d<01><00>5} |<02>d<03><00>}|sn|<01>|<03><00><00>. ddd<00><00>n #1swxYwY|<01><00><00>S)N<>rbTi)<06>hashlib<69>sha256<35>open<65>read<61>update<74> hexdigest)rL<00>h<>f<>chunks r<<00>_sha256rXMs<><00><00><0F><0E><18><18>A<EFBFBD> <0A><19><19>4<EFBFBD><1F><1F><1C>A<EFBFBD> <1C><15>F<EFBFBD>F<EFBFBD>;<3B>'<27>'<27>E<EFBFBD><18> <16><15> <0A>H<EFBFBD>H<EFBFBD>U<EFBFBD>O<EFBFBD>O<EFBFBD>O<EFBFBD>  <1C><16> <1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><><EFBFBD><EFBFBD><1C><1C><1C><1C> <0A>;<3B>;<3B>=<3D>=<3D>s<00>0A&<03>&A*<07>-A*<07>transcript_text<78>titlec<00><00>d|<01>d|<00>d<03>S)NzaYou are an archive assistant. Use the following transcribed audio as source context. Post title: z.
Transcript:
z4
Answer user questions grounded in this transcript.r:)rYrZs r<<00> _build_promptr\Xs-<00><00> =<3D><1C> =<3D> =<3D> <1B> =<3D> =<3D> =<3D>r;z/healthc<00>H<00>tdtttd<02><04><00>S)N<>ok)r@<00> whisper_model<65>whisper_device<63>whisper_compute_type)rr/r1r3r:r;r<<00>healthrbbs*<00><00> <12><16>&<26>(<28> 4<> <06><06> <07> <07>r;z/auth/registerc <00>&<00>tjdd<02><03><00>pi}|<00>d<04><00>pd<05><00><00><00><00><00>}|<00>d<06><00>pd}|r|st dd<08><00>St |<01><00>}|rt d d
<EFBFBD><00>S t|t|<02><00>|<00>d <0B><00>|<00>d <0C><00>|<00>d <0A><00>d<0E><05><00>}t|ddtj d|i<01><00>d<11><03><00>td|d|d|<04>d <0B><00>d<13>i<01><00>dfS#t$r'}t t|<05><00>d<15><00>cYd}~Sd}~wwxYw)NTF<54><02>force<63>silent<6E>email<69><00>password<72>$'email' and 'password' are required.r>z#User already exists for this email.i<><00> display_name<6D>
avatar_url<EFBFBD>bio)rg<00> password_hashrkrlrm<00>user_idz user.register<65>ro<00>action<6F>details<6C>user)rorgrk<00><><00><>)r<00>get_json<6F>get<65>striprIrCrrr
r <00>json<6F>dumpsr<00> Exception<6F>str)<06>payloadrgri<00>existingrs<00>es r<<00> api_registerr<72>ns<><00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD> <14>[<5B>[<5B><17> !<21> !<21> '<27>R<EFBFBD> .<2E> .<2E> 0<> 0<> 6<> 6<> 8<> 8<>E<EFBFBD><16>{<7B>{<7B>:<3A>&<26>&<26>,<2C>"<22>H<EFBFBD> <10>C<01><08>C<01><15><<3C>c<EFBFBD>B<>B<>B<> <20><15>'<27>'<27>H<EFBFBD><0F>B<01><15>;<3B>S<EFBFBD>A<>A<>A<>#<23><1A><1E>!7<><08>!A<>!A<> '<27> <0B> <0B>N<EFBFBD> ;<3B> ;<3B>%<25>k<EFBFBD>k<EFBFBD>,<2C>7<>7<><1E>{<7B>{<7B>5<EFBFBD>)<29>)<29>  <0E> <0E>
<EFBFBD>
<EFBFBD><04> <16>$<24>y<EFBFBD>/<2F>_<EFBFBD>Y]<5D>Yc<59>el<65>ns<6E>dt<64>Yu<59>Yu<59>v<>v<>w<>w<>w<><16> <12><1F> <09>?<3F><1D>g<EFBFBD><1D> $<24><08><08><1E> 8<> 8<><0E><0E>
<EFBFBD> <0B> <0B> <10> <10> <10><> <15>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00>!B=E<00>
F<03>)F <03>F<03> Fz /auth/loginc
<00><><00>tjdd<02><03><00>pi}|<00>d<04><00>pd<05><00><00><00><00><00>}|<00>d<06><00>pd}|r|st dd<08><00>St |<01><00>}|st d d
<EFBFBD><00>St|d |<02><00>st d d
<EFBFBD><00>St|d d tj
d|i<01><00>d<0E><03><00>td|d |d|<03>d<10><00>|<03>d<11><00>|<03>d<12><00>d<13>i<01><00>S)NTFrdrgrhrirjr>zInvalid credentials.i<>rnroz
user.loginrprsrkrlrm)rorgrkrlrm) rrvrwrxrIrCrr r ryrzr)r}rgrirss r<<00> api_loginr<6E><00>s\<00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD> <14>[<5B>[<5B><17> !<21> !<21> '<27>R<EFBFBD> .<2E> .<2E> 0<> 0<> 6<> 6<> 8<> 8<>E<EFBFBD><16>{<7B>{<7B>:<3A>&<26>&<26>,<2C>"<22>H<EFBFBD> <10>C<01><08>C<01><15><<3C>c<EFBFBD>B<>B<>B<> <1C>U<EFBFBD> #<23> #<23>D<EFBFBD> <0F>3<><15>,<2C>c<EFBFBD>2<>2<>2<> <1E>t<EFBFBD>O<EFBFBD>4<>h<EFBFBD> ?<3F> ?<3F>3<><15>,<2C>c<EFBFBD>2<>2<>2<><11>d<EFBFBD>9<EFBFBD>o<EFBFBD><1C>RV<52>R\<5C>^e<>gl<67>]m<>Rn<52>Rn<52>o<>o<>p<>p<>p<> <12> <12><1F> <09>?<3F><1D>g<EFBFBD><1D> $<24><08><08><1E> 8<> 8<>"<22>h<EFBFBD>h<EFBFBD>|<7C>4<>4<><1B>x<EFBFBD>x<EFBFBD><05><EFBFBD><EFBFBD> <0E><0E>
<EFBFBD>
<06>
<06>
r;z /posts/uploadc <00>N <00>dtjvrtdd<03><00>Stjd}|jstdd<03><00>St |j<00><00>stdd<03><00>Stj<00>d<06><00>}tj<00>d<07><00>pd<08><00><00>}tj<00>d <09><00>}tj<00>d
<EFBFBD><00>pd <0B><00><00><00><00><00>}tj<00>d <0C><00>pd <0A><00><00><00><00><00>}|dvrtdd<03><00>S t|<01><00>}n'#ttf$rtdd<03><00>cYSwxYwt|<06><00>}|stdd<12><00>Sttj<00><00><00><00>}t!|j<00><00>} d|<06>d|<08><00>}
t"|<08>d| <09><00>z } |<00>| <0B><00>d} t'||||d||
d<17><07><00>} t| d<00><00>} t)| <0B><00>}t+| dt| <0B><00><00>dd<14><00>|j| <0B><00><00>j|d<1B><05><00>t5<00><00><00>t| <0B><00><00><00>\}}g}g}|D]<5D>}|j<00><00><00>}|s<01>|<12>|<14><00>|<11>t=|j<00><00>t=|j <00><00>||j!<00>t=|j!<00><00>nddd<1C><05><00><00><>d<1D>"|<12><00><00><00><00>}tG||<02><00>}|rtI| |<11><00>tK| tMj'|tQ|<15><00>| |d<1E><04><00><00><00>t+| d|
<EFBFBD>d <20>d!tQ|<15>)d"<22><00><00><00>tUj+|<15>)d"<22><00><00><00><00>,<00><00>d<1B><05><00>t[| d#d$i<01><00>t]| |d%tMj'||
d&<26><02><00>d'<27><04><00>t_| |d$t| <0B><00><00>dd<14><00>||tQ|<11><00>d(<28><07><00>d)fS#t`$r<>}| r<>| <0C>d<18><00>rmt[t| d<00><00>d#d*i<01><00>t]t| d<00><00>|d+tMj'd,t|<17><00>i<01><00>d'<27><04><00>td-|<17><00>d.<2E><00>cYd}~Sd}~wwxYw)/N<>filezMissing 'file' in form-data.r>zFilename is empty.zUnsupported media extension.rorZzUntitled recording<6E> description<6F>
visibility<EFBFBD>private<74>language<67>en><00>publicr<63>z+'visibility' must be 'private' or 'public'.z-'user_id' is required and must be an integer.<2E>User not found.<2E><>zarchive/<2F>/<2F>_<>
processing)rorZr<>r<>r@r<><00>storage_prefix<69>post_id<69>original_audio<69>\)<05>rolerL<00> content_type<70>
size_bytesrP)<05> start_sec<65>end_sec<65>text<78>
confidence<EFBFBD> embedding<6E> )<04>prompt<70>transcript_length_chars<72> source_filer<65><00>transcript_txtz/transcript.txtz
text/plainzutf-8r@<00>readyzpost.upload.transcribed)r<>r<>)r<>rorqrr)r<>r<>r@<00>
audio_pathrYr<><00>rag_chunk_countrt<00>failedzpost.upload.failedrBzUpload/transcription failed: ru)1r<00>filesrCrDrK<00>formrwrxrI<00>int<6E> TypeError<6F>
ValueErrorrr|<00>uuid<69>uuid4r <00>
UPLOAD_DIR<EFBFBD>saverrXr <00>replace<63>mimetype<70>stat<61>st_sizer=<00>
transcriber<EFBFBD><00>append<6E>float<61>start<72>end<6E> avg_logprob<6F>joinr\rrryrz<00>len<65>encoderOrPrTrr rr{)<18>media<69> user_id_rawrZr<>r<>r<>rors<00> post_uuid<69> safe_namer<65><00>
saved_path<EFBFBD> created_postr<74><00> media_sha<68>segments<74>_info<66>rag_rows<77>transcript_parts<74>seg<65> segment_textrY<00> prompt_textrs r<<00>api_upload_postr<74><00>s <00><00> <0A>W<EFBFBD>]<5D>"<22>"<22><15>4<>c<EFBFBD>:<3A>:<3A>:<3A> <13>M<EFBFBD>&<26> !<21>E<EFBFBD> <10>><3E>1<><15>*<2A>C<EFBFBD>0<>0<>0<> <18><15><1E> (<28> (<28>;<3B><15>4<>c<EFBFBD>:<3A>:<3A>:<3A><19>,<2C>"<22>"<22>9<EFBFBD>-<2D>-<2D>K<EFBFBD> <14>\<5C> <1D> <1D>g<EFBFBD> &<26> &<26> ><3E>*><3E> E<> E<> G<> G<>E<EFBFBD><19>,<2C>"<22>"<22>=<3D>1<>1<>K<EFBFBD><19>,<2C>"<22>"<22><<3C>0<>0<>=<3D>I<EFBFBD>D<>D<>F<>F<>L<>L<>N<>N<>J<EFBFBD><17> <0C> <20> <20><1A>,<2C>,<2C>4<><04>;<3B>;<3B>=<3D>=<3D>C<>C<>E<>E<>H<EFBFBD><11>.<2E>.<2E>.<2E><15>C<>S<EFBFBD>I<>I<>I<>L<01><15>k<EFBFBD>"<22>"<22><07><07><> <15>z<EFBFBD> "<22>L<01>L<01>L<01><15>E<>s<EFBFBD>K<>K<>K<>K<>K<>L<01><><EFBFBD><EFBFBD> <1A>'<27> "<22> "<22>D<EFBFBD> <0F>.<2E><15>'<27><13>-<2D>-<2D>-<2D><13>D<EFBFBD>J<EFBFBD>L<EFBFBD>L<EFBFBD>!<21>!<21>I<EFBFBD><1F><05><0E>/<2F>/<2F>I<EFBFBD>5<><07>5<>5<>)<29>5<>5<>N<EFBFBD><1B><19>8<>8<>Y<EFBFBD>8<>8<>8<>J<EFBFBD> <09>J<EFBFBD>J<EFBFBD>z<EFBFBD><1A><1A><1A><17>L<EFBFBD>j@<01>(<28>"<22><1E>*<2A>(<28>&<26>$<24>"0<> <0E> <0E>

<EFBFBD>

<EFBFBD> <0C><16>l<EFBFBD>9<EFBFBD>-<2D>.<2E>.<2E><07><1B>J<EFBFBD>'<27>'<27> <09><18> <13>(<28><1B>J<EFBFBD><0F><0F>/<2F>/<2F><04>c<EFBFBD>:<3A>:<3A> %<25><0E>(<28>o<EFBFBD>o<EFBFBD>/<2F>/<2F>7<>#<23>  <0E> <0E>
<EFBFBD>
<EFBFBD>
<EFBFBD>!<21>(<28>(<28>-<2D>-<2D>c<EFBFBD>*<2A>o<EFBFBD>o<EFBFBD>><3E>><3E><0F><08>%<25><15><08><1D><18><1B> <0E> <0E>C<EFBFBD><1E>8<EFBFBD>><3E>><3E>+<2B>+<2B>L<EFBFBD><1F> <19><18> <1C> #<23> #<23>L<EFBFBD> 1<> 1<> 1<> <14>O<EFBFBD>O<EFBFBD>!&<26>s<EFBFBD>y<EFBFBD>!1<>!1<>$<24>S<EFBFBD>W<EFBFBD>~<7E>~<7E>(<28><?<3F>O<EFBFBD><W<>%<25><03><0F>"8<>"8<>"8<>]a<>!%<25> <12><12> <0E> <0E> <0E> <0E><1E>(<28>(<28>#3<>4<>4<>:<3A>:<3A><<3C><<3C><0F>#<23>O<EFBFBD>U<EFBFBD>;<3B>;<3B> <0B> <13> .<2E> <1A>7<EFBFBD>H<EFBFBD> -<2D> -<2D> -<2D><1F> <13> <10>J<EFBFBD>)<29>/2<>?<3F>/C<>/C<>#,<2C> (<28> <12><12> <0E> <0E>
<EFBFBD>
<EFBFBD>
<EFBFBD> <19> <13>(<28>)<29>:<3A>:<3A>:<3A> ,<2C>!<21>/<2F>"8<>"8<><17>"A<>"A<>B<>B<>!<21>.<2E><1F>)?<3F>)?<3F><07>)H<>)H<>I<>I<>S<>S<>U<>U<>  <0E> <0E>
<EFBFBD>
<EFBFBD>
<EFBFBD> <1A>'<27>H<EFBFBD>g<EFBFBD>#6<>7<>7<>7<><15>"<22>"<22>3<><1F>:<3A>Z<EFBFBD>Sa<53>&b<>&b<>c<>c<>  <0E> <0E>
<EFBFBD>
<EFBFBD>
<EFBFBD><17>"<22>(<28>!<21>!<21>*<2A>o<EFBFBD>o<EFBFBD>5<>5<>d<EFBFBD>C<EFBFBD>@<40>@<40>#2<>%<25>#&<26>x<EFBFBD>=<3D>=<3D> <0E> <0E>

<EFBFBD>

<EFBFBD> <0F>
<0F>
<0F><> <15> @<01> @<01> @<01> <17> <0E>L<EFBFBD>,<2C>,<2C>Y<EFBFBD>7<>7<> <0E> <1D>c<EFBFBD>,<2C>y<EFBFBD>"9<>:<3A>:<3A>X<EFBFBD>x<EFBFBD><P<> Q<> Q<> Q<> <19>"<22><<3C> <09>#:<3A>;<3B>;<3B>&<26>2<>#<23>z<EFBFBD>7<EFBFBD>C<EFBFBD><01>F<EFBFBD>F<EFBFBD>*;<3B><<3C><<3C> <12><12> <0E> <0E> <0E><16>9<>a<EFBFBD>9<>9<>3<EFBFBD>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F><><EFBFBD><EFBFBD><EFBFBD> @<01><><EFBFBD>s2<00><F <00> !F0<03>/F0<03>7KS9<00>9
V$<03>BV<03>V$<03>V$z/users/<int:user_id>/historyroc
<00><><00>tj<00>ddt<00><03><00>}tj<00>ddt<00><03><00>} t |||<02><06><00>}t ||t td|<02><00>d<07><00>d<08><03><00>S#t$r'}tt|<04><00>d <09><00>cYd}~Sd}~wwxYw)
N<EFBFBD>pagerG<00><02>default<6C>type<70>limit<69><00>r<>r<><00>d)<03>historyr<79>r<>ru) r<00>argsrwr<>rr<00>min<69>maxr{rCr|)ror<>r<><00>postsrs r<<00>api_user_historyr<79>Es<><00><00> <12><<3C> <1B> <1B>F<EFBFBD>A<EFBFBD>C<EFBFBD> <1B> 8<> 8<>D<EFBFBD> <13>L<EFBFBD> <1C> <1C>W<EFBFBD>b<EFBFBD>s<EFBFBD> <1C> ;<3B> ;<3B>E<EFBFBD>#<23>!<21>'<27><04>E<EFBFBD>B<>B<>B<><05><16>5<EFBFBD>$<24><13>S<EFBFBD><11>E<EFBFBD>]<5D>]<5D>TW<54>AX<41>AX<41>Y<>Y<>Z<>Z<>Z<><5A> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00>AB<00>
C<03>B=<03>7C<03>=Cz /rag/searchc
<00><><00>tj<00>d<01><00>pd<02><00><00>}tj<00>dt<00><04><00>}tj<00>ddt<00><07><00>}tj<00>dd t<00><07><00>}|st d
d <0B><00>S|st d d <0B><00>S t ||||<03> <0A><00>}t||ttd|<03><00>d<0E><00>d<0F><03><00>S#t$r'}t t|<05><00>d<10><00>cYd}~Sd}~wwxYw)N<>qrhro<00>r<>r<>rGr<>r<><00>z'user_id' is required.r>z'q' is required.)ro<00>
query_textr<EFBFBD>r<>r<>)<03>resultsr<73>r<>ru) rr<>rwrxr<>rCrrr<>r<>r{r|)r<>ror<>r<><00>rowsrs r<<00>api_rag_searchr<68>Qs7<00><00><19>,<2C>"<22>"<22>3<EFBFBD>'<27>'<27>-<2D>2<EFBFBD>4<>4<>6<>6<>J<EFBFBD><15>l<EFBFBD><1E><1E>y<EFBFBD>s<EFBFBD><1E>3<>3<>G<EFBFBD> <12><<3C> <1B> <1B>F<EFBFBD>A<EFBFBD>C<EFBFBD> <1B> 8<> 8<>D<EFBFBD> <13>L<EFBFBD> <1C> <1C>W<EFBFBD>b<EFBFBD>s<EFBFBD> <1C> ;<3B> ;<3B>E<EFBFBD> <12>5<><15>.<2E><03>4<>4<>4<> <15>/<2F><15>(<28>#<23>.<2E>.<2E>.<2E>#<23> <20><17>Z<EFBFBD>d<EFBFBD>Z_<5A>`<60>`<60>`<60><04><16>4<EFBFBD><14><03>C<EFBFBD><01>5<EFBFBD>M<EFBFBD>M<EFBFBD>SV<53>@W<>@W<>X<>X<>Y<>Y<>Y<><59> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00> AD<00>
E<03>D;<03>5E<03>;Ez/usersc<00>6<00>tjdd<02><03><00>pi} tt|<00><00><00><00>dfS#t$r'}t t |<01><00>d<05><00>cYd}~Sd}~wt$r'}t t |<01><00>d<06><00>cYd}~Sd}~wwxYw<01>NTFrdrtr>ru)rrvrrr<>rCr|r{<00>r}rs r<<00>api_create_userr<72>fs<><00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD>#<23><16>{<7B>7<EFBFBD>+<2B>+<2B>,<2C>,<2C>c<EFBFBD>1<>1<><31> <15>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD><EFBFBD>-<00>8<00>
B<03>A$<03>B<03>$ B<03>1B<03> B<03>Bz/users/<int:user_id>c<00>b<00>t|<00><00>}|stdd<02><00>St|<01><00>S)Nr<4E>r<>)rrCr)rorss r<<00> api_get_userr<72>qs4<00><00> <19>'<27> "<22> "<22>D<EFBFBD> <0F>.<2E><15>'<27><13>-<2D>-<2D>-<2D> <12>4<EFBFBD>=<3D>=<3D>r;z/postsc<00>6<00>tjdd<02><03><00>pi} tt|<00><00><00><00>dfS#t$r'}t t |<01><00>d<05><00>cYd}~Sd}~wt$r'}t t |<01><00>d<06><00>cYd}~Sd}~wwxYwr<>)rrvrrr<>rCr|r{r<>s r<<00>api_create_postr<74>ys<><00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD>#<23><16>(<28><17>1<>1<>2<>2<>C<EFBFBD>7<>7<><37> <15>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>r<EFBFBD>c
2026-02-14 21:46:48 -07:00
<00><00>tj<00>ddt<00><03><00>}tj<00>ddt<00><03><00>}tj<00>d<06><00>}tj<00>dt<00><08><00>} t ||||<03> <09><00>}t ||t td|<01><00>d
2026-02-14 22:04:39 -07:00
<EFBFBD><00>d <0B><03><00>S#t$r'}tt|<05><00>d <0C><00>cYd}~Sd}~wwxYw) Nr<4E>rGr<>r<>r<>r<>ror<>)r<>r<>r<>ror<>)r<>r<>r<>ru) rr<>rwr<>rrr<>r<>r{rCr|)r<>r<>r<>ror<>rs r<<00>api_list_postsr<73><00>s<><00><00> <12><<3C> <1B> <1B>F<EFBFBD>A<EFBFBD>C<EFBFBD> <1B> 8<> 8<>D<EFBFBD> <13>L<EFBFBD> <1C> <1C>W<EFBFBD>b<EFBFBD>s<EFBFBD> <1C> ;<3B> ;<3B>E<EFBFBD><18><1C>!<21>!<21>,<2C>/<2F>/<2F>J<EFBFBD><15>l<EFBFBD><1E><1E>y<EFBFBD>s<EFBFBD><1E>3<>3<>G<EFBFBD>#<23><1F>T<EFBFBD><15>:<3A>W^<5E>_<>_<>_<><04><16><14>t<EFBFBD>c<EFBFBD>#<23>a<EFBFBD><15>-<2D>-<2D>QT<51>>U<>>U<>V<>V<>W<>W<>W<><57> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00>AC<00>
D<03>!D<03>=D<03>Dz/posts/<int:post_id>r<>c<00>b<00>t|<00><00>}|stdd<02><00>St|<01><00>S<00>N<>Post not found.r<>)rrCr<00>r<><00>rows r<<00> api_get_postr<74><00>s4<00><00>
2026-02-14 21:46:48 -07:00
<1E>w<EFBFBD>
'<27>
2026-02-14 22:04:39 -07:00
'<27>C<EFBFBD> <0E>.<2E><15>'<27><13>-<2D>-<2D>-<2D> <12>3<EFBFBD><<3C><<3C>r;c<00><><00>tjdd<02><03><00>pi} t||<01><00>}|stdd<05><00>St |<02><00>S#t
$r'}tt |<03><00>d<06><00>cYd}~Sd}~wwxYw)NTFrdr<>r<>ru)rrvrrCrr{r|)r<>r}r<>rs r<<00>api_patch_postr<74><00>s<><00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD>#<23><1F><07><17>1<>1<><03><12> 2<><19>+<2B>S<EFBFBD>1<>1<> 1<><16>s<EFBFBD>|<7C>|<7C><1B><> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s"<00>!A <00>A <00>
A<<03>A7<03>1A<<03>7A<z/posts/<int:post_id>/bundlec<00>b<00>t|<00><00>}|stdd<02><00>St|<01><00>Sr<>)rrCr)r<><00>bundles r<<00>api_post_bundler<65><00>s4<00><00> <1C>W<EFBFBD> %<25> %<25>F<EFBFBD> <11>.<2E><15>'<27><13>-<2D>-<2D>-<2D> <12>6<EFBFBD>?<3F>?<3F>r;z/posts/<int:post_id>/filesc<00>8<00>tjdd<02><03><00>pi} tt||<01><00><00><00>dfS#t$r'}t t |<02><00>d<05><00>cYd}~Sd}~wt$r'}t t |<02><00>d<06><00>cYd}~Sd}~wwxYwr<>)rrvrr r<>rCr|r{<00>r<>r}rs r<<00> api_add_filer<65><00>s<><00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD>#<23><16>'<27><07><17>9<>9<>:<3A>:<3A>C<EFBFBD>?<3F>?<3F><> <15>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s-<00>9<00>
B<03>A%<03>B<03>% B<03>2B<03>B<03>Bc<00><><00> tdt|<00><00>i<01><00>S#t$r'}tt |<01><00>d<02><00>cYd}~Sd}~wwxYw)Nr<4E>ru)rrr{rCr|)r<>rs r<<00>api_list_filesr<73><00>sg<00><00>#<23><16><07>!3<>G<EFBFBD>!<<3C>!<<3C>=<3D>><3E>><3E>><3E><> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00> <00>
A<03>A <03>A<03> Az/posts/<int:post_id>/metadatac<00>$<00>tjdd<02><03><00>pi}|<01>d<04><00>}|<02>tdd<06><00>S t t ||<02><00><00><00>S#t $r'}tt|<03><00>d<07><00>cYd}~Sd}~wwxYw)NTFrd<00>metadataz'metadata' is required.r>ru)rrvrwrCrrr{r|)r<>r}r<>rs r<<00>api_put_metadatar<61><00>s<><00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD><16>{<7B>{<7B>:<3A>&<26>&<26>H<EFBFBD><0F><17><15>/<2F><13>5<>5<>5<>#<23><16>.<2E>w<EFBFBD><08>A<>A<>B<>B<>B<><42> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00>A<00>
2026-02-14 21:46:48 -07:00
B<03>(B
<03>B<03>
2026-02-14 22:04:39 -07:00
Bc<00>b<00>t|<00><00>}|stdd<02><00>St|<01><00>S)NzMetadata not found.r<>)rrCrr<>s r<<00>api_get_metadatar<00>s4<00><00>
2026-02-14 21:46:48 -07:00
<1E>w<EFBFBD>
'<27>
2026-02-14 22:04:39 -07:00
'<27>C<EFBFBD> <0E>2<><15>+<2B>S<EFBFBD>1<>1<>1<> <12>3<EFBFBD><<3C><<3C>r;z/posts/<int:post_id>/rightsc<00><><00>tjdd<02><03><00>pi} tt||<01><00><00><00>S#t$r'}t t |<02><00>d<04><00>cYd}~Sd}~wwxYw)NTFrdru)rrvrrr{rCr|r<>s r<<00>api_put_rightsr<00>s~<00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD>#<23><16>,<2C>W<EFBFBD>g<EFBFBD>><3E>><3E>?<3F>?<3F>?<3F><> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00>7<00>
A(<03>A#<03>A(<03>#A(c<00>b<00>t|<00><00>}|stdd<02><00>St|<01><00>S)NzRights not found.r<>)rrCrr<>s r<<00>api_get_rightsr<00>s4<00><00>
2026-02-14 21:46:48 -07:00
<1C>W<EFBFBD>
%<25>
2026-02-14 22:04:39 -07:00
%<25>C<EFBFBD> <0E>0<><15>)<29>3<EFBFBD>/<2F>/<2F>/<2F> <12>3<EFBFBD><<3C><<3C>r;z/posts/<int:post_id>/chunksc<00>r<00>tjdd<02><03><00>pi}|<01>d<04><00>}t|t<00><00>st dd<06><00>S t ||<02><00>}tt|<03><00>|d<07><02><00>dfS#t$r'}t t|<04><00>d <09><00>cYd}~Sd}~wwxYw)
NTFrd<00>chunksz'chunks' must be a list.r>)<02>insertedrrtru) rrvrw<00>
isinstance<EFBFBD>listrCrrr<>r{r|)r<>r}rr<>rs r<<00>api_add_chunksr
<00>s<><00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD> <14>[<5B>[<5B><18> "<22> "<22>F<EFBFBD> <15>f<EFBFBD>d<EFBFBD> #<23> #<23>7<><15>0<>#<23>6<>6<>6<>#<23><1D>g<EFBFBD>v<EFBFBD>.<2E>.<2E><04><16>C<EFBFBD><04>I<EFBFBD>I<EFBFBD><14>><3E>><3E>?<3F>?<3F><13>D<>D<><44> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00>0B<00>
B6<03>B1<03>+B6<03>1B6c<00>J<00>tj<00>ddt<00><03><00>}tj<00>ddt<00><03><00>} t dt |||<02><07><00>i<01><00>S#t $r'}tt|<03><00>d<08><00>cYd}~Sd}~wwxYw) Nr<4E>rGr<>r<><00><>rr<>ru) rr<>rwr<>rrr{rCr|<00>r<>r<>r<>rs r<<00>api_get_chunksr<00>s<><00><00> <12><<3C> <1B> <1B>F<EFBFBD>A<EFBFBD>C<EFBFBD> <1B> 8<> 8<>D<EFBFBD> <13>L<EFBFBD> <1C> <1C>W<EFBFBD>c<EFBFBD><03> <1C> <<3C> <<3C>E<EFBFBD>#<23><16><08>/<2F>'<27><04>E<EFBFBD>"R<>"R<>"R<>S<>T<>T<>T<><54> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD><EFBFBD><00> A1<00>1
B"<03>;B<03>B"<03>B"z/auditc<00>6<00>tjdd<02><03><00>pi} tt|<00><00><00><00>dfS#t$r'}t t |<01><00>d<05><00>cYd}~Sd}~wt$r'}t t |<01><00>d<06><00>cYd}~Sd}~wwxYwr<>)rrvrr r<>rCr|r{r<>s r<<00>api_create_auditrs<><00><00><15><1E>T<EFBFBD>%<25>8<>8<>8<>><3E>B<EFBFBD>G<EFBFBD>#<23><16>}<7D>W<EFBFBD>-<2D>-<2D>.<2E>.<2E><03>3<>3<><33> <15>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>r<EFBFBD>c <00><><00>tj<00>dt<00><02><00>}tj<00>dt<00><02><00>}tj<00>ddt<00><06><00>}tj<00>ddt<00><06><00>} t d t ||||<03>
<EFBFBD><00>i<01><00>S#t $r'}tt|<04><00>d <0B><00>cYd}~Sd}~wwxYw) Nr<4E>r<>ror<>rGr<>r<>r<><00>logs)r<>ror<>r<>ru<00> rr<>rwr<>rrr{rCr|)r<>ror<>r<>rs r<<00>api_list_auditr s<><00><00><15>l<EFBFBD><1E><1E>y<EFBFBD>s<EFBFBD><1E>3<>3<>G<EFBFBD><15>l<EFBFBD><1E><1E>y<EFBFBD>s<EFBFBD><1E>3<>3<>G<EFBFBD> <12><<3C> <1B> <1B>F<EFBFBD>A<EFBFBD>C<EFBFBD> <1B> 8<> 8<>D<EFBFBD> <13>L<EFBFBD> <1C> <1C>W<EFBFBD>c<EFBFBD><03> <1C> <<3C> <<3C>E<EFBFBD>#<23><16><06><0F><07><17>W[<5B>ch<63> i<> i<> i<>j<>k<>k<>k<><6B> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>s<00>!B><00>>
C/<03>C*<03>$C/<03>*C/z/posts/<int:post_id>/auditc<00>J<00>tj<00>ddt<00><03><00>}tj<00>ddt<00><03><00>} t dt |||<02><07><00>i<01><00>S#t $r'}tt|<03><00>d<08><00>cYd}~Sd}~wwxYw) Nr<4E>rGr<>r<>r<>r)r<>r<>r<>rurr s r<<00>api_post_auditrs<><00><00> <12><<3C> <1B> <1B>F<EFBFBD>A<EFBFBD>C<EFBFBD> <1B> 8<> 8<>D<EFBFBD> <13>L<EFBFBD> <1C> <1C>W<EFBFBD>c<EFBFBD><03> <1C> <<3C> <<3C>E<EFBFBD>#<23><16><06><0F><07>d<EFBFBD>RW<52> X<> X<> X<>Y<>Z<>Z<>Z<><5A> <14>#<23>#<23>#<23><15>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>c<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22><><EFBFBD><EFBFBD><EFBFBD>#<23><><EFBFBD>r)r>)X<>__doc__rOry<00>osr<73><00>pathlibr<00>dotenvr<00>faster_whisperr<00>flaskrrr<00>werkzeug.securityr r
<00>werkzeug.utilsr <00>
db_queriesr r rrrrrrrrrrrrrrrrrr<00>__name__r <00>getenvr<76><00>mkdirrJr/r1r3r5<00>__annotations__r=r|r<>rC<00>boolrKrXr\rwrb<00>postr<74>r<>r<>r<>r<>r<>r<>r<>r<>r<><00>patchr<68>r<>r<>r<><00>putr<74>rrrr
rrrrr:r;r<<00><module>r)s<><00><01><04><04><04>
<0F><0E><0E><0E> <0B> <0B> <0B> <0B> <09> <09> <09> <09> <0B> <0B> <0B> <0B><18><18><18><18><18><18><1E><1E><1E><1E><1E><1E>'<27>'<27>'<27>'<27>'<27>'<27>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>I<>I<>I<>I<>I<>I<>I<>I<>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02>. <0C> <0B> <0A> <0A> <0A><0F>i<EFBFBD><05>x<EFBFBD>F<EFBFBD>3<>3<>3<><03> <11>T<EFBFBD>)<29>"<22>)<29>0<>)<29><<3C><<3C> =<3D> =<3D>
<EFBFBD>
<EFBFBD><10><10><14><04><10>-<2D>-<2D>-<2D>\<5C>\<5C>\<5C><18><19><02> <09>/<2F>6<EFBFBD>2<>2<> <0A><1A><12><19>+<2B>U<EFBFBD>3<>3<><0E> <20>r<EFBFBD>y<EFBFBD>!7<><16>@<40>@<40><14>&*<2A><0E> <0C>t<EFBFBD>#<23>*<2A>*<2A>*<2A><1A> <0C><1A><1A><1A><1A>/<2F>/<2F>C<EFBFBD>/<2F><13>/<2F>/<2F>/<2F>/<2F>J<01>C<EFBFBD>J<01>D<EFBFBD>J<01>J<01>J<01>J<01> <19>$<24><19>3<EFBFBD><19><19><19><19><06>3<EFBFBD><06>s<EFBFBD><06>s<EFBFBD><06><06><06><06><05><17><17><19><13><13><07><07><14><13><07><05><18><18>
<1A><1B><1B>#<23>#<23><1C><1B>#<23>D<05><18><18>-<2D><18><18><06><06><19><18><06>@<05><18><18>/<2F><1A><1A>M@<01>M@<01><1B><1A>M@<01>d<05><17><17> '<27>(<28>(<28>#<23>c<EFBFBD>#<23>#<23>#<23>)<29>(<28>#<23><05><17><17><1D><17><17>#<23>#<23><18><17>#<23>(<05><18><18>(<28><13><13>#<23>#<23><14><13>#<23><05><17><17> <1F> <20> <20><19>#<23><19><19><19>!<21> <20><19><05><18><18>(<28><13><13>#<23>#<23><14><13>#<23><05><17><17><18><12><12>
2026-02-14 21:46:48 -07:00
#<23>
#<23><13><12>
2026-02-14 22:04:39 -07:00
#<23><05><17><17> <1F> <20> <20><18>#<23><18><18><18>!<21> <20><18><05><19><19> !<21>"<22>"<22>#<23>C<EFBFBD>#<23>#<23>#<23>#<23>"<22>#<23><05><17><17> &<26>'<27>'<27><1B>S<EFBFBD><1B><1B><1B>(<28>'<27><1B><05><18><18>
&<26>'<27>'<27>#<23>#<23>#<23>#<23>#<23>(<28>'<27>#<23><05><17><17> %<25>&<26>&<26>#<23>C<EFBFBD>#<23>#<23>#<23>'<27>&<26>#<23><05><17><17> (<28>)<29>)<29> #<23>c<EFBFBD> #<23> #<23> #<23>*<2A>)<29> #<23><05><17><17> (<28>)<29>)<29><18>c<EFBFBD><18><18><18>*<2A>)<29><18><05><17><17> &<26>'<27>'<27>#<23>C<EFBFBD>#<23>#<23>#<23>(<28>'<27>#<23><05><17><17> &<26>'<27>'<27><18>C<EFBFBD><18><18><18>(<28>'<27><18><05><18><18>
'<27>(<28>(<28> #<23>C<EFBFBD> #<23> #<23> #<23>)<29>(<28> #<23><05><17><17> &<26>'<27>'<27>#<23>C<EFBFBD>#<23>#<23>#<23>(<28>'<27>#<23><05><18><18>(<28><13><13>#<23>#<23><14><13>#<23><05><17><17><18><12><12> #<23> #<23><13><12> #<23><05><17><17> %<25>&<26>&<26>#<23>C<EFBFBD>#<23>#<23>#<23>'<27>&<26>#<23>#<23>#r;