ó
    6ÔÆj  ã                   óÊ   • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  \	" \
5      R                  5       R                  r\S-  r0 r0 rS
S jrS rSS jr/ SQr/ SQrS	 rg)é    N)ÚPathÚsourcesc                 ó^  • [        U 5      n [        R                  " U R                  5       5      R	                  5       [
        [        U 5      '   [        R                  R                  R                  [        U 5      SS9nU(       a  SOSUR                  l        UR                  X5        [        R                  " UR                   S S  [        R"                  S9R%                  XS5      S S 2S S 2S S24   R'                  5       n[        R                  R                  R)                  U5        U$ )NF)Úcheck_existingÚsRGBú	Non-Color)Údtypeé   é   )r   ÚhashlibÚsha256Ú
read_bytesÚ	hexdigestÚ
PROVENANCEÚstrÚbpyÚdataÚimagesÚloadÚcolorspace_settingsÚnameÚscaleÚnpÚarrayÚpixelsÚfloat32ÚreshapeÚcopyÚremove)ÚpathÚsizeÚcolorÚimÚas        Ú./root/fal-author/medieval-atom-kit-v1/shelf.pyÚ
read_imager&      sà   € Ü
ˆ4ƒj€¤w§~¢~°d·o±oÓ6GÓ'H×'RÑ'RÓ'T”œC ›IÑ&Ü‡H�H‡O�O×Ñœ˜T›°%ÐÐ8€Þ',™V°+€×ÑÔØ‡�ˆ$Ô”r—x’x §	¡	©! ´2·:±:Ñ>×FÑFÀtÐQRÓSÒTUÒVWÐXZÐYZÐXZÐTZÑ[×`Ñ`Ób�QÔcf×ckÑck×crÑcr×cyÑcyÐz|Ôc}ð  FGð  Gó    c           	      óÖ  • U R                   u  pn[        R                  " U 5      nU SSS2SS24   U SSS2SS24   -
  USSS2SS24'   USSS2SS24   * USSS2SS24'   USS2SSS24==   U SS2SSS24   U SS2SSS24   -
  -  ss'   USS2SSS24==   U SS2SSS24   U SS2SSS24   -
  -  ss'   [        R                  " [        R                  " U5      [        R                  " U5      SS9u  pVS[        R
                  " S[        R                  -  U-  U-  5      -  S[        R
                  " S[        R                  -  U-  U-  5      -  -   S-
  nSUS	'   [        R                  R                  US
S9USS2SS2S4   -  nSUSSSS24'   U [        R                  R                  US
S9R                  -
  n	S
 Hq  n
[        R                  " U	SU
5      o»S   US   -
  S-  n[        S5       H:  nSUS-  -
  S-  SSU-  S-  -   -  oëU==   XÎ-  -  ss'   USU-
  ==   XÎ-  -  ss'   M<     Ms     [        R                  " U	SS5      R                  [        R                  5      $ )z­Moisan periodic-plus-smooth decomposition: remove only nonperiodic low frequencies.
Then match the outer texels exactly with a narrow cubic correction (no reflected tiles).
éÿÿÿÿNr   Úij)Úindexingé   r
   é   )r   r   ©r   r-   )Úaxesç      à?)Úshaper   Ú
zeros_likeÚmeshgridÚarangeÚcosÚpiÚfftÚfft2Úifft2ÚrealÚswapaxesÚrangeÚclipÚastyper   )r$   ÚhÚwÚcÚbÚyyÚxxÚdenÚfÚoutÚaxisÚtÚdeltaÚiÚweights                  r%   ÚperiodicrM      s&  € ð 	‡w�w�€€Q”—’˜qÓ!ˆqØ
ˆBŠq’ˆF‰)�A�ašš!�e‘HÑ
€€1‚Q‚q€5�¨¨!ªAªa¨%© y˜Q˜r¢!¢A˜v™YØ‚1€Q‚q€5ƒˆ1ŠQˆr’!ˆV‰9�Q’q˜š1�u‘XÑÑƒ˜a¢ "¢Q ›i¨ª1¨R²¨6©°1²Q°qº°U±8Ñ);Ñ;›iÜ	‡{‚{”2—9’9˜Q“<¤§	¢	¨!£°dÑ;�€Ø„r‡v‚vˆa”—‘‰g�b‰j˜‰lÓÑ˜AœbŸfšf Q¤r§u¡u¡W¨R¡Z°¡\Ó2Ñ2Ñ2°1Ñ4€¸a°S¸±XÜ‡6�6‡;�;ˆq�e€;Ð˜S¢¢1 T ™]Ñ*€°A¨1¨Q¨q²¨U©8Ø„r‡v�v‡|�|�A˜5€|Ð!×&Ñ&Ñ&€Û€TÜ‡K‚K��A�dÓ€! R¡5¨¨1©¡:¨r¡/˜EÜ�Ž8€aØˆQˆq‰S‰5�1‰*�a˜˜!™˜A™‘gÑ
€6 ›t U¡\Ñ1›t°!°B°q±D³'¸5¹<Ñ2Gµ'ó ñ ô 	�Š��A�aÓ×Ñ¤§
¡
Ó+Ð+r'   c                 ó‚  ^• U R                   R                  SSS9  UR                  S S u  pEUR                  S:X  a   [        R
                  " US S 2S S 2S 4   SSS9n[        R                  R                  R                  U R                  XTSSS9nU(       a  SOS	UR                  l        [        R                  " U[        R                  " XES
4[        R                  5      4SS9R!                  [        R                  5      nUR"                  R%                  UR'                  5       5        [)        U 5      Ul        SUl        UR/                  5         [        R                  R                  R1                  U5        U(       a¸  SS Km[        R4                  " US S 2S S 2S4   SS
5      S-  S-   R!                  S5      S S S2   nU4S jn	SR7                  S U 5       5      n
U R9                  SU	" S[:        R<                  " SXTSSSSS5      5      -   U	" STR?                  U
S5      5      -   U	" SS5      -   5        [A        [C        [E        US   US   -
  5      RC                  5       [E        US S 2S4   US S 2S4   -
  5      RC                  5       5      5      XT/S.[F        [)        U RI                  [J        5      5      '   g )NT)ÚparentsÚexist_okr,   r   ©rH   F)ÚwidthÚheightÚalphaÚfloat_bufferr   r   r-   ÚPNGr   iÿÿ  r0   z>u2r)   c                 ó¨   >• [         R                  " S[        U5      5      U -   U-   [         R                  " STR                  X-   5      S-  5      -   $ )Nz>Il   ÿÿ )ÚstructÚpackÚlenÚcrc32)Útagr   Úzlibs     €r%   ÚchunkÚsave_image.<locals>.chunk(   sG   ø€ œVŸ[š[¨¬c°$«iÓ8¸Ñ<¸TÑAÄ&Ç+Â+ÈdÐSW×S]ÑS]Ð^aÑ^fÓSgÐhrÑSrÓBsÑsÐsr'   r'   c              3   óH   #   • U  H  nS UR                  5       -   v •  M     g7f)ó    N)Útobytes)Ú.0Úrows     r%   Ú	<genexpr>Úsave_image.<locals>.<genexpr>)   s   é € Ð3ªd sˆu�S—[‘[“]Ö"ªdùs   ‚ "s   ‰PNG

s   IHDRz>IIBBBBBé   s   IDATé	   s   IEND)Úedge_max_absr!   )&ÚparentÚmkdirr1   Úndimr   Úrepeatr   r   r   ÚnewÚstemr   r   ÚconcatenateÚonesr   r>   r   Úforeach_setÚravelr   Úfilepath_rawÚfile_formatÚsaver   r]   r=   ÚjoinÚwrite_bytesrX   rY   ÚcompressÚfloatÚmaxÚabsÚseamsÚrelative_toÚROOT)r    r$   r"   Úgreyr?   r@   r#   ÚrgbaÚrowsr^   Úrawr]   s              @r%   Ú
save_imager„      s]  ø€ Ø‡�×Ñ˜4¨ÐÑ.°1·7±7¸2¸A°;©s¨qØ‡F�FˆAƒI”—	’	˜!šAša ˜H™+ a¨QÑ/ˆaÜ‡H�H‡O�O×Ñ˜Ÿ	™	¨¸ÈEÐÐR€Þ',™V°+€×ÑÔÜ‡n‚n�aœŸš  Q ¬¯
©
Ó3Ð4¸!Ñ<×CÑCÄBÇJÁJÓO€Ø‡�×Ñ�t—z‘z“|Ô$´S¸³Y R¤_Èe¸r¼~ÐTV×T[ÑT[ÔT]Ô^a×^fÑ^f×^mÑ^m×^tÑ^tÐuwÔ^xæÛÜ
�Š�’!’A�a�%‘˜˜1Ó˜eÑ# BÑ&×.Ñ.¨uÓ5±d¸°dÑ;€$ÝsØ	‡h�hÑ3©dÓ3Ó3€#Ø×ÑÐ'©¨g´f·k²kÀ*ÈQÐQSÐTUÐVWÐXYÐZ[Ó6\Ó(]Ñ]Ñ^cÐdkÐlp×lyÑlyÐz}Ð~ó  mAó  _Bñ  Bñ  CHð  IPð  QTó  CUñ  Uô  VÜ49¼#¼cÀ!ÀAÁ$ÀqÈÁuÁ*»o×>QÑ>QÓ>SÔTWÐXYÒZ[Ð\]ÐZ]ÑX^Ð_`ÒabÐceÐaeÑ_fÑXfÓTg×TkÑTkÓTmÓ:nÓ4oÐxyÐw|Ñ$}„„sˆ4×ÑœDÓ!Ó"Ò#r'   )ÚRubble_stoneÚRubble_stone_darkÚ	Oak_frameÚOak_frame_greyÚPlaster_ochreÚPlaster_whiteÚPlaster_pinkÚ	Clay_tileÚClay_tile_darkÚDressed_limestoneÚWrought_ironÚLeaded_glassÚ
Door_paintÚ
Sign_paint)ç      ü?r“   r-   r-   ç      ø?r”   r”   çÍÌÌÌÌÌä?r•   gš™™™™™ù?r-   r-   r-   r-   c                  óê  • / n 0 nS[         R                  ;   Gaº  [        S-  R                  5       (       Ga�  [        R
                  " [        S-  R                  5       5      S   n[         GHa  nX   S   R                  5        VVs0 s H  u  p4U[        [        U-  SUS:H  5      _M     nnn[        R                  R                  R                  U5      nSUl        UR                  R                   R#                  S5      n/ [%        [&        US   R)                  S	S
95      QSP7Ul        UR*                  UR,                  S   l        ['        US   S S 2S S 2S4   R)                  5       5      UR,                  S   l        ['        US   S S 2S S 2S4   R)                  5       5      UR,                  S   l        U R1                  U5        GMd     X4$ [3        [        5       GH’  u  p‚US:  a  SOSn	US:  a  Sn
OUS;   a  Sn
OUS;   a  Sn
OUS:X  a  Sn
OSn
0 nS GHì  u  p¼[5        [6        R9                  U
 SU S35      5      n[        XÙUS:H  5      nUS;   a9  [:        R<                  " US5      R?                  5       nUS:X  a  US S 2S S 2/ SQ4   nUR)                  SS
9nUS:X  Ga  US:  a9  US S 2S S 2S 4   S -  S!-   [:        R@                  " / S"Q5      -  oîUS:X  a  S#OS-  nGO�US$;   a7  US S 2S S 2S 4   S%-  S&-   [:        R@                  " US:X  a  / S'QO/ S(Q5      -  nGOSUS;   aL  / S)Q/ S*Q/ S+Q/US,-
     nS-S.XÿR)                  5       -
  -  -   S S 2S S 2S 4   [:        R@                  " U5      -  nGOUS/;   aI  S0S1XÿR)                  5       -
  -  -   S S 2S S 2S 4   [:        R@                  " / S2Q5      -  oîUS3:X  a  S4OS-  nGO²US5:X  a=  S6S-XÿR)                  5       -
  -  -   S S 2S S 2S 4   [:        R@                  " / S7Q5      -  nGOoUS:X  a-  S8S9U-  -   S S 2S S 2S 4   [:        R@                  " / S:Q5      -  nGO<US;:X  a<  S<S=XÿR)                  5       -
  -  -   S S 2S S 2S 4   [:        R@                  " / S>Q5      -  nOúS?S@XÿR)                  5       -
  -  -   S S 2S S 2S 4   [:        R@                  " / SAQ5      -  nO¾US:X  ad  US-  S-
  nUS S 2S S 2S S24==   USB;   a  S.OSC-  ss'   U[:        RB                  " [:        RD                  RG                  USSSD9SE5      -  S-   S-  nOTSFSGUS S 2S S 2SH4   -  -   US S 2S S 2SH4'   US;:w  a  S%SIUS S 2S S 2S4   -  -   OSIUS S 2S S 2S4'   US:X  a  SJOSHUS S 2S S 2S4'   [I        [:        RJ                  " USHS5      5      nUS:X  aE  US-  S-
  nU[:        RB                  " [:        RD                  RG                  USSSD9SE5      -  S-   S-  nXåU'   [M        [        S-  U-  U SK3-  XëS:H  5        GMï     [        R                  R                  R                  U5      nSUl        UR                  R                   R#                  S5      nUS   R)                  S	S
9n/ [%        [&        U5      QSP7Ul        UR*                  UR,                  S   l        ['        US   S S 2S S 2S4   R)                  5       5      UR,                  S   l        ['        US   S S 2S S 2S4   R)                  5       5      UR,                  S   l        U R1                  U5        [N        U   U Vs0 s H  o3SLU SMU SK3_M     snU	SNSOSPSQSRSS.ST.nUS;   a  URQ                  SUSVSV/SWSX.5        USY;   aô  [5        [6        R9                  U
 SZ35      5      n[        UU	5      S S 2S S 2SH4   n[I        [:        RR                  " US S 2S S 2S 4   S[SS
95      S S 2S S 2SH4   nUURU                  5       -
  [W        ['        URW                  5       URU                  5       -
  5      SE5      -  n[M        [        S-  U-  S\-  USS]9  URQ                  SLU S^3S_US:  a  S`OSaSH[N        U   Sb.5        UX'   GM•     [        S-  RY                  [        RZ                  " ScUSdSeSf/ SgQShSi.Sj.SSk95        [        Sl-  RY                  [        RZ                  " [\        [^        Sm.SSk95        X4$ s  snnf s  snf )nNz--reuse-shelfzmaterials.jsonÚ	materialsÚmapsé    Ú	BaseColorTzPrincipled BSDFr.   rQ   r-   z
Base ColorÚORMÚ	Roughnessr,   ÚMetallicé
   i   i   Úcastle_wall_varriation)r,   r   é   é   Ú
rough_wood)r
   é   é   Úrough_plaster_03Úmetal_plate_02Úworn_rock_natural_01))rš   Údiff)ÚNormalÚnor_gl)r›   ÚarmÚ_z_1k.*)r-   r   r,   r©   çš™™™™™é?g
×£p=
Ç?)ç{®Gázð?ç      ð?ç{®Gázì?g®Gáz®ç?)r,   r   ç
×£p=
ç?gú~j¼t“ˆ?)çö(\�Âõè?çÃõ(\�Âå?çìQ¸…ëá?)r®   g)\�Âõ(ð?gffffffî?)r±   gR¸…ëQà?gHáz®GÑ?)gHáz®Gé?gR¸…ëQè?gq=
×£på?)çffffffæ?g¸…ëQ¸Þ?g=
×£p=Ú?r
   g333333ë?g333333Ó?)é   é   r´   çÍÌÌÌÌÌì?)r­   gáz®GáÚ?g      Ð?r·   r°   rh   g
×£p=
×?)g®Gázî?r¸   r­   g¤p=
×£À?gìQ¸…ëÑ?)r³   g¸…ëQ¸æ?r±   é   g¸…ëQ¸Î?g{®Gáz´?)rµ   g)\�Âõ(ì?r¯   rµ   gÍÌÌÌÌÌÜ?)r¯   g¸…ëQ¸î?g×£p=
×ë?)r
   r£   r¤   r¹   r    r¡   r•   )rH   Úkeepdimsg:Œ0âŽyE>r²   g)\�Âõ(Ì?r   gq=
×£pÍ?g=
×£p=ê?z.pngz
materials/Ú/ÚREPEATz	OpenGL +YÚ	occlusionÚ	roughnessÚmetallic)ÚRÚGÚB)Útile_size_metresr˜   Ú
resolutionÚwrapÚnormal_conventionÚORM_channelsz+X / texture Ur¯   z­Geometry maps longitudinal distance to U/1m and cross-grain distance to V/1m. Generated beams must choose their local longitudinal axis, not stretch a whole texture per box.)Ú
grain_axisÚphysical_repeat_metresÚuv_note)r   r-   r
   r£   r¤   z
_disp_1k.*r   z
Height.png)r€   z/Height.pngz16-bit grayscale linearg¤p=
×£°?g{®Gázd?)Ú
height_mapÚheight_encodingÚdisplacement_scale_metresÚdisplacement_bias_metresÚheight_repeat_metreszforge.material-shelf.v1a  Exact-name replacement; external images. BaseColor sRGB; Normal/ORM linear. glTF flipY=false; RepeatWrapping; UV0 already contains physical repeat. Set roughness=metalness=1 so ORM controls them. Heights are for generated wall/plaster displacement; do not displace window surrounds.ÚCC0z
Poly Haven)rŸ   r¢   r¥   r§   r¦   zÊRegistered scan sets graded and made periodic; continuous rough timber scan transposed into longitudinal U; normal X/Y transposed together; glass is an opaque tinted surrogate. No AI texture generation.)ÚlicenseÚproviderÚidsÚnote)Úschemar—   Úruntime_bindingÚ
provenance)Úindentztexture_evidence.json)Úsource_sha256r}   )0ÚsysÚargvr   ÚexistsÚjsonÚloadsÚ	read_textÚNAMESÚitemsr&   r   r   r—   rn   Ú	use_nodesÚ	node_treeÚnodesÚgetÚmaprz   ÚmeanÚdiffuse_colorÚinputsÚdefault_valueÚappendÚ	enumerateÚnextÚSOURCEÚglobr   Ú	transposer   r   ÚmaximumÚlinalgÚnormrM   r=   r„   ÚTILESÚupdaterm   Úminr{   Ú
write_textÚdumpsr   r}   )ÚmatsÚshelfr   ÚkÚpr˜   ÚmÚbsrK   ÚnÚsrcÚkindÚsuffixr    r$   ÚlumÚtintÚvÚavgÚentryÚhpr?   s                         r%   Úbuildr	  /   s  € Ø€ˆrˆØ”s—x‘xÔ¤TÐ*:Ñ%:×$BÑ$B×$DÒ$DÜ�
Š
”DÐ)Ñ)×4Ñ4Ó6Ó7¸ÑD€%ßˆe€dØ;@¹;ÀvÑ;N×;TÑ;TÔ;VÔWÒ;V±C°AˆŒ:”d˜1‘f˜R  ;¡Ó/Ò	/Ñ;V€4ÑWÜ‡X�X×Ñ×Ñ˜DÓ!€1¨d !¤+°a·k±k×6GÑ6G×6KÑ6KÐL]Ó6^°2ð  pbÔqtÔuzÐ{ð  ALñ  |M÷  |Rñ  |Rð  X]ð  |Rð  |^ó  r_ð  pbð  `añ  pbÐ_`Ô_nð  IJ÷  IXñ  IXð  ce÷  clñ  clð  myñ  czô  cHô  ~Cð  DHð  INñ  DOò  PQò  RSð  TUð  PUñ  DV÷  D[ñ  D[ó  D]ó  ~^ð  Y[÷  Ybñ  Ybð  cnñ  Yoô  Y}ô  CHð  IMð  NSñ  ITò  UVò  WXð  YZð  UZñ  I[÷  I`ñ  I`ó  Ibó  Ccð  _a÷  _hñ  _hð  isñ  _tô  _Bð  dh÷  doñ  doð  pq÷  drñ ð 
ˆÐÜœ×�V€QØˆb‹D�D�c€!Ø€qƒSÐ%‰ØˆKÓ˜L™ØˆGƒ|Ð*‘CØˆ"ƒuÐ!‰SØ!€sØ	€$ÜM�k€dÜŒV�[‰[˜C˜5  & ¨Ð/Ó0Ó1€4Ü��t˜[Ñ(Ó)€1Øˆ;ÓÜ‡l‚l�1�WÓ×"Ñ"Ó$€AØˆXƒ~˜š!šAšg˜+™�aØ‡v�v�1€v€~€3Ø
ˆKÔØˆƒsˆc’!’A�d�(‰m˜BÑ˜sÑ"¤B§H¢Hª^Ó$<Ñ<ˆ1ÀqÈ!ÃtÁÐQRÑ=RºQØ	
ˆe‹�sš1šQ˜t˜8‘} SÑ(¨Ñ-¬r¯xªxÈÈAË»ÒSbÓ/cÑc’AØ	
ˆg‹Úš¢}Ð
5°a¸±cÑ
:€T¸cÀ"ÀcÏ(É(Ë*ÁnÑBUÑ>UÒWXÒYZÐ[_ÐW_Ñ=`Ôac×aiÒaiÐjnÓaoÑ=oº1Ø	
ˆe‹�s˜2˜s§8¡8£:™~Ñ.Ñ.²²!°D°Ñ9¼"¿(º(Â=Ó:QÑQ�AÐ\]Ð_`Ó\`ÑUXÐfgÑRgÒRSØ	
ˆA‹��S˜#Ÿh™h›j™.Ñ)Ñ)ª1ªQ¨t¨8Ñ4´R·X²XºlÓ5KÑKŠaØ	
ˆB‹�#�c˜#‘g‘+šq¢ 4˜xÑ(¬¯ª²-Ó)@Ñ@ŠqØ	
ˆB‹�#�c˜3Ÿx™x›z™>Ñ*Ñ*ªAªa°¨HÑ5´b·h²hº|Ó6LÑL‰qØ��SŸ™›‘^Ñ$Ñ$¢aª¨$ hÑ/´·²ºÓ0GÑG‰Øˆh‹Øˆ�cˆ!�e€AˆAŠa’�"�1�"ˆf‹I˜QÐ"2Ó2‘r¸Ñ;‹IØŒ�Š”B—I‘I—N‘N 1¨!°T�NÐ:¸4Ó	@Ñ@ÀÑBÀAÑE�Aà��Q’qš˜1�u‘X‘Ñ€A‚aŠˆ!€e�H¸QÀ»U¨¨C°²!²A°a°%±©LÒ(8È˜a¢¢! A ™hÐ\]Ð_aÓ\aÑUXÐghÈAÊaÒPQÐRSÈeÉHÜŒb�gŠg�a˜˜!‹nÓ€1Ø
ˆHƒn�q˜‘s˜1‘u�Q ¤"§*¢*¬R¯Y©Y¯^©^¸AÀ1Èd¨^Ð-SÐTXÓ"YÑ YÐZ[Ñ [Ð]^Ñ^˜QØˆ�:”
œ4 Ñ+¨DÑ0°D°6¸°Ñ>¸qÀ{ÑAR×Sñ1 Nô2 ‡H�H×Ñ×Ñ˜4Ó €!¨T ¤°Q·[±[×5FÑ5F×5JÑ5JÐK\Ó5]°"Ø
ˆ;Ñ×Ñ %ÐÐ(€#Ð9L¼3¼uÀS»>Ð9LÈ!Ñ9L¨¬Ðst÷  tCñ  tCÈRÏYÉYÐWcÑMdÔMrô  inð  osð  tyñ  ozò  {|ò  }~ð  @ð  {@ñ  oA÷  oFñ  oFó  oHó  iIð  DF÷  DMñ  DMð  NYñ  DZô  Dhô  nsð  txð  y~ñ  tò  @Aò  BCð  DEð  @Eñ  tF÷  tKñ  tKó  tMó  nNð  JL÷  JSñ  JSð  T^ñ  J_ô  Jmð  OS÷  OZñ  OZð  [\ô  O]Ü! !™HÑTXÓ,YÒTXÈq°¸D¸6ÀÀ1À#ÀTÐ/JÒ-JÑTXÑ,YÐghÐpxð  NYð  nyð  ~Ið  NXñ  iYñ  	Z€%Øˆ+Ó�e—l‘lÐ1AÐ\_Ð`cÐ[dð  p_ñ  $`ô  aØˆ+ÓÜ
Œ6�;‰;˜#˜˜jÐ)Ó*Ó+€2¬j¸¸AÓ.>ºqÂÀ1¸uÑ.E¨AÌÔQS×QZÒQZÐ[\Ò]^Ò_`ÐaeÐ]eÑ[fÐghÐnoÑQpÓHqÒrsÒtuÐvwÐrwÑHxÀaÐ|}Ð~÷  Dñ  Dó  Fñ  }Fô  HKô  LQð  RS÷  RWñ  RWó  RYð  Z[÷  Z_ñ  Z_ó  Zañ  Raó  Lbð  cgó  Hhñ  |hÐyzÜŒd�;Ñ˜tÑ# LÑ0°¸Ò=Ø‡<�< 
¨4¨&°Ð<ÐOhð  NOð  PQó  NQñ  FJð  W\ð  xyô  QVð  WXñ  QYñ  Zô  [Ø€%„+ñS  ôT ÐÑ×#Ñ#¤D§J¢JÐ9RÐ_dð  xTð  mrð  ~Jò  Qsð  {Gñ  bHñ  0Ið  QRñ  %Sô  TÜÐÑ×*Ñ*¬4¯:ª:ÄzÔZ_Ñ6`ÐhiÑ+jÔkØˆ
Ðùó_ 	XùòL -Zs   Â$c*Ü:c0)F)FF)r   Únumpyr   Úmathr   rX   rÝ   rÚ   Úpathlibr   Ú__file__Úresolverj   r   rî   r   r}   r&   rM   r„   rà   rô   r	  © r'   r%   Ú<module>r     sa   ðß 9× 9× 9Ó 9Ý Ù	ˆ(ƒ^×ÑÓ×$Ñ$€ØˆI�~€Ø€
�BˆeôGò,ô"~ò  `€Ú5€ó4r'   