Ë
    |ÔÆjæ  ã                   óè  — d Z ddlZddlZddlZddlZddlmZ ddlmZ  ee	«      j                  «       j                  Z ej                  edz  j                  «       «      Z ej                  edz  j                  «       «      d   Zedz  j#                  «       Z ej&                  d	ed
«      d   Z ej                  eddez    «      Zedez   d Zg Zd„ Zdj3                  «       Zdj3                  «       Zed   ej9                  dd«         d   ZeD � ci c]  } ed   |    d   | “Œ c} Zed   D �ci c]  }|d   |“Œ
 c}Z ed e e«       e e«      cxk(  xr  e e«      k(  nc «        ed e e«       e e«      k(  «        edej9                  d«       xr ej9                  d«       «        eded   dk(  xr ed   dk(  «        ed  e!d!„ eD «       «      «       d"„ Z"i Z#dZ$ejK                  «       D ]§  \  Z&Z'dZ( e"e'«      D ]n  Z)ed   e)   Z*d#e*vrŒed$   e*d#      d%   D ]N  Z+e(ed&   e+d'      d(   d)z  z  Z(e$d*z  Z$ ee&› d+� e!d,„ d-D «       «      «        ee&› d.�ed   e+d/      d   ev «       ŒP Œp e(e#e&<    ee&d0z   e(ee&   d1   k(  xr e(ee&   d2   k  «       Œ©  ed3 e,e#j[                  «       «      ed4   k(  «       d5D ]5  \  Z&Z.Z/Z0ee&   d6   Z1 ee&d7z   e1d8   e.k(  xr e1d9   e/k(  xr e1d:   e0k(  «       Œ7 ej[                  «       D ]v  Z1e1j9                  d;g «      D ]_  Z2 e3d<„  e"ee1d      «      D «       d«      Z* ee2d   d=z   e*duxr.  e4d>„  e5e*j9                  d?g d@¢«      e2d?   «      D «       «      dAk  «       Œa Œx dBD ]b  Z&ee&   Z1e1dC   dD   d   e1dC   dE   d   z
  Z6 ee&dFz    e7e6dGe&v rdHndIz
  «      dAk  xr$ e1j9                  dJe1j9                  dK«      «      dLk(  «       Œd  e8dM„  e9dN«      D �cg c]  }dL|dIz  dOz  z   ‘Œ c}D «       «      Z: edPe:dkD  «        edQ e7edR   dC   dD   d*   dSz
  «      dAk  «        edT e7edU   dV   dWz
  «      dAk  «       dZ;ejK                  «       D ]¾  \  Z&Z1e1dX   jK                  «       D ]a  \  Z<Z+ ejz                  ee+z  «      Z> ee&dYz   e<z   dZz   e>j~                  e1d[   e1d[   fk(  «       e;ee+z  j�                  «       j‚                  z  Z;Œc d\e1v sŒ‚ee1d\   z  j#                  «       ZB ee&d]z   eBd^   d_k(  xr eBd`   dk(  «       e; eCeB«      z  Z;ŒÀ  edae;dbk  «        edce$ddk  «        ej                  edez  j                  «       «      ZD edfeDdg    ejŠ                  e«      j�                  «       k(  «        edheDj9                  di«       «       dj ejŠ                  e«      j�                  «        eCe«       e,e#j[                  «       «      e#e$e;edkœZGedlz  j‘                   ej’                  eGdm¬n«      «        eJ ej’                  eGjK                  «       D ��ci c]  \  }}|dovsŒ||“Œ c}}«      «       yc c} w c c}w c c}w c c}}w )pzPValidate exported GLB data and assembly contracts, independent of Blender state.é    N)ÚPath)ÚImagezkit.jsonzmaterials.jsonÚ	materialszkit.glbz<Ié   é   é   c                 ó`   — t         j                  | t        |«      dœ«       |st        | «      ‚y )N)ÚcheckÚpass)ÚchecksÚappendÚboolÚAssertionError)ÚlabelÚoks     úvalidate_delivery.pyr
   r
      s&   € Ü‡�˜¤T¨"£XÑ.Ô/Ù
” Ó&Ð&ˆó    ab  brace_storey brace_straight bressummer_1m joist_end jetty_bracket peg_cluster window_leaded window_leaded_stone window_small door_plank door_arched_double window_shop tile_a tile_b tile_c tile_d tile_strip_a tile_strip_b roof_underlay ridge_tile_round verge_board_1m rafter_end dormer chimney_stone tavern_sign lantern_iron bench_wood barrel corner_stonez»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ÚscenesÚsceneÚnodesÚnameÚatomsÚ	node_namez29 exact master namesz14 exact shelf nameszNo images or textures in GLBÚimagesÚtextureszMetres and Y-upÚunitsÚmetresÚupz+YzIdentity root transformsc              #   óH   ‡K  — | ]  Št        ˆfd „dD «       «       –— Œ y­w)c              3   ó:   •K  — | ]  }|t         d    ‰   v –— Œ y­w)r   N)Úg)Ú.0ÚtÚis     €r   ú	<genexpr>z<genexpr>.<genexpr>   sM   øè ø€ ò  |Eð  TUð  }~ô  BCð  DKñ  BLð  MNñ  BOô  }Oñ  |Eùs   ƒ)ÚmatrixÚtranslationÚrotationÚscaleN)Úany©r"   r$   s    @r   r%   r%      sF   øè ø€ ò  tUð  JKô  y|ó  |Eð  YDô  |Eó  yEô  uEñ  tUùs   ƒ"c              #   ó€   K  — | –— t         d   |    j                  dg «      D ]  }t        |«      E d {  –—†  Œ y 7 Œ­w)Nr   Úchildren)r!   ÚgetÚdescendants)r$   Úchilds     r   r/   r/      s;   è ø€ Ø‚Ü�‰j˜‰m×Ñ 
¨2Ó.ÒL€U¼+ÀeÓ:L×/LÑ/LÑLÐ/Lús   ‚2>´<µ>ÚmeshÚmeshesÚ
primitivesÚ	accessorsÚindicesÚcounté   é   z: PBR attributes presentc              #   ó2   K  — | ]  }|t         d    v –— Œ y­w)Ú
attributesN)Úp)r"   r#   s     r   r%   r%      s   è ø€ Ò.zÈ¨q´A°l±OÔ/CÑ.zùs   ‚)ÚPOSITIONÚNORMALÚ
TEXCOORD_0ÚTANGENTz: shelf bindingÚmaterialz$: triangle budget and manifest agreeÚ	trianglesÚtriangle_budgetzTotal triangles agreeÚtotal_triangles))Úwindow_leadedçffffffæ?r8   çš™™™™™É?)Úwindow_leaded_stonerE   r8   ç      à?)Úwindow_smallçÍÌÌÌÌÌÜ?gš™™™™™á?rF   )Ú
door_plankr8   é   rH   )Údoor_arched_doubleçÍÌÌÌÌÌü?gÍÌÌÌÌÌ@rH   )Úwindow_shoprN   gffffffö?rF   Úopeningz: clear opening contractÚwidthÚheightÚwall_thicknessr-   c              #   óh   K  — | ]*  }t         d    |   d   t        d   k(  sŒt         d    |   –— Œ, y­w)r   r   r   N)r!   Úcr+   s     r   r%   r%   !   s5   è ø€ Òr˜qÌAÈgÉJÐWXÉMÐZ`ÑLaÔcdÐepÑcqÓLqŒQˆw‰Z˜�]Ñrùs   ‚2¡2z: child pivot preservedc              #   ó>   K  — | ]  \  }}t        ||z
  «      –— Œ y ­w)N)Úabs)r"   ÚxÚys      r   r%   r%   "   s(   è ø€ ò  JUÑWZÐWXÐYZÌ#ÈaÐPQÉcÏ(ñ  JUùs   ‚r'   )r   r   r   g�íµ ÷Æ°>)Útile_aÚtile_bÚtile_cÚtile_dÚtile_strip_aÚtile_strip_bÚbounding_boxÚmaxÚminz: width/gaugeÚstripg…ëQ¸õ?g…ëQ¸Å?Úcourse_gauge_metresÚgauge_metresçš™™™™™¹?c           	   #   óÚ   K  — | ]c  }d dt        j                  t         j                  |z  dz  «      t        j                  t         j                  |dz
  z  dz  «      z
  z  z   dz
  –— Œe y­w)gü©ñÒMbp?gyé&1¬l?gö(\�ÂõÐ?rf   g-Cëâ6:?N)ÚmathÚsinÚpi)r"   Úzs     r   r%   r%   %   s[   è ø€ ò  IÐ]^ˆ�Eœ4Ÿ8™8¤D§G¡G¨A¡I¨d¡NÓ3´D·H±H¼T¿W¹WÀaÈÁd¹^ÈDÑ=PÓ4QÑQÑRÑRÐSXÕXñ  Iùs   ‚A)A+ié  iè  zHPlain tile overlap stays separated at 100mm gauge including strip jitterzChimney 2.5m highÚchimney_stoneg      @zJoist projects 0.45mÚ	joist_endÚprojection_metresrJ   Úmapsz: z dimensionsÚ
resolutionÚ
height_mapz: 16-bit grayscale Heighté   é   é   zShelf within 64 MiBi   zPrimitive draw-call budgeté_   z
audit.jsonzStrict audit matches final GLBÚsha256zStrict audit zero errorsÚerrorsÚPASS)ÚstatusÚ
glb_sha256r   rA   Úper_atom_trianglesr3   Úexternal_shelf_png_bytesr   zvalidation.jsonrL   )Úindent)r   r{   )KÚ__doc__ÚjsonÚstructÚhashlibrh   Úpathlibr   ÚPILr   Ú__file__ÚresolveÚparentÚRÚloadsÚ	read_textÚkÚsÚ
read_bytesÚrawÚunpack_fromÚnr!   Úbinaryr   r
   ÚsplitÚexpectedÚmatnamesr.   ÚrootsÚrootmapr   ÚsetÚallr/   rA   r3   Úitemsr   r$   ÚtsÚjÚnoder;   ÚsumÚvaluesÚwÚhÚdÚarU   Únextra   ÚzipÚspanrW   rb   ÚrangeÚgapÚtexturebytesÚkindÚopenÚimÚsizeÚstatÚst_sizeÚdataÚlenÚauditrv   Ú	hexdigestÚoutÚ
write_textÚdumpsÚprint)r$   r¡   rš   ÚkeyÚvals   00000r   ú<module>r¸      sö
  ðÙ Vß × Ý Ý Ù€xƒ.×ÑÓ×!Ñ!€Ø€$‡*�*ˆa�
‰l×%Ñ%Ó'Ó(€¨:¨4¯:©:°qÐ9IÑ7I×6TÑ6TÓ6VÓ+WÐXcÑ+d¨ÐjkÐluÑju÷  jBñ  jBó  jDÐehð  GYð  GM÷  GYñ  GYð  Z^ð  _bð  ceó  Gfð  ghñ  Gið  EFð  lvð  lp÷  lvñ  lvð  wzð  {}ð  ~@ð  ABñ  ~Bð  wCó  lDð  jkð  LOð  PRð  STñ  PTð  PUð  LVð  EKð  ^`ð  W]ò'ð 
n÷  
tñ  
tó  
v€ð 
G÷  
Mñ  
Mó  
O€Øˆ�k�!—%‘%˜ Ó"Ñ# GÑ,€ÐW\Ö5]ÐRS°a¸±jÀ±mÀFÑ6KÈAÑ6MÒ5]¨Wð  @Að  BIñ  @Jö  eKÐz{ÐefÐgrÑesÐtuÑeuò  eKÐ^cÙ Ð™c '›l©C°«MÖE¹3¸u»:ÔEÔ FÁuÐMcÑdgÐhiÓdjÑloÐpxÓlyÑdyÔGzñ  |Að  B`ð  ef÷  ejñ  ejð  ksó  etð  atò  aNð  }~÷  }Bñ  }Bð  CMó  }Nð  yNô  |Oñ  PUð  Vgð  hið  jqñ  hrð  t|ñ  h|ò  hNð  ABð  CGñ  AHð  JNñ  ANô  POñ  PUð  Vpñ  qtñ  tUð  OTô  tUó  qUô  PVòMð €	˜ˆZØ�m‰m‹oò 	K�F€DˆØ€Ù
�a‹.ò N€QØˆ�z�!�}€$Ø�4Ñ˜ØˆX‰;�t˜F‘|Ñ$ \Ñ2ò N€aØ€qˆ�~�a˜	‘lÑ# GÑ,¨aÑ/Ñ/€2°
¸A±°
ÙˆDˆ6Ð)Ð	*©3Ñ.zÐMyÔ.zÓ+zÔ{ÙˆDˆ6�Ð	! ! K¡.°°:±Ñ"?ÀÑ"GÈ1Ð"LÕMñNðNð €ˆ4�‘E˜$ÐEÑEÀbÈ%ÐPTÉ+ÐVaÑJbÑFbò  GJÐgiÐkpÐquÑkvð  xIñ  lJñ  hJõ  Kð	Kñ Ð™c )×"2Ñ"2Ó"4Ó5°qÐ9JÑ7KÑKÔ Lð }ò }�J€Dˆˆ1ˆQØˆ�;ˆyÑ€™% Ð%?Ñ ?ÀÀ'Á
ÈAÁÒ@{ÐRSÐT\ÑR]Ð_`ÑR`Ò@{ÐefÐgwÑexÐz{Ñe{Õ|ð}à	�‰‹ò [€AØ
�%‰%�
˜2Ó
ò [€QÙÑr¡K°¸¸+¹Ñ0GÓ$HÔrÐswÓx€$Ùˆˆ+‰Ð0Ñ0°¸TÐ1Aò  2ZÁcñ  JUÑ^aÐbf×bjÑbjÐkxò  zAó  cBð  CDð  ERñ  CSó  _Tô  JUó  GUð  VZñ  GZõ  [ñ[ð[ð Pò V€DØˆ�;€�A�nÑ% eÑ,¨QÑ/°°.Ñ0AÀ%Ñ0HÈÑ0KÑKˆtÉEÐRVÐWfÑRfÑgjÐkoð  zAð  EIñ  zIÑquð  OSñ  lTó  hUð  VZñ  hZò  hUð  _`÷  _dñ  _dð  ezð  {|÷  {@ñ  {@ð  AOó  {Pó  _Qð  SUñ  _Uõ  MVðVáñ  Iñ  |Að  BFó  |Gö  cHÐvwÐceÐfgÐhlÑflÐmqÑfqÓcqò  cHô  Ió  I€Ù ÐPÐQTÐUVÑQVÔ WÙ Ð™#˜e OÑ4°^ÑDÀUÑKÈAÑNÈsÑRÓSÐTXÑXÔ YÙ Ð™S  {Ñ!3Ð4GÑ!HÈÑ!LÓMÈdÑRÔ SØ€Ø�g‰g‹iò E�F€DˆØ�‰y�‰Ó ò G�V€Tˆ!Ø€U‡Z�Z��!‘ƒ_€"‘U˜4 ™9 T™>¨-Ñ7¸¿¹À!ÀLÁ/ÐRSÐT`ÑRaÐAbÑ8bÔcÐdpÐstÐuvÑsv×r|Ñr|Ór~÷  sGñ  sGñ  eGÑdpðGà�AÒØ	ˆ!ˆL‰/Ñ×%Ñ%Ó'€$©¨dÐ3NÑ.NÈtÐTVÉxÐY[É|ÒOkÐ`dÐegÑ`hÐjkÑ`kÔ(lÐmyÑ{~ð  @Dó  |Eñ  nEÑmyð	Eñ
 Ð˜L¨Ñ3Ô 4±UÐ;WÐXbÐdfÑXfÔ5gØ€d‡j�j�!�L‘.×+Ñ+Ó-Ó.€©uÐ5UÐV[Ð\dÑVeÐguÐgn×guÑguÐvyÓgz÷  hEñ  hEó  hGñ  WGô  0Hñ  INð  Oið  ns÷  nwñ  nwð  x@ó  nAð  jAô  IBØ . '§.¡.°Ó"5×"?Ñ"?Ó"AÉ#ÈeË*ÑadÐen×euÑeuÓewÓaxð  OXð  fpð  LXð  bhñ  i€ð  klð  m~ñ  k~÷  jJñ  jJð  KUð  KO÷  KUñ  KUð  VYð  abô  Kcô  jdñ  ejð  kuð  ko÷  kuñ  kuð  NQ÷  NWñ  NWó  NY÷  vHñ  CJð  CFð  GJð  ]`ð  hGò  ]Gð  wzð  {~ñ  w~ó  vHó  kIõ  eJùòK 6^ùò  eKùò2 cHùó vHs   ÄYÄ3Y$Ï<Y)
Ù Y.ÙY.