Files
timmy-config/scripts/meaning-kernels/__pycache__/extract_meaning_kernels.cpython-312.pyc

168 lines
29 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00>_<EFBFBD>i b<00><00>t<00>dZddlZddlZddlZddlZddlZddlmZddlmZddl m
Z
m Z m Z m Z mZddlZ ddlmZdZ ddlZdZ ddlZdZGd <0C>d <0A>ZGd<0E>d<0F>ZGd<10>d<11>Zd<12>Zedk(re<1C>yy#e$r dZed <09>Y<00>NwxYw#e$r dZed
<EFBFBD>Y<00>\wxYw#e$r dZed <0B>Y<00>jwxYw)z<>
Improved Meaning Kernel Extraction Pipeline
Extract structured meaning kernels from academic PDF diagrams.
Issue #493: [Multimodal] Extract Meaning Kernels from Research Diagrams
<EFBFBD>N)<01>Path)<01>datetime)<05>List<73>Dict<63>Any<6E>Optional<61>Tuple)<01>ImageTFz<Warning: PIL not available. Install with: pip install PillowzIWarning: pytesseract not available. Install with: pip install pytesseractzEWarning: pdf2image not available. Install with: pip install pdf2imagec<00>x<00>eZdZdZ ddedededededeeefd eefd
<EFBFBD>Z d efd <0C>Z
d eeeffd <0A>Z d efd<0E>Z y)<10> MeaningKernelz'Represents an extracted meaning kernel.N<> kernel_id<69>content<6E>source<63> kernel_type<70>
confidence<EFBFBD>metadata<74>tagsc<00><><00>||_||_||_||_||_|xsi|_|xsg|_tj<00>j<00>|_
|j<00>|_ y<00>N) r rrrrrrr<00>now<6F> isoformat<61> timestamp<6D>_generate_hash<73>hash)<08>selfr rrrrrrs <20>Q/private/tmp/timmy-config-burn/scripts/meaning-kernels/extract_meaning_kernels.py<70>__init__zMeaningKernel.__init__*sd<00><00>#<23><04><0E><1E><04> <0C><1C><04> <0B>&<26><04><18>$<24><04><0F> <20><0E>B<EFBFBD><04> <0A><18>J<EFBFBD>B<EFBFBD><04> <09>!<21><1C><1C><1E>1<>1<>3<><04><0E><18>'<27>'<27>)<29><04> <09><00>returnc<00><><00>|j<00>d|j<00>d|j<00>d|j<00><00>}t j
|j <00><00>j<00>ddS)z'Generate a unique hash for this kernel.<2E>:N<>)r rrr<00>hashlib<69>sha256<35>encode<64> hexdigest)r<00> content_strs rrzMeaningKernel._generate_hash7sX<00><00><1D><1E><1E>(<28><01>$<24>,<2C>,<2C><1E>q<EFBFBD><14><1B><1B> <0A>Q<EFBFBD>t<EFBFBD>~<7E>~<7E>FV<46>W<> <0B><16>~<7E>~<7E>k<EFBFBD>0<>0<>2<>3<>=<3D>=<3D>?<3F><03><12>D<>Drc
<00><><00>|j|j|j|j|j|j
|j |j|jd<01> S)z(Convert to dictionary for serialization.<2E> r rrrrrrrrr)<00>rs r<00>to_dictzMeaningKernel.to_dict<sO<00><00><1E><1E><1E><1B>|<7C>|<7C><1A>k<EFBFBD>k<EFBFBD><1F>+<2B>+<2B><1E>/<2F>/<2F><1C> <0A> <0A><18>I<EFBFBD>I<EFBFBD><1D><1E><1E><18>I<EFBFBD>I<EFBFBD>

<EFBFBD>
rc<00>\<00>d|j<00>d|j<00>d|jdd<00>d<05>S)NzKernel[z] (z): <20>d<00>...)r rrr*s r<00>__str__zMeaningKernel.__str__Js6<00><00><18><14><1E><1E>(<28><03>D<EFBFBD>,<<3C>,<<3C>+=<3D>S<EFBFBD><14><1C><1C>d<EFBFBD>s<EFBFBD>AS<41>@T<>TW<54>X<>Xr)<04>text<78>NN) <0A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>str<74>floatrrrrrr+r/<00>rrr r 's<><00><00>1<>AD<01>DH<44> *<2A>#<23> *<2A><03> *<2A>S<EFBFBD> *<2A>!<21> *<2A>8=<3D> *<2A><1F><03>S<EFBFBD><08>><3E> *<2A>8<<3C>S<EFBFBD> <09> *<2A>E<01><03>E<01>

<EFBFBD><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E> 
<EFBFBD>Y<01><13>Yrr c<00>H<00>eZdZdZddeeeffd<04>Zdedeeeffd<07>Zde jdeeeffd <09>Z
de jde fd
<EFBFBD>Z d eeefde fd <0C>Zd eeefdeefd <0A>Zde jdeeefdefd<0F>Zde jde fd<10>Zdeeefdeeeffd<11>Zy)<13>DiagramAnalyzerz(Analyze diagrams using multiple methods.N<>configc<00>`<00>|xsi|_|jjdgd<02><01>|_y)N<>philosophical_keywords)<18>truth<74> knowledge<67>wisdom<6F>meaning<6E>purpose<73> existence<63>reality<74> consciousness<73>ethics<63>morality<74>beauty<74>justice<63>freedom<6F>responsibility<74>identity<74> causality<74> determinismz free will<6C> rationality<74>logic<69> metaphysics<63> epistemology<67>ontology<67> phenomenology)r;<00>getr=<00>rr;s rrzDiagramAnalyzer.__init__Ps+<00><00><1C>l<EFBFBD><02><04> <0B>&*<2A>k<EFBFBD>k<EFBFBD>o<EFBFBD>o<EFBFBD>6N<36>Q
<EFBFBD>' <0B><04>#r<00>
image_pathrc<00>\<00>ts td<01><00>tj|<01>}|j|j
d<02>|j|j
z |j |jtjj|<01>|j|<02>d<03>}tr<> tj|tjj <00><04>}dj#|dD<00>cgc]}|j%<00>s<01>|<05><02>c}<05>}||d<|j'|<04>|d<t)|j+<00><00>|d <|j-|<04>|d
<|j3||<03>|d<|j5|<03>|d<|Scc}w#t.$r"}d |d<d |d<t1|<07>|d <Yd}~<07>Vd}~wwxYw)z(Analyze an image using multiple methods.z"PIL is required for image analysis)<02>width<74>height)<06>
dimensions<EFBFBD> aspect_ratio<69>mode<64>format<61>
size_bytes<EFBFBD>color_analysis)<01> output_type<70> r0<00>ocr_text<78>ocr_confidence<63>ocr_word_count<6E> ocr_lines<65>r1<00> ocr_errorN<72> diagram_type<70>content_analysis)<1B> PIL_AVAILABLE<4C> ImportErrorr
<00>openrYrZr]r^<00>os<6F>path<74>getsize<7A>_analyze_colors<72>TESSERACT_AVAILABLE<4C> pytesseract<63> image_to_data<74>Output<75>DICT<43>join<69>strip<69>_calculate_ocr_confidence<63>len<65>split<69>_extract_ocr_lines<65> Exceptionr6<00>_estimate_diagram_type<70>_analyze_content)rrW<00>image<67>analysis<69>ocr_datar0rc<00>es r<00> analyze_imagezDiagramAnalyzer.analyze_imageZs<00><00><1C><1D>B<>C<> C<><15>
<EFBFBD>
<EFBFBD>:<3A>&<26><05>%*<2A>K<EFBFBD>K<EFBFBD>5<EFBFBD><<3C><<3C>H<>!<21>K<EFBFBD>K<EFBFBD>%<25>,<2C>,<2C>6<><19>J<EFBFBD>J<EFBFBD><1B>l<EFBFBD>l<EFBFBD><1C>'<27>'<27>/<2F>/<2F>*<2A>5<>"<22>2<>2<>5<EFBFBD>9<> 
<EFBFBD><08> <1F>
/<2F>&<26>4<>4<>U<EFBFBD> <0B>HZ<48>HZ<48>H_<48>H_<48>`<60><08><1E>8<EFBFBD>8<EFBFBD>h<EFBFBD>v<EFBFBD>6F<36>$W<>d<EFBFBD>$<24>*<2A>*<2A>,<2C>T<EFBFBD>$W<>X<><08>'/<2F><08><1A>$<24>-1<>-K<>-K<>H<EFBFBD>-U<><08>)<29>*<2A>-0<><18><1E><1E>1A<31>-B<><08>)<29>*<2A>(,<2C>(?<3F>(?<3F><08>(I<><08><1B>%<25>$(<28>#><3E>#><3E>u<EFBFBD>h<EFBFBD>#O<><08><1E> <20>(,<2C>'<<3C>'<<3C>X<EFBFBD>'F<><08>#<23>$<24><17><0F><>!%X<01><>
<1D> /<2F>')<29><08><1A>$<24>-0<><08>)<29>*<2A>(+<2B>A<EFBFBD><06><08><1B>%<25><> /<2F>s2<00>%AF<00>&E;<08><E;<08>AF<00>;F<00> F+<03> F&<03>&F+r<>c <00>v<00>|jdk7r|jd<01>}|jd<02><03>}|r<>|jd<04>d<05><06>|j|j
z}g}|ddD],\}}||z d z}|j ||t|d
<EFBFBD>d <0B><03><00>.|t|<02>|j|<01>d <0C>Sgd d<0E>S)z$Analyze color distribution in image.<2E>RGBi')<01> maxcolorsc<00> <00>|dS)Nrr8)<01>xs r<00><lambda>z1DiagramAnalyzer._analyze_colors.<locals>.<lambda><3E>s
<00><00>a<EFBFBD><01>d<EFBFBD>rT)<02>key<65>reverseN<65>r-<00>)<03>color<6F>count<6E>
percentage)<03>dominant_colors<72> unique_colors<72> is_grayscaler)r<>r<>)
r]<00>convert<72> getcolors<72>sortrYrZ<00>append<6E>roundrz<00> _is_grayscale)rr<><00>colors<72> total_pixelsr<73>r<>r<>r<>s rrqzDiagramAnalyzer._analyze_colors<72>s<><00><00> <11>:<3A>:<3A><15> <1E><19>M<EFBFBD>M<EFBFBD>%<25>(<28>E<EFBFBD><17><1F><1F>5<EFBFBD><1F>1<><06> <11> <12>K<EFBFBD>K<EFBFBD>N<EFBFBD>D<EFBFBD>K<EFBFBD> 9<> <20>;<3B>;<3B><15><1C><1C>5<>L<EFBFBD>!<21>O<EFBFBD> &<26>r<EFBFBD><01>
<EFBFBD> <13> <0C><05>u<EFBFBD>#<23>l<EFBFBD>2<>c<EFBFBD>9<>
<EFBFBD><1F>&<26>&<26>"<22>"<22>"'<27>
<EFBFBD>A<EFBFBD>"6<>(<12><13> <13>$3<>!$<24>V<EFBFBD><1B> $<24> 2<> 2<>5<EFBFBD> 9<><0E> <0E> $&<26><01>:<3A>:rc<00><><00>|j\}}td||dz<00>D]@}td||dz<00>D]+}|j||f<02>\}}}||cxk(r|k(r<01>&yy<00>By)zCheck if image is grayscale.r<00>
FT)<03>size<7A>range<67>getpixel) rr<>rYrZr<><00>y<>r<>g<>bs rr<>zDiagramAnalyzer._is_grayscale<6C>s|<00><00><1E>
<EFBFBD>
<EFBFBD> <0A><05>v<EFBFBD><16>q<EFBFBD>%<25><15>"<22><1B>-<2D> !<21>A<EFBFBD><1A>1<EFBFBD>f<EFBFBD>f<EFBFBD><02>l<EFBFBD>3<> !<21><01><1F>.<2E>.<2E>!<21>Q<EFBFBD><16>0<><07><01>1<EFBFBD>a<EFBFBD><19>Q<EFBFBD> <0B>!<21> <0B> <20>$<24> <20> !<21> !<21>
rr<>c<00><><00>|dD<00>cgc]}t|<02>dkDs<01>t|<02><00><02>}}|rt|<03>t|<03>z dz Sycc}w)z!Calculate average OCR confidence.<2E>confrgY@r1)<03>int<6E>sumrz)rr<>r<><00> confidencess rryz)DiagramAnalyzer._calculate_ocr_confidence<63>sN<00><00>-5<>f<EFBFBD>-=<3D>O<>T<EFBFBD><13>T<EFBFBD><19>Q<EFBFBD><1D>s<EFBFBD>4<EFBFBD>y<EFBFBD>O<> <0B>O<> <16><16>{<7B>#<23>c<EFBFBD>+<2B>&6<>6<><15>><3E> ><3E><12><>Ps
<00>A<04> Ac<00><><00>g}g}d}d}d}tt|d<00><00>D]}t|d|<00>dkr<01>|d|}|d|} |d|}
||k7s
| |k7s|
|k7r*|r |jdj |<03><00>g}|}| }|
}|j|d|<00><00><>|r |jdj |<03><00>|S) z!Extract text lines from OCR data.<2E><><EFBFBD><EFBFBD><EFBFBD>r0r<>r<00> block_num<75>par_num<75>line_numrb)r<>rzr<>r<>rw) rr<><00>lines<65> current_line<6E> current_block<63> current_par<61>current_line_num<75>ir<69>r<>r<>s rr|z"DiagramAnalyzer._extract_ocr_lines<65>s<><00><00><12><05><19> <0C><1A> <0A><18> <0B><1D><18><16>s<EFBFBD>8<EFBFBD>F<EFBFBD>+<2B>,<2C>-<2D> 5<>A<EFBFBD><12>8<EFBFBD>F<EFBFBD>#<23>A<EFBFBD>&<26>'<27>1<EFBFBD>,<2C><18> <20><1B>-<2D>a<EFBFBD>0<>I<EFBFBD><1E>y<EFBFBD>)<29>!<21>,<2C>G<EFBFBD><1F>
<EFBFBD>+<2B>A<EFBFBD>.<2E>H<EFBFBD><19>]<5D>*<2A><17>;<3B>&<26><18>,<2C>,<2C><1F><19>L<EFBFBD>L<EFBFBD><13><18><18>,<2C>!7<>8<>!<21> <0C> )<29> <0A>%<25> <0B>#+<2B> <20> <18> <1F> <1F><08><16> 0<><11> 3<> 4<>' 5<>* <18> <11>L<EFBFBD>L<EFBFBD><13><18><18>,<2C>/<2F> 0<><14> rr<>c<00>F<00><06>|j\}}||z }|dkDry|dkryd|cxkrdkrnn|j|<01>ryy|jd d
<EFBFBD>j<00><00>t <00>fd <0B>d D<00><00>ry t <00>fd<0E>dD<00><00>ryt <00>fd<11>dD<00><00>ryy)z5Estimate diagram type based on image characteristics.r<><00> flowchartg<00>?<3F>vertical_hierarchy皙<79><E79A99><EFBFBD><EFBFBD><EFBFBD>?g333333<33>?<3F>circular_diagram<61>square_diagramrcrgc3<00>&<00>K<00>|]}|<01>v<00><01><00>
y<00>wrr8<00><03>.0<EFBFBD>wordrcs <20>r<00> <genexpr>z9DiagramAnalyzer._estimate_diagram_type.<locals>.<genexpr><3E>s<00><><00><><00>Q<>D<EFBFBD>t<EFBFBD>x<EFBFBD><1F>Q<><51><00>)<04>process<73>flow<6F>step<65>arrow<6F>process_diagramc3<00>&<00>K<00>|]}|<01>v<00><01><00>
y<00>wrr8r<>s <20>rr<>z9DiagramAnalyzer._estimate_diagram_type.<locals>.<genexpr><3E>s<00><><00><><00>P<>d<EFBFBD><14><18>!<21>P<>r<EFBFBD>)<03>system<65> component<6E>module<6C>system_diagramc3<00>&<00>K<00>|]}|<01>v<00><01><00>
y<00>wrr8r<>s <20>rr<>z9DiagramAnalyzer._estimate_diagram_type.<locals>.<genexpr><3E>s<00><><00><><00>Y<>d<EFBFBD><14><18>!<21>Y<>r<EFBFBD>)<04>data<74> information<6F>input<75>output<75> data_diagram<61>standard_diagram)r<><00>_has_circular_patternsrU<00>lower<65>any)rr<>r<>rYrZr\rcs @rr~z&DiagramAnalyzer._estimate_diagram_type<70>s<><00><><00><1D>
<EFBFBD>
<EFBFBD> <0A><05>v<EFBFBD><1C>v<EFBFBD>~<7E> <0C> <18>!<21> <1B><1E> <19>C<EFBFBD> <1F>'<27> <10>L<EFBFBD> '<27>C<EFBFBD> '<27><13>*<2A>*<2A>5<EFBFBD>1<>)<29>#<23><1C><<3C><<3C>
<EFBFBD>B<EFBFBD>/<2F>5<>5<>7<><08> <0E>Q<>,P<>Q<> Q<>$<24> <10>P<>.O<>P<> P<>#<23> <10>Y<>.X<>Y<> Y<>!<21>!rc<00><00>y)z2Check for circular patterns in image (simplified).Fr8)rr<>s rr<>z&DiagramAnalyzer._has_circular_patterns<6E>s<00><00>rc<00><><00>|jdd<02>}t|j<00><00>t|<02>gggd<03>}|r<>|j<00>}|D<00>cgc]'}|dj <00>s<01>t|<05>dkDs<01>&|<05><02>)}}t t |<06><00>dd|d<gd <09>}|D]=}tj||<02>} | D] }
|d
j|
d|
d d d <0A><03><00>"<00>?|Scc}w)z(Analyze content for themes and patterns.rcrg)<05>
word_count<EFBFBD>has_text<78>themes<65>entities<65> relationshipsrr<>Nr<4E>r<>)z(\w+)\s*->\s*(\w+)u(\w+)\s*→\s*(\w+)z(\w+)\s*to\s*(\w+)z(\w+)\s*from\s*(\w+)r<><00><00>
connection)r<00>target<65>type)
rUrzr{<00>bool<6F>isupper<65>list<73>set<65>re<72>findallr<6C>) rr<>rcrj<00>wordsr<73>r<><00>relationship_patterns<6E>pattern<72>matches<65>matchs rrz DiagramAnalyzer._analyze_content<6E>s<00><00><1B><<3C><<3C>
<EFBFBD>B<EFBFBD>/<2F><08><1E>h<EFBFBD>n<EFBFBD>n<EFBFBD>.<2E>/<2F><1C>X<EFBFBD><0E><18><1A><1F> 
<EFBFBD><18> <14><1C>N<EFBFBD>N<EFBFBD>$<24>E<EFBFBD>).<2E>V<><14>$<24>q<EFBFBD>'<27>/<2F>/<2F>2C<32><03>D<EFBFBD> <09>TU<54> <0A><04>V<>H<EFBFBD>V<>+/<2F><03>H<EFBFBD> <0A>+><3E>s<EFBFBD><02>+C<> <1C>Z<EFBFBD> (<28>%<0E> !<21>1<> <17><07><1C>*<2A>*<2A>W<EFBFBD>h<EFBFBD>7<><07>$<24><17>E<EFBFBD>$<24>_<EFBFBD>5<><<3C><<3C>"'<27><01>(<28>"'<27><01>(<28> ,<2C>><16><17><17> <17> <20><1F><>)Ws<00>C!<04>*C!<04>9C!r)r2r3r4r5rr6rrr<>r
rqr<>r<>r7ryrr|r~r<>rr8rrr:r:Ms<00><00>2<> <0B>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E> <0B>%<18><03>%<18><04>S<EFBFBD>#<23>X<EFBFBD><0E>%<18>N;<3B>U<EFBFBD>[<5B>[<5B>;<3B>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>;<3B>> <14>5<EFBFBD>;<3B>;<3B> <14>4<EFBFBD> <14><13>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E><13>U<EFBFBD><13> <15>4<EFBFBD><03>S<EFBFBD><08>><3E> <15>d<EFBFBD>3<EFBFBD>i<EFBFBD> <15>D"<22>E<EFBFBD>K<EFBFBD>K<EFBFBD>"<22>4<EFBFBD><03>S<EFBFBD><08>><3E>"<22>VY<56>"<22>6<15>E<EFBFBD>K<EFBFBD>K<EFBFBD><15>D<EFBFBD><15>
# <20><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E># <20>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD># rr:c
<00><><00>eZdZdZddeeeffd<04>Zddededee fd<08>Z
dd ed
e dee fd <0B>Z dd eeefd ed
e dee fd<0E>Z dedeefd<10>Zdedeefd<11>Zdee defd<14>Zdeeeffd<15>Zy)<17>MeaningKernelExtractorz&Extract meaning kernels from diagrams.Nr;c<00><00>|xsi|_t|<01>|_g|_dddddd<02>|_t
s|jdxxdz cc<t s|jdxxdz cc<ts|jdxxdz cc<yy)Nr)<05>pages_processed<65>diagrams_analyzed<65>kernels_extracted<65>errors<72>dependency_warningsr<73>r<>)r;r:<00>analyzer<65>kernels<6C>statsrkrr<00>PDF2IMAGE_AVAILABLErVs rrzMeaningKernelExtractor.__init__s<><00><00><1C>l<EFBFBD><02><04> <0B>'<27><06>/<2F><04> <0A>,.<2E><04> <0C> <20>!"<22>!"<22><17>#$<24> 
<EFBFBD><04>
<EFBFBD><1D> <10>J<EFBFBD>J<EFBFBD>,<2C> -<2D><11> 2<> -<2D>"<22> <10>J<EFBFBD>J<EFBFBD>,<2C> -<2D><11> 2<> -<2D>"<22> <10>J<EFBFBD>J<EFBFBD>,<2C> -<2D><11> 2<> -<2D>#r<00>pdf_path<74>
output_dirrc <00><><00>tsPtd<01>td<02>td<03>td<04>td<05>|jdxxdz cc<gSt|<01>}|j <00>s'td|<01><00><02>|jdxxdz cc<gStd |<01><00><02>|r t|<02>}n|j
|j <00>d
<EFBFBD>z }|jd d <0B> <0C> d dlm }||d<0F><10>}tdt|<05><00>d<12><03>g}t|<05>D]y\}} |dz}
td|
<EFBFBD>dt|<05><00><00><04>|d|
d<18>d<19>z } | j| <0B>|j| |
<EFBFBD>} |j| <0C>|jdxxdz cc<<00>{|j!||<03>|S#t$r1}td|<06><00><02>|jdxxdz cc<gcYd}~Sd}~wwxYw)z(Extract meaning kernels from a PDF file.z/Error: pdf2image is required for PDF processingz#Install with: pip install pdf2imagezSystem dependencies:z macOS: brew install popplerz, Ubuntu: sudo apt-get install poppler-utilsr<73>r<>zError: PDF not found: zProcessing PDF: <20>_kernelsT)<02>parents<74>exist_okr)<01>convert_from_pathi,)<01>dpiz
Converted z pages to imageszError converting PDF: NzProcessing page <20>/<2F>page_<65>03d<33>.pngr<67>)r<><00>printr<74>r<00>exists<74>parent<6E>stem<65>mkdir<69> pdf2imager<65>rzr}<00> enumerate<74>save<76>extract_from_image<67>extend<6E> _save_kernels) rr<>r<><00> output_pathr<68><00>imagesr<73><00> all_kernelsr<73>r<><00>page_num<75>temp_image_path<74> page_kernelss r<00>extract_from_pdfz'MeaningKernelExtractor.extract_from_pdf0s<><00><00>"<22> <11>C<> D<> <11>7<> 8<> <11>(<28> )<29> <11>1<> 2<> <11>@<40> A<> <10>J<EFBFBD>J<EFBFBD>x<EFBFBD> <20>A<EFBFBD> %<25> <20><15>I<EFBFBD><17><08>><3E><08><17><EFBFBD><EFBFBD> <20> <11>*<2A>8<EFBFBD>*<2A>5<> 6<> <10>J<EFBFBD>J<EFBFBD>x<EFBFBD> <20>A<EFBFBD> %<25> <20><15>I<EFBFBD> <0A> <20><18>
<EFBFBD>+<2B>,<2C> <16><1E>z<EFBFBD>*<2A>K<EFBFBD>"<22>/<2F>/<2F>x<EFBFBD>}<7D>}<7D>o<EFBFBD>X<EFBFBD>,F<>F<>K<EFBFBD><13><19><19>$<24><14><19>6<> <16> 3<>&<26>x<EFBFBD>S<EFBFBD>9<>F<EFBFBD> <11>J<EFBFBD>s<EFBFBD>6<EFBFBD>{<7B>m<EFBFBD>+;<3B><<3C> =<3D><19> <0B>!<21>&<26>)<29> /<2F>H<EFBFBD>A<EFBFBD>u<EFBFBD><18>1<EFBFBD>u<EFBFBD>H<EFBFBD> <11>$<24>X<EFBFBD>J<EFBFBD>a<EFBFBD><03>F<EFBFBD> <0B>}<7D>=<3D> ><3E>*<2A>e<EFBFBD>H<EFBFBD>S<EFBFBD>><3E><14>,F<>F<>O<EFBFBD> <11>J<EFBFBD>J<EFBFBD><EFBFBD> '<27> <20>2<>2<>?<3F>H<EFBFBD>M<>L<EFBFBD> <17> <1E> <1E>|<7C> ,<2C> <10>J<EFBFBD>J<EFBFBD>(<28> )<29>Q<EFBFBD> .<2E> )<29> /<2F> <0A><1A><1A>;<3B> <0B>4<><1A><1A><>1<19> <16> <11>*<2A>1<EFBFBD>#<23>.<2E> /<2F> <10>J<EFBFBD>J<EFBFBD>x<EFBFBD> <20>A<EFBFBD> %<25> <20><15>I<EFBFBD><49> <16>s<00>%(F*<00>* G$<03>3&G<03>G$<03>G$rWrc<00><><00>td|<01><00><02> |jjt|<01><00>}|j |t|<01>|<02>}|j
dxxdz cc<|j
dxxt|<05>z cc<|S#t$r1}td|<04><00><02>|j
dxxdz cc<gcYd}~Sd}~wwxYw)z&Extract meaning kernels from an image.zProcessing image: zError analyzing image: r<>r<>Nr<4E>r<>)rr<>r<>r6r}r<><00>_generate_kernelsrz)rrWrr<>r<>r<>s rr z)MeaningKernelExtractor.extract_from_imageis<><00><00> <0A>"<22>:<3A>,<2C>/<2F>0<> <16><1B>}<7D>}<7D>2<>2<>3<EFBFBD>z<EFBFBD>?<3F>C<>H<EFBFBD><17>(<28>(<28><18>3<EFBFBD>z<EFBFBD>?<3F>H<EFBFBD>M<><07> <0C>
<EFBFBD>
<EFBFBD>&<26>'<27>1<EFBFBD>,<2C>'<27> <0C>
<EFBFBD>
<EFBFBD>&<26>'<27>3<EFBFBD>w<EFBFBD><<3C>7<>'<27><16><0E><><19> <16> <11>+<2B>A<EFBFBD>3<EFBFBD>/<2F> 0<> <10>J<EFBFBD>J<EFBFBD>x<EFBFBD> <20>A<EFBFBD> %<25> <20><15>I<EFBFBD><49> <16>s<00>$B <00> C<03>&B><03>8C<03>>Cr<>rc<00>\<00>g}dtj<00>jd<02><00><00>}|r|d|<03><00>z }|jd<04>rxt |<05>d<05>|d|d|jdd<08>|jd d
<EFBFBD>t |jd g<00><00>|jd d <0A>d<0E>gd<0F><01><10>}|j |<06>d|jd d <0A><00>d<12>}|d|dd<00>d|dd<00>d<12>z }|d|dd<1A>d<12>z }|jdi<00>}|jd<1C>r|dz }n+|jd<1E>r|dd
} |d| d <00>d!| d"<00>d#<23>z }t |<05>d$<24>||d%d&|d|d|jd d <0A>|d'<27>gd(<28><01><10>}
|j |
<EFBFBD>d)|jd d <0A><00>d*<2A>} |jd<04>r| d+|dd,d-<00>d.<2E>z } n| d/z } |jd0i<00>} | jd1<64>r| d2d3j| d1d,d4<00><00>d5<64>z } t |<05>d6<64>| |d7d8t|jd<04><00>t |jdd9<64><00>| jd1g<00>| jd:g<00>d;<3B>gd<<3C><01><10>} |j | <0A>|jd<04>rqt |d<00>d=kDr`|j|d<00>}|rJt |<05>d><3E>||d?d@dAt |d<00>|j|d<00>dB<64>gdC<64><01><10>}|j |<0F>|jd0i<00>} | jd:<3A>rc| d:}dDt |<10><00>dE<64>}|d,dFD]}||dG<00>dH|dI<00>d<12>z }<11>t |<05>dJ<64>||dKdLt |<10>|dM<64>gdN<64><01><10>}|j |<13>|jj|<04>|S)Oz'Generate meaning kernels from analysis.<2E>kernel_z %Y%m%d_%H%M%S<>_prc<00>_textr0rdr1rerrfri<00>unknown)r<><00>
line_countri)<03>ocrr0<00> extracted)r rrrrrrzDiagram type: z. z Dimensions: r[rYr<>rZzAspect ratio: r\<00>.2fr`r<>zGrayscale image. r<>zDominant color: RGBr<42>z (r<>z%). <20>
_structure<EFBFBD> structureg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)r[r\rir`)r"<00>layout<75>visualzResearch diagram analysis: z
diagram. zContains text: N<><4E>r.zNo text detected.rjr<>z Entities: <20>, r<><00>.<2E>_summary<72>summarygffffff<66>?rgr<>)r<><00> text_lengthr<68>r<>)r)<00>overviewr<77><00>2<00>_philosophical<61> philosophicalg333333<33>?<3F>keyword_analysis)<03>extraction_method<6F>source_text_length<74>keywords_found)r.rA<00>
conceptualz!Semantic relationships detected: z connections. <20>ru → r<><00> _semantic<69>semanticr<63>)<02>relationship_countr<74>)r6r<><00> connections) rr<00>strftimerUr rzr<>rwr<><00>_extract_philosophical_content<6E>_find_philosophical_keywordsr<73>r )rr<>rrr<><00>base_id<69> text_kernel<65>structure_contentr`<00> top_color<6F>structure_kernelr)rj<00>summary_kernel<65>philosophical_content<6E>philosophical_kernelr<6C><00>semantic_content<6E>rel<65>semantic_kernels rrz(MeaningKernelExtractor._generate_kernels}s<><00><00><14><07><1C>H<EFBFBD>L<EFBFBD>L<EFBFBD>N<EFBFBD>3<>3<>O<EFBFBD>D<>E<>F<><07> <13> <13><12>H<EFBFBD>:<3A><EFBFBD> &<26>G<EFBFBD> <14><<3C><<3C>
<EFBFBD> #<23>'<27>$<24>I<EFBFBD>U<EFBFBD>+<2B> <20><1A>,<2C><1D>"<22>#<23><<3C><<3C>(8<>#<23>><3E>"*<2A>,<2C>,<2C>/?<3F><11>"C<>"%<25>h<EFBFBD>l<EFBFBD>l<EFBFBD>;<3B><02>&C<>"D<>$,<2C>L<EFBFBD>L<EFBFBD><1E><19>$K<><12>
2<> <0E>K<EFBFBD> <14>N<EFBFBD>N<EFBFBD>;<3B> '<27>-<2D>X<EFBFBD>\<5C>\<5C>.<2E>)<29>-T<>,U<>UW<55>X<><19><19>|<7C>H<EFBFBD>\<5C>,B<>7<EFBFBD>,K<>+L<>A<EFBFBD>h<EFBFBD>Wc<57>Nd<4E>em<65>Nn<4E>Mo<4D>oq<6F>r<>r<><19><19>~<7E>h<EFBFBD>~<7E>.F<>s<EFBFBD>-K<>2<EFBFBD>N<>N<><19>"<22><1C><1C>&6<><02>;<3B><0E> <19> <1D> <1D>n<EFBFBD> -<2D> <1D>!4<> 4<> <1D> <1B> <1F> <1F> 1<> 2<>&<26>'8<>9<>!<21><<3C>I<EFBFBD> <1D>#6<>y<EFBFBD><17>7I<37>6J<36>"<22>Y<EFBFBD>Wc<57>Md<4D>Le<4C>ei<65>!j<> j<> <1D>(<28> <20> <09><1A>,<2C>%<25><19>#<23><1A>&<26>|<7C>4<> (<28><1E> 8<> (<28> <0C> <0C>^<5E>Y<EFBFBD> G<>"0<> <0E> 3<> 
<EFBFBD><18> <10><0E><0E>'<27>(<28>0<><08> <0C> <0C>^<5E>Y<EFBFBD>0W<30>/X<>Xb<58>c<><07> <13><<3C><<3C>
<EFBFBD> #<23> <13><1F><18>*<2A>)=<3D>d<EFBFBD>s<EFBFBD>)C<>(D<>C<EFBFBD>H<> H<>G<EFBFBD> <13>*<2A> *<2A>G<EFBFBD>$<24><<3C><<3C>(:<3A>B<EFBFBD>?<3F><18> <1B> <1F> <1F>
<EFBFBD> +<2B> <13><1B>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>/?<3F>
<EFBFBD>/K<>B<EFBFBD>Q<EFBFBD>/O<>%P<>$Q<>QR<51>S<> S<>G<EFBFBD>&<26> <20> <09><18>*<2A><1B><19>!<21><1A> <20><18><1C><1C>j<EFBFBD>!9<>:<3A>"<22>8<EFBFBD><<3C><<3C>
<EFBFBD>B<EFBFBD>#?<3F>@<40>,<2C>0<>0<><1A>R<EFBFBD>@<40>!1<>!5<>!5<>o<EFBFBD>r<EFBFBD>!J<> <0E> 5<> 
<EFBFBD><0E> <10><0E><0E>~<7E>&<26> <14><<3C><<3C>
<EFBFBD> #<23><03>H<EFBFBD>Z<EFBFBD>,@<40>(A<>B<EFBFBD>(F<>$(<28>$G<>$G<><08>Q[<5B>H\<5C>$]<5D> !<21>$<24>'4<>!(<28> <09><1E>8<>1<>!<21> /<2F>"<22>-?<3F>.1<EFBFBD>(<28>:<3A>2F<32>.G<>*.<2E>*K<>*K<>H<EFBFBD>U_<55>L`<60>*a<><16>
D<01> (<12>$<24><18><0E><0E>3<>4<>$<24><<3C><<3C>(:<3A>B<EFBFBD>?<3F><18> <1B> <1F> <1F><0F> 0<>,<2C>_<EFBFBD>=<3D>M<EFBFBD>!B<>3<EFBFBD>}<7D>CU<43>BV<42>Vd<56>e<> <1C>$<24>R<EFBFBD>a<EFBFBD>(<28> M<01><03> <20>s<EFBFBD>8<EFBFBD>}<7D>o<EFBFBD>U<EFBFBD>3<EFBFBD>x<EFBFBD>=<3D>/<2F><12>$L<>L<> <20> M<01>,<2C>$<24>I<EFBFBD>Y<EFBFBD>/<2F>(<28><1D>&<26><1E>*-<2D>m<EFBFBD>*<<3C>%2<><12>B<01> <0E>O<EFBFBD> <14>N<EFBFBD>N<EFBFBD>?<3F> +<2B> <0A> <0C> <0C><1B><1B>G<EFBFBD>$<24><16>rr0c<00>`<00>|j|<01>}|rddj|<02><00>d|d<00>d<05>Sy)z(Extract philosophical content from text.zPhilosophical themes detected: r&z#. Source text explores concepts of rr'N)r;rw)rr0<00>found_keywordss rr:z5MeaningKernelExtractor._extract_philosophical_content<6E>sa<00><00><1E>:<3A>:<3A>4<EFBFBD>@<40><0E> <19>4<>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>~<7E>5N<35>4O<34>PJ<02>KY<02>Z[<02>K\<02>J]<02>]^<02>_<02> _<02>rc<00><><00>|j<00>}g}|jjD]}||vs<01>|j|<04><00>|S)z$Find philosophical keywords in text.)r<>r<>r=r<>)rr0<00>
text_lowerrH<00>keywords rr;z3MeaningKernelExtractor._find_philosophical_keywordssI<00><00><19>Z<EFBFBD>Z<EFBFBD>\<5C>
<EFBFBD><1B><0E><1B>}<7D>}<7D>;<3B>;<3B> /<2F>G<EFBFBD><16>*<2A>$<24><1E>%<25>%<25>g<EFBFBD>.<2E> /<2F><1E>rr<>rc
<00><00>|s td<01>y|dz }|D<00>cgc]}|j<00><00><02>}}t|d<04>5}tj||d<05><06>ddd<02>|dz }t|d<04>5}|j d<08>|j d t j<00>j<00><00>d
<EFBFBD><03>|j d t|<01><00>d <0C><03>i}|D]-} |j| jg<00>j| <09><00>/|j<00>D<00>]<\}
} |j d |
j<00><00>dt| <0B><00>d<0F><05>| D<00>]} |j d| j<00>d
<EFBFBD><03>|j d| j <00>d
<EFBFBD><03>|j d| j"d<13>d
<EFBFBD><03>|j d| j$<00>d
<EFBFBD><03>|j ddj'| j(<00><00>d
<EFBFBD><03>|j d| j*<00>d
<EFBFBD><03>|j dtj,| j.d<05><06><00>d <0C><03><00><01><00><01>? ddd<02>|dz } t| d<04>5}tj|j0|d<05><06>ddd<02>tdt|<01><00>d|<02><00><04>td|<03><00><02>td|<07><00><02>td| <0C><00><02>ycc}w#1swY<00><02><>xYw#1swY<00><>xYw#1swY<00>lxYw)zSave kernels to files.zNo kernels to saveNzmeaning_kernels.json<6F>wr<77>)<01>indentzmeaning_kernels.mdz$# Meaning Kernels Extraction Report
z Generated: <20>
zTotal kernels: z
z## z
Kernels (z)
z### z- **Source**: z- **Confidence**: r z- **Timestamp**: z - **Tags**: r&z- **Content**: z- **Metadata**: zextraction_stats.jsonzSaved z kernels to z
- JSON: z - Markdown: z - Statistics: )rr+rm<00>json<6F>dump<6D>writerrrrz<00>
setdefaultrr<><00>items<6D>titler rrrrwrr<00>dumpsrr<>) rr<>r<00> json_path<74>k<> kernels_data<74>f<>md_path<74>by_type<70>kernelr<00> type_kernels<6C>
stats_paths rrz$MeaningKernelExtractor._save_kernelss<><00><00><16> <11>&<26> '<27> <12> <20>"8<>8<> <09>-4<>5<><01><01> <09> <09> <0B>5<> <0C>5<> <11>)<29>S<EFBFBD> !<21> 1<>Q<EFBFBD> <10>I<EFBFBD>I<EFBFBD>l<EFBFBD>A<EFBFBD>a<EFBFBD> 0<> 1<><1E> 4<>4<><07> <11>'<27>3<EFBFBD> <1F> \<01>1<EFBFBD> <0A>G<EFBFBD>G<EFBFBD>;<3B> =<3D> <0A>G<EFBFBD>G<EFBFBD>k<EFBFBD>(<28>,<2C>,<2C>.<2E>":<3A>":<3A>"<<3C>!=<3D>R<EFBFBD>@<40> A<> <0A>G<EFBFBD>G<EFBFBD>o<EFBFBD>c<EFBFBD>'<27>l<EFBFBD>^<5E>4<EFBFBD>8<> 9<><19>G<EFBFBD>!<21> J<01><06><17>"<22>"<22>6<EFBFBD>#5<>#5<>r<EFBFBD>:<3A>A<>A<>&<26>I<> J<01>.5<EFBFBD>]<5D>]<5D>_<EFBFBD> \<01>)<29> <0B>\<5C><11><07><07>#<23>k<EFBFBD>/<2F>/<2F>1<>2<>*<2A>S<EFBFBD><1C>=N<><O<>u<EFBFBD>U<>V<>*<2A>\<01>F<EFBFBD><15>G<EFBFBD>G<EFBFBD>d<EFBFBD>6<EFBFBD>#3<>#3<>"4<>B<EFBFBD>7<>8<><15>G<EFBFBD>G<EFBFBD>n<EFBFBD>V<EFBFBD>]<5D>]<5D>O<EFBFBD>2<EFBFBD>><3E>?<3F><15>G<EFBFBD>G<EFBFBD>0<><16>1B<31>1B<31>3<EFBFBD>0G<30>r<EFBFBD>J<>K<><15>G<EFBFBD>G<EFBFBD>/<2F><06>0@<40>0@<40>/A<><12>D<>E<><15>G<EFBFBD>G<EFBFBD>l<EFBFBD>4<EFBFBD>9<EFBFBD>9<EFBFBD>V<EFBFBD>[<5B>[<5B>+A<>*B<>"<22>E<>F<><15>G<EFBFBD>G<EFBFBD>o<EFBFBD>f<EFBFBD>n<EFBFBD>n<EFBFBD>-=<3D>R<EFBFBD>@<40>A<><15>G<EFBFBD>G<EFBFBD>.<2E>t<EFBFBD>z<EFBFBD>z<EFBFBD>&<26>/<2F>/<2F>RS<52>/T<>.U<>UY<55>Z<>[<5B>\<01> \<01> \<01>,!<21>#:<3A>:<3A>
<EFBFBD> <11>*<2A>c<EFBFBD> "<22> /<2F>a<EFBFBD> <10>I<EFBFBD>I<EFBFBD>d<EFBFBD>j<EFBFBD>j<EFBFBD>!<21>A<EFBFBD> .<2E> /<2F> <0E><06>s<EFBFBD>7<EFBFBD>|<7C>n<EFBFBD>L<EFBFBD><1B> <0A>><3E>?<3F> <0A>
<EFBFBD>9<EFBFBD>+<2B>&<26>'<27> <0A><0E>w<EFBFBD>i<EFBFBD>(<28>)<29> <0A> <20><1A> <0C>-<2D>.<2E><>I6<> 1<> 1<><31>
 \<01> \<01><>. /<2F> /<2F>s)<00>K"<04>K'<03>/G)K4<03>2#L<03>'K1<07>4K=<07>L c<00>6<00>|jj<00>S)zGet extraction statistics.)r<><00>copyr*s r<00> get_statsz MeaningKernelExtractor.get_statsAs<00><00><13>z<EFBFBD>z<EFBFBD><EFBFBD><EFBFBD> <20> rr)r2r3r4r5rr6rrrr rr<>r rrr:r;rrrbr8rrr<>r<>s<><00><00>0<>3<>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>3<>(7<1B><13>7<1B>#<23>7<1B><14>m<EFBFBD>I\<5C>7<1B>r<17>S<EFBFBD><17>C<EFBFBD><17>4<EFBFBD>P]<5D>K^<5E><17>(<17>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E><17>#<23><17>QT<51><17>`d<>er<65>`s<><17>B<14>3<EFBFBD><14>8<EFBFBD>C<EFBFBD>=<3D><14> <1E><13> <1E><14>c<EFBFBD><19> <1E>,/<2F>T<EFBFBD>-<2D>%8<>,/<2F>t<EFBFBD>,/<2F>\!<21>4<EFBFBD><03>S<EFBFBD><08>><3E>!rr<>c<00>0<00>tjd<01><02>}|jdd<04><05>|jddd<08><05>|jd d
d <0B><05>|jd d dd<0F><10>|j<00>}i}|jr3t |j<00>5}t j|<03>}ddd<11>t|<02>}t|j<00>}|j<00>r<>|jj<00>dk(r|j||j<00>}<06>n2|jj<00>dvr|j!|<05>}<06>nt#d|j<00><00><02>t%j&d<15>n<>|j)<00>r<>g}|j+<00>D]<5D>}|jj<00>dk(r.|j||j<00>}|j-|<06><00>N|jj<00>dvs<01>k|j!|<08>}|j-|<06><00><>n#t#d|<05><00><02>t%j&d<15>|j/<00>} t#d<17>t#d<18>t#d<19>t#d| d<00><00><02>t#d| d<00><00><02>t#d| d<00><00><02>t#d | d!<00><00><02>t#d"| d#<00><00><02>t#d<19>t%j&| d!d$k(rd$<24>yd<15>y#1swY<00><02>]xYw)%zCommand line interface.z.Extract meaning kernels from research diagrams)<01> descriptionr<6E>z!Input PDF or image file/directory)<01>helpz-oz--outputzOutput directoryz-cz--configzConfiguration file (JSON)z-vz --verbose<73>
store_truezVerbose output)<02>actionreNz.pdf)rz.jpgz.jpegz.tiffz.bmpzUnsupported file type: r<>zInput not found: z3
==================================================zEXTRACTION SUMMARYz2==================================================zPages processed: r<>zDiagrams analyzed: r<>zKernels extracted: r<>zErrors: r<>zDependency warnings: r<>r)<18>argparse<73>ArgumentParser<65> add_argument<6E>
parse_argsr;rmrP<00>loadr<64>rr<><00>is_file<6C>suffixr<78>rr<>r r<00>sys<79>exit<69>is_dir<69>iterdirr rb)
<EFBFBD>parser<65>argsr;rZ<00> extractor<6F>
input_pathr<EFBFBD>r<00> file_pathr<68>s
r<00>mainrxEs<><00><00> <15> $<24> $<24>1a<31> b<>F<EFBFBD>
<EFBFBD><17><17><07>&I<><17>J<>
<EFBFBD><17><17><04>j<EFBFBD>/A<><17>B<>
<EFBFBD><17><17><04>j<EFBFBD>/J<><17>K<>
<EFBFBD><17><17><04>k<EFBFBD>,<2C>EU<45><17>V<> <11> <1C> <1C> <1E>D<EFBFBD><10>F<EFBFBD> <0B>{<7B>{<7B> <11>$<24>+<2B>+<2B> <1E> "<22>!<21><19>Y<EFBFBD>Y<EFBFBD>q<EFBFBD>\<5C>F<EFBFBD> "<22>'<27>v<EFBFBD>.<2E>I<EFBFBD><16>d<EFBFBD>j<EFBFBD>j<EFBFBD>!<21>J<EFBFBD><11><19><19><1B> <15> <1C> <1C> "<22> "<22> $<24><06> .<2E><1F>0<>0<><1A>T<EFBFBD>[<5B>[<5B>I<>G<EFBFBD> <17> <1E> <1E> $<24> $<24> &<26>*T<> T<><1F>2<>2<>:<3A>><3E>G<EFBFBD> <11>+<2B>J<EFBFBD>,=<3D>,=<3D>+><3E>?<3F> @<40> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD> <13> <1A> <1A> <1C><18> <0B>#<23>+<2B>+<2B>-<2D> ,<2C>I<EFBFBD><18><1F><1F>%<25>%<25>'<27>6<EFBFBD>1<>#<23>4<>4<>Y<EFBFBD><04> <0B> <0B>L<><07><1B>"<22>"<22>7<EFBFBD>+<2B><1A>!<21>!<21>'<27>'<27>)<29>-W<>W<>#<23>6<>6<>y<EFBFBD>A<><07><1B>"<22>"<22>7<EFBFBD>+<2B>  ,<2C> <0E>!<21>*<2A><1C>.<2E>/<2F> <0B><08><08><11> <0B> <16> <1F> <1F> !<21>E<EFBFBD> <09>-<2D><18> <09>
<1E><1F> <09>&<26>M<EFBFBD> <09> <1D>e<EFBFBD>$5<>6<>7<>
8<EFBFBD>9<> <09> <1F><05>&9<> :<3A>;<3B>
<<3C>=<3D> <09> <1F><05>&9<> :<3A>;<3B>
<<3C>=<3D> <09>H<EFBFBD>U<EFBFBD>8<EFBFBD>_<EFBFBD>%<25>
&<26>'<27> <09> !<21>%<25>(=<3D>"><3E>!?<3F>
@<40>A<> <09>&<26>M<EFBFBD><08>H<EFBFBD>H<EFBFBD>%<25><08>/<2F>Q<EFBFBD>&<26>Q<EFBFBD>.<2E>A<EFBFBD>.<2E>Y "<22> "<22>s <00>L <03> L<07>__main__)r5rnrorPrhr<><00>pathlibrr<00>typingrrrrr r#<00>PILr
rkrlrrsrrr r<>r r:r<>rxr2r8rr<00><module>r}s<><00><01><04>

<EFBFBD>
<EFBFBD> <0B><0F> <09><18><1D>3<>3<><0E>J<01><19><18>M<EFBFBD>
W<01><16><1E><17>
S<01><14><1E><17>
$Y<01>$Y<01>LJ <20>J <20>Xj!<21>j!<21>X 9/<2F>v <0C>z<EFBFBD><19><08>F<EFBFBD><1A><>W<13>J<01><19>M<EFBFBD> <09>
H<EFBFBD>I<>J<01><><13>W<01><1F><17> <09>
U<EFBFBD>V<>W<01><><13>S<01><1F><17> <09>
Q<EFBFBD>R<>S<01>s4<00>A;<00>B<00>B%<00>;B <03> B <03>B"<03>!B"<03>%B7<03>6B7