
    oj/                    P   d Z ddlmZ ddlZddlZddlZddlZddlZddl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 ddlmZ ddlmZmZmZmZmZ ddlmZmZ d#d	Zd$d
Zd%dZd&dZddd'dZ d(dZ!d)dZ"d*dZ#d+dZ$	 	 	 	 	 	 	 	 	 	 	 	 	 	 d,dZ%d-dZ&	 	 	 	 	 	 	 	 	 	 	 	 	 	 d.dZ'dd	 	 	 	 	 	 	 	 	 	 	 	 	 d/dZ(	 	 	 	 	 	 	 	 	 	 d0dZ)	 	 	 	 	 	 	 	 	 	 	 	 d1dZ*ddd	 	 	 	 	 	 	 	 	 	 	 d2dZ+	 	 	 	 	 	 d3dZ,d4dZ-d5dZ.	 	 	 	 	 	 	 	 d6d Z/	 	 	 	 	 	 	 	 	 	 d7d!Z0	 	 	 	 	 	 	 	 	 	 d8d"Z1y)9zIStrict, offline provenance primitives for installed Golden Path runtimes.    )annotationsN)BytesParser)compat32)Path)AnyIterableMappingSequencecast)unquote_to_bytesurlsplitc                R    t        j                  | dddd      j                         S )NFT),:)ensure_ascii	sort_keys
separators	allow_nan)jsondumpsencodevalues    /home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-direct-url-portable-prefreeze-st_01a01574-v32/verification-tools/installed_wheel_provenance.py	canonicalr      s+    :: fh    c                   t        j                         }| j                  d      5 t        fdd      D ]  }|j	                  |        	 d d d        |j                         S # 1 sw Y   |j                         S xY w)Nrbc                 &     j                  d      S )Ni   )read)streams   r   <lambda>zsha256_file.<locals>.<lambda>#   s    &++k":r   r   )hashlibsha256openiterupdate	hexdigest)pathdigestchunkr!   s      @r   sha256_filer,       sh    ^^F	4F:C@EMM%  A 
  
 s   &A&&A>c                ~    dj                  | j                         j                  dd      j                  d            S )N-_)joinlowerreplacesplit)names    r   _normalr5   (   s/    88DJJL((c288=>>r   c                P    | j                  d      t        fd|D              S )NTstrictc              3     K   | ]<  }|j                  d       k(  xs! j                  |j                  d              > ywTr7   N)resolveis_relative_to).0rootresolveds     r   	<genexpr>z_within.<locals>.<genexpr>.   sH     }w|osx4<<t<44j8O8OPTP\P\dhP\Pi8jjw|s   AA)r;   any)r)   rootsr?   s     @r   _withinrC   ,   s%    ||4|(H}w|}}}r   Fprivatec                  | j                         }t        j                  |j                        rt	        | d      t        j
                  |j                        r0|j                  dk7  s!|j                  t        j                         k7  rt	        | d      |r0t        j                  |j                        dvrt	        | d      y y )N is a symlink   z is not an owned regular file>         permissions are not private)lstatstatS_ISLNKst_mode
ValueErrorS_ISREGst_nlinkst_uidosgeteuidS_IMODE)r)   labelrE   infos       r   _regularrY   1   s    ::<D||DLL!E7-011<<%!);t{{bjjl?ZE7"?@AA4<<-^CE7">?@@ Dwr   c                x   | j                         }t        j                  |j                        rt	        | d      t        j
                  |j                        r!|j                  t        j                         k7  rt	        | d      t        j                  |j                        dvrt	        | d      y )NrG   z is not an owned directory>   @    rK   )
rL   rM   rN   rO   rP   S_ISDIRrS   rT   rU   rV   )r)   rW   rX   s      r   _private_directoryr^   ;   s    ::<D||DLL!E7-011<<%

)DE7"<=>>||DLL!7E7">?@@ 8r   c                    t        | dd       t        j                  | j                  d            }t	        |t
              rt        d |D              rt        d      t        t
        t        t        f   |      S )N
provenanceTrD   utf-8)encodingc              3  >   K   | ]  }t        |t                 y wN)
isinstancestr)r=   keys     r   r@   z$read_private_json.<locals>.<genexpr>H   s     )Tesjc.B*Bes   zprovenance is not an object)rY   r   loads	read_textre   dictrA   rP   r   rf   r   )r)   r   s     r   read_private_jsonrk   E   s_    T<.JJt~~w~78EeT"c)Te)T&T677S#X&&r   c                |   | j                  d      \  }}}|dk7  s|r|st        | d      	 t        j                  |dt	        |       dz  z  z         }t	        |      t        j                         j                  k7  rt        | d      |j                         S # t
        $ r}t        | d      |d }~ww xY w)N=r$   z RECORD hash is invalid   )
	partitionrP   base64urlsafe_b64decodelen	Exceptionr#   r$   digest_sizehex)r   rW   	algorithm	separatorencodedrawexcs          r   _decode_record_hashr{   M   s    $)OOC$8!Iy'HIWE7"9:;;E&&wW8I1J'JK 3x7>>#///E7"9:;;779	  EE7"9:;DEs   (B 	B;'B66B;c                   	 | j                  d      }t        t        j                  t	        j
                  |d                  }g }t               }|D ]  }t        |      dk7  rt        | d      |\  }	}
}t        |	      }|	r|j                         s|	|v rt        | d      |j                  |	       |	|k(  r'|
s|rt        | d      |j                  |	dd f       |
r|j                         st        | d	      |j                  |	t!        |
|      t#        |      f        ||vrt        | d
      |S # t        t        j                  f$ r}t        | d      |d }~ww xY w)Nra    newlinez RECORD is invalid   z RECORD row is invalidz RECORD path is invalidz RECORD self-row is invalidz RECORD hash or size is missingz RECORD self-row is missing)decodelistcsvreaderioStringIOUnicodeDecodeErrorErrorrP   setrr   r   is_absoluteaddappend	isdecimalr{   int)datarecord_relativerW   decodedparsedrz   rowsseenrowrelativeencoded_hashraw_size	candidates                r   _record_rowsr   Z   s}   @++g&cjjWb!ABC /1DUDs8q=w&<=>>+.(,N	9002h$6Fw&=>??&x E7*E!FGGKK2t,-8#5#5#7w&EFGGX2<GXWX   d"E7"=>??K- 		* @E7"456C?@s   AE E/E**E/c               ~   t        | | dd       	 t        j                  |       5 }|j                         }t	        |      t	        t        |            k7  st        d |D              rt        | d      | d}|j                  |      }	t        |	||      }
|D ci c]  }|d   |
 }}t        |      |
D ch c]  }|d   	 c}k7  rt        | d      |j                  d	       d
}|
D ];  \  }}}||k(  r	 |j                  |      }t	        |      |k7  rt        | d|       t        j                  |      j                         |k7  rt        | d|       |}|j                  |      r|t	        |      d  j!                  d      \  }}}|r|st        | d|       |dv r|}nP|dk(  r;t#        t$        j&                  j)                  ||z  |            j+                         }nt        | d|       |j-                  |      }||||fk7  s.t        | d|        t        j                  |	      j                         cd d d        S c c}w c c}w # t        $ r}t        | d|       |d }~ww xY w# 1 sw Y   y xY w# t        j.                  $ r}t        | d      |d }~ww xY w)Nz wheelTrD   c              3  p   K   | ].  }|j                  d       xs dt        |      j                  v  0 yw)/..N)
startswithr   parts)r=   r4   s     r   r@   z#_wheel_inventory.<locals>.<genexpr>   s7     3wqvimDOOC4H4dDTXY]T^TdTdLd4dqvs   46z wheel members are invalid/RECORDr   z* wheel inventory differs from wheel RECORD
.dist-info.data/z! wheel RECORD member is missing: z wheel RECORD size mismatch: z wheel RECORD hash mismatch: r   z wheel data member is invalid: >   platlibpurelibr   z  unsupported wheel data scheme: z, installed RECORD differs for wheel member: z wheel is invalid)rY   zipfileZipFilenamelistrr   r   rA   rP   r    r   removesuffixKeyErrorr#   r$   r(   r   ro   r   rT   r)   relpathas_posixget
BadZipFile)wheeldist_info_nameinstalled_rowsrW   site_packagesvenvarchivenamesr   wheel_recordr   r   installed_by_pathdata_prefixr   expected_hashexpected_sizepayloadrz   installed_relativeschemerw   suffix	installeds                           r   _wheel_inventoryr   w   s    UugV$d3'?__U#w$$&E5zSU_,3wqv3w0w E7*D!EFF!/ 08O"<<8LouED8F GQ G5z5c!f55 E7*T!UVV+88FGvNK:>6-.e%ll84G w<=0$w.KH:%VWW>>'*446-G$w.KH:%VWW%-"&&{308[9I9J0K0U0UVY0Z-FIv$F(E72QRZQ[)\]]!77-3*6)-1"''//$-Q^2_-`-i-i-k*(E72RSYRZ)[\\-112DE	!3]M RR$w.Z[cZd%eff1 ;?2 >>,/99;I $# !H5   e$w.OPXz%Z[adde! $#J  ?E7"3453>?s~   J A8J	 I-J	=I"	7J	I'DJ	 3J		J 
J	'	J0JJJ		JJ J J<(J77J<c                @   	 	 	 	 dfd}	 t        j                  | j                  dd      |      }t        |t              st         d      t        t        t        t        f   |      S # t        t         j                  f$ r}t         d      |d }~ww xY w)Nc                N    i }| D ]  \  }}||v rt         d      |||<    |S )Nz contains a duplicate key)rP   )pairsresultrg   r   rW   s       r   object_pairsz)_strict_json_object.<locals>.object_pairs   sB     %'JCf} E7*C!DEEF3K   r   ra   r8   errors)object_pairs_hookz is invalid)r   zlist[tuple[str, object]]returndict[str, object])r   rh   r   r   JSONDecodeErrorrP   re   rj   r   rf   object)r   rW   r   r   rz   s    `   r   _strict_json_objectr      s    '	9

KKK1\

 eT"E7+.//S&[!5))	  4 45 9E7+./S89s   (A0 0B	BBc                   t        | d      }|j                  d      }t        |      ddhk7  st        |t              st        d      t        t        t        t        f   |      }|j                  d      }	t        |      ddhk7  st        |	t              st        d      t        t        t        t        f   |	      }
t        |      }t        |
      dhk7  s+|j                  d      d	| k7  s|
j                  d      |k7  rt        d
      |j                  d      }t        |t              st        d      t        |      }|j                  dk7  s0|j                  s$|j                  s|j                  s|j                  st        d      	 t!        |j                        j#                  dd      }t'        |      }|j)                         r(|j*                  dk7  s|j,                  |j,                  k7  rt        d      	 t.        j                  j1                  ||      }|st        d      t5        j6                  |       j9                         }|j;                         r&t=        |      t?        |       k7  stA        |d      |k7  rt        d      d|||j,                  ||d}||tA        |d      t?        |       ddd}||fS # t$        $ r}t        d      |d }~ww xY w# t2        $ r d}Y w xY w)Nzgenerated direct URL metadataarchive_infourlz4generated direct URL metadata is not a wheel archivehasheshashz.generated direct URL archive hash is ambiguousr$   zsha256=z;generated direct URL archive hash differs from sealed wheelz0generated direct URL wheel provenance is invalidfilez2generated direct URL is not an offline local wheelra   r8   r   z*generated direct URL wheel path is invalidz.whlFz9generated direct URL differs from sealed wheel provenancez
direct URLz'generated direct URL RECORD row differsz(task26-portable-direct-url-provenance-v1)schemadistributiondist_info_member_pathsealed_wheel_basenamesealed_wheel_sha256archive_sha256absolute_local_file_wheel_url)r   byte_sha256record_row_sha256sizeurl_path_classification raw_equality_required_or_claimed)!r   r   r   re   rj   rP   r   rf   r   r,   r   r   netlocqueryfragmentr)   r   r   r   r   r   r   r4   rT   samefileOSErrorr#   r$   r(   r   r   rr   r{   )r   record_hashrecord_sizerecord_pathr   distribution_namer   archive_valuer   hashes_valuer   wheel_sha256raw_urlr   decoded_pathrz   archive_pathsame_archivepayload_sha256portablery   s                        r   _portable_direct_url_provenancer      s     )HIEIIn-M
5zne,,Jt5 OPP4V$m4G;;x(L
7|))L$1OIJJ$sF{#\2Fu%LFz!;;vGL>"::::h</VWWiiGgs#KLLgF==<<??{{MNNP'4;;GH;U %L$$&&(

*KLLww''e< TUU^^G,668N!!#{s7|+{L9^KBCC<)!,!&+&#H "-%0lKG#B,1C S=M  PEFCOP  s*   &K
  K' 
	K$KK$'K54K5)require_direct_urlc                z   |dz  }|j                         }	 t        t        j                  t	        j
                  |j                  d      d                  }t        j                  |       5 }	|j                   d}
t        |	j                  |
      |
|      }|j                   d|	j                         v r|	j                  |j                   d      nd}ddd       i }|D ]7  }t#        |      d
k7  s|d   r|d   |v rt!        d      |d   |d   f||d   <   9 g }g }|j%                  |      j'                         h}|j                  j)                  d       d}D ]  \  }}}|
k(  r|}d}|j+                  |      r|t#        |      d j-                  d      \  }}}|st!        d      |dk(  rt/        |      }|r|j1                         sd|j2                  v rt!        d      ||z  }t/        t4        j6                  j9                  ||            j'                         }|j;                  |      }|;|d   r6|d   j=                         r#t?        |d   d      |k7  stA        |d         |k7  rt!        d      |jC                  |       tE        |d       |j                         }t        j                  |       5 }	|	j                  |      }ddd       t#              |k7  s+tG        jH                  |      jK                         |k7  s||k7  rt!        d      |jM                  d||d|j'                          ||d       |dk7  rt!        d      t/        t4        j6                  j9                  |dz  |z  |            j'                         }d}|j;                  |      }|t!        d      |jC                  |       ||z  }tE        |d        |j                         }|rt        j                  |       j                  |      }|j-                  d!      \  } }}!|j-                  d!      \  }"}#}$d"|d#z   jO                         }%|r|#r
| |%k7  s|$|!k7  rt!        d$      d%|!z   }&|jM                  d&|||tG        jH                  |&      jK                         t#        |&      d'       Ut#        |      |k7  s&tG        jH                  |      jK                         |k7  rt!        d(      |jM                  ||||d)        rtQ        jR                  d*      }'	 |'jU                  |j                  d             |'jW                  d,      r|'jY                  d,      nd-D ]  \  }(})|)j[                  d.d      d   j]                         }|j-                  d/      \  }*}}+|rD|(rBt_        d0 |(D              s0|*ja                  d1d2      jc                         r|+jc                         st!        d3      t/        t4        j6                  j9                  |dz  |(z  |            j'                         }||vrt!        d4      ||z  },tE        |,d5       |,j                         }|j-                  d!      \  } }-}!d6|* d7|+ d8|+ d9jO                         }.|-r| d"|d#z   jO                         k7  s|!|.k7  rt!        d:      |jC                  |       d%|!z   }&|jM                  d;|||( d<|) tG        jH                  |&      jK                         t#        |&      d=        d}/d}0|j                   d>d?|j                   d@dA|j                   dBdCi}1te        tg        |      |z
        D ]  }|1j;                  |      }2|2t!        dD      ||z  }tE        |dE       |j                         }|2d?k(  r|j]                         dFk7  rt!        dG      |2dAk(  r|dHvrt!        dI      |2dCk(  r2||   \  }3}4ti        ||3|4|| |J      \  }/}0|jM                  dKdLi|/       |jM                  |2||tG        jH                  |      jK                         t#        |      dM        |r|/|0t!        dN      dO|tG        jH                  t        j                  |       j                  |j                   d            jK                         te        |dP Q      te        |dR Q      |/dS}5i |5tG        jH                  tk        |5            jK                         tG        jH                  |      jK                         d|0dTS # 1 sw Y   cxY w# t        t        j                  t        j                  f$ r}t!        d	      |d}~ww xY w# 1 sw Y   xY w# t        tP        j                  f$ r}t!        d+      |d}~ww xY w)UzMProject path-independent installed RECORD semantics without hiding raw drift.RECORDra   r}   r~   r   z/entry_points.txtr   Nz portable RECORD input is invalidr   r   zinstalled RECORD row is invalidrH      r   r   Fr   z&unsupported path-dependent wheel entryr   r   zrelocated static datazBwheel-owned installed RECORD row differs for relocated static dataz<wheel-owned installed row differs from relocated static data!wheel_owned_relocated_static_dataz{data}/)kindinstalled_path
wheel_pathcanonical_destinationr$   r   scriptsbinTz+wheel-owned installed RECORD row is missingzportable RECORD installed entry   
z#!
bin/pythonz(generated launcher semantics are invalids   #!<VENV>/bin/python
path_dependent_launcher)r   r   r   ownertemplate_sha256size_without_shebang_pathz3wheel-owned installed row differs from wheel RECORD)r   r   r$   r   )interpolationz&wheel console entry points are invalidconsole_scripts [r   c              3  $   K   | ]  }|d v 
 yw)zAabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-Nr  r=   	characters     r   r@   z-portable_record_projection.<locals>.<genexpr>  s%       J  ~Ipyy(kk  ~I   .r/   z$wheel console entry point is invalidz0generated console launcher RECORD row is missingzgenerated console launcherz2# -*- coding: utf-8 -*-
import re
import sys
from z import zn
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(z())
z.generated console launcher template is invalidconsole_entry_point_launcherrm   )r   r   r  entry_pointr  r  z
/INSTALLERinstaller_metadataz
/REQUESTEDrequested_markerz/direct_url.jsondirect_url_metadataz+unexpected generated installed RECORD entryzgenerated RECORD entrys   pipz'generated installer metadata is invalid>   r   r   z%generated requested marker is invalid)r   r   r   r   r   r   r   'canonical_direct_url_archive_provenance)r   r   r  content_sha256r   0generated direct URL wheel provenance is missingz.task26-portable-installed-record-projection-v2c                    t        | d         S )Nr   )rf   r   s    r   r"   z,portable_record_projection.<locals>.<lambda>  s    CDU@Vr   )rg   c           	     X    t        | j                  d| j                  dd                  S )Nr   r   r}   )rf   r   r  s    r   r"   z,portable_record_projection.<locals>.<lambda>  s#    Csww/F'KLr   )r   r   wheel_record_sha256wheel_owned_rowsgenerated_entriesdirect_url_provenance)projection_sha256raw_installed_record_sha256raw_installed_record_portableraw_direct_url)6
read_bytesr   r   r   r   r   r   r   r   r4   r   r    r   r   r   r   rP   rr   relative_tor   r   r   ro   r   r   r   rT   r)   r   r   r   r{   r   r   rY   r#   r$   r(   r   r   configparserConfigParserread_stringhas_sectionitemsr3   striprA   r2   isidentifiersortedr   r   r   )6r   r   	dist_infor   r   r   record
raw_recordinstalled_csvr   wheel_record_name
wheel_rowsentry_points_datarz   r   r   wheel_owned	generatedconsumedr   r   r   r   r   generated_launcherr   rw   r   suffix_pathtargetr   wheel_payloadfirst	remainder_wheel_firstwheel_separatorwheel_remainderexpected_shebangtemplateparserscript_nametarget_specmodulefunctionlauncherseparator_bytesexpected_remainderr  r  allowed_generatedr   row_hashrow_sizecores6                                                         r   portable_record_projectionrK    s:
    !F""$JFJJr{{:#4#4W#=rJK
 __U#w#,>>"2' :%./!!J  nn%%677;K;K;MM 	//@AB  $ 24Ns8q=A#a&N*B>??"%a&#a&!1s1v  ,.K)+I ,,];DDFGH^^00>?vFK2<.-((%"{+(0[1A1B(C(M(Mc(R%FIv !IJJ"6l"..0{000$%MNN+%)GGOOFM:&(* # %(();<Kq6q6++-*A 7 %% 3q6{m3$\  /0!89 ++-__U+w$+LL$:M , &-7~~m4>>@$%-/$V  "" C*<&.'(<(<(>'?@"/ -	 " !IJJ!%uv 5}E"hj  "&  !34;JKK'(!33:;##%#OOE277AM*1*;*;E*B'E9i=J=T=TUZ=[:L/?!#D<$7#89@@B&,,"i/ !KLL/);H5#5"*.'.~~h'?'I'I'K14X	 7|},w0G0Q0Q0SWd0d !VWW&8"*+)	K 3=Z **>	P077@A
 !!"34 LL*+ %K
 !&&sA.q1779F*0*:*:3*?'FIx"  J  ~I  J  J~~c3/<<>,,. !GHHu{ :MJhj  ~- !STT$x/HX;<))+G070A0A%0H-E?I xxz 2  !)z0 fh  $b!4 56==?? 22 !QRRLL"/);H:#+.&1]!K=#A'.~~h'?'I'I'K14X	Qd 7;/3N>>
*%';>>
*%'9>>
*+-B
 3~.9: $$X.<JKK)12##%''GMMOv,EFGG%%'*EDEE((!/!9Hh/# ( ( (&7 2!> E+ '*").."9"C"C"EG	
= ;N %)?KLLB.&~~OOE"''9>>*:'(BC 

)+";4VW#
 "7D
$^^IdO<FFH'.~~j'A'K'K'M).( } $# 		7+=+=> F;<#EFb ,+V #L$6$67 	PEFCO	PsU   Ae .A+d:e f* f :e?e (f /e;;f f	f:)f55f:c           
        t        | d       t        |dd       t        |d       t              }r|j                         sd|j                  v rt	        d      	 t        j                  |      5 }|j                         }|vrt	        d      |j                        }|D cg c]  }|j                  d	      s| }	}t        |	      d
k7  rt	        d      t        |j                  |	d         |	d   d      }
t        fd|
D        d      }|:|d
   t        j                  |      j                         k7  s|d   t        |      k7  rt	        d      	 ddd       | j#                         }|j#                         }|k7  s||k7  rt	        d      t        j                  |      j                         }j%                  d      j'                  dd      |t        |      t)        | j+                  d            t)        |j+                  d            t)        |j+                  d            dS c c}w # 1 sw Y   xY w# t
        j                   $ r}t	        d      |d}~ww xY w)zJProve one packaged helper is byte-identical in source, wheel, and install.zmodule sourcezmodule wheelTrD   zinstalled moduler   zwheel module path is invalidz$packaged module is absent from wheel.dist-info/RECORDrH   z#wheel RECORD cardinality is invalidr   c              3  4   K   | ]  }|d    k(  s|  yw)r   Nr  )r=   itemwheel_members     r   r@   z0verify_packaged_module_parity.<locals>.<genexpr>B  s     IaL1Hs   Nr   z/packaged module wheel RECORD binding is invalidzmodule wheel is invalidz0source, wheel, and installed module bytes differz.pyr   r  r7   )rB  r$   r   source_pathr   r   )rY   r   r   r   rP   r   r   r   r    endswithrr   r   nextr#   r$   r(   r   r   r   r2   rf   r;   )sourcer   rP  r   memberr   r   r   r4   record_namesr   r   rz   source_bytesinstalled_bytesr*   s     `             r   verify_packaged_module_parityrY  *  s?    V_%UND1Y*+,F6--/46<<3G788=__U#w$$&E5( !GHHll<0G-2YUTdmmDW6XDULY< A% !FGG\!_ =|AP^_DII4PC{c!fw(?(I(I(KKsSTvY\]dYeOe !RSS Pf $ $$&L**,Ow/W"<KLL^^G$..0F++E2::3DG6>>>67%--t-45i//t/<=  Z $#  =23<=sI   I 45H?)H: H:BH?I :H??II I/I**I/c                	   | j                         } |j                         }|j                         }t        | d       |j                         rt        || f      st	        d      g }t        |j                  d            D ]  }|j                         s|j                         s$|dz  }|j                         r|j                         rJ|j                         }t        t              j                  |      }	t        |	j                  dd            }
t        |	j                  dd            }t        |
      t        |      k(  s|j!                  |||
|f        t#        |      d	k7  rt	        d
|       |d   \  }}}}|st	        d|       |dz  }t%        || d       |j                         }|j'                  |      j)                         }t+        |||      }g }|D ]  \  }}}||z  }	 |j-                  d       t        || f      st	        | d      t%        || d       ||k(  r/t1        j2                  |      j5                         }t#        |      }nO|j7                         j8                  }||k7  rt	        | d|       t;        |      }||k7  rt	        | d|       |j!                  |||d        t=        ||j>                  ||||       }tA        |||| |d      }|j                  d      }tC        |tD              st	        d      tG        tD        t        tH        f   |      }t        |d         }|D cg c]  }|j                  d      |k(  r|d|dn|  }}g }|D ]t  } | rd | v sd!| v rt	        d"      || z  }!|!j                         s|!j                         st	        d#|        |j!                  t        |!j-                  d                   v ||t        |j-                  d            t1        j2                  |      j5                         |t        |j-                  d            t1        j2                  |      j5                         |j>                  t        |      t;        |      ||t1        j2                  tK        |            j5                         |d$S # t.        $ r}t	        | d|       |d}~ww xY wc c}w )%zCRecompute one wheel's installed inventory from METADATA and RECORD.zinstalled venvz+site-packages is outside the installed venvz*.dist-infoMETADATA)policyNamer}   VersionrH   z/installed distribution cardinality is invalid: r   z/installed distribution version is unavailable: r   z RECORDTr7   z RECORD file is unavailable: Nz' RECORD path escapes the installed venvz RECORD filez RECORD size mismatch: z RECORD hash mismatch: )r)   r$   r   )r   r   )r   r   r*  r   r   r   r  r  r   r)   r  )r)   r   r`   r  r   zimport package name is invalidz'installed package root is unavailable: )r   distribution_versionr*  metadata_sha256package_rootsr   record_sha256wheel_filenamer   r   r  installed_inventoryinstalled_inventory_sha256rK  )&absoluter^   is_dirrC   rP   r)  glob
is_symlinkis_filer   r   r   
parsebytesrf   r   r5   r   rr   rY   r!  r   r   r;   r   r#   r$   r(   rM   st_sizer,   r   r4   rK  re   rj   r   r   r   )"r   r   r   r   import_packagesmatchesr*  metadata_pathmetadatamessager4   versiondeclared_namer+  record_datar   r   	inventoryr   r   r   r6  rz   actual_hashactual_sizer  record_projectiondirect_url_valuer  direct_url_pathr   ra  packager>   s"                                     r   inspect_installed_distributionr|  V  s     ==?D!**,MNNEt-.!)HFGG24GM..}=>	!)9)9);!J.$$&-*B*B*D ++-X.99(C7;;vr*+gkk)R014=G$566NNIxw?@ ? 7|qJK\J]^__29!*/IxJK\J]^__!FV)*'23##%K((7@@BO_6GHD)+I26.-)	eNN$N' vw' 122YZ[[-.l;<&!..5??AKk*K ++-//Km+ $5#66MhZ!XYY%f-Km+ $5#66MhZ!XYY(k;WX' 37( +# 3#' ),,-DE&-KLL c6k!24DE/0GHIO  C wwv/1	 (A3      "M"#.C7N=>>w&??DKKMFwiPQQST!:;< # + '**$*78">>(3==?&6>>>67 4>>@**%j#E*2(&-nnYy5I&J&T&T&V&7 s  	e 122OPXzZ[add	eJs   6R>#S >	SSS)search_path
executablec                   | j                         } |j                  d      }| t        j                  dk(  rdndz  }|j	                         st        d      |xs t        t        j                        j                         }	 t        j                  j                  ||      }|st        d      t        |t        j                  n|      }g }	|D ]c  t        xs t        j                               j                         }
|
j	                         sC|	j                  |
j                  d             e 	 |	j                  |      }|	d	| D ]*  |k(  r	t!        fd|D              st        d        |j                  d      }|j#                         }t%        j&                  |j(                        r"t%        j*                  |j(                        dz  rt        d      t-        |j                               t-        |      t/        |      t1        t        j2                  d	d       t-        |      dS # t        $ r d}Y w xY w# t
        $ r}t        d
      |d	}~ww xY w)zDReject another import authority ahead of the declared site-packages.Tr7   ntzScripts/python.exer   z$installed interpreter is unavailableFz?running interpreter differs from declared installed interpreterNz=declared site-packages is absent from interpreter search pathc              3  D   K   | ]  }|z  j                           y wrd   )exists)r=   r{  entrys     r   r@   z.validate_import_environment.<locals>.<genexpr>  s     Ig'')s    z2import authority precedes declared site-packages:    z(selected toolchain interpreter is unsafer   )declared_pathresolved_pathr$   rr  r   )rf  r;   rT   r4   r  rP   r   sysr~  r)   r   r   tuplegetcwdr   indexrA   rL   rM   rQ   rO   rV   rf   r,   r   version_info)r   r   rm  r}  r~  declared_pythonactualsameentriesresolved_entriesr   
site_indexrz   interpreterinterpreter_infor  s                  @r   validate_import_environmentr    s7    ==?D!)))6Mbggo2<XO!!#?@@0D0::<Fww8 Z[[ 3CHHEG#%-"))+.779	##I$5$5T$5$BC c%++M:
 "+:.M!IIIQRWQXYZZ	 /
 ")))6K"((*LL)112<<(001E9CDD_5578[)k*((!,-]+ 5    cXY_bbcs*    H? :I ?II	I+I&&I+c          	        t        d |D              }g }t        | j                               D ]  \  }}|j                         }t	        ||      st        d|       t        |d|        |j                  |t        |j                  d            t        |      |j                         j                  d        |S )Nc              3  @   K   | ]  }|j                  d         ywr:   )r;   )r=   r>   s     r   r@   z)loaded_module_receipts.<locals>.<genexpr>  s     F$,,d,+s   z3loaded module is outside declared installed roots: zloaded module Tr7   )rB  r)   r$   r   )r  r)  r&  rf  rC   rP   rY   r   rf   r;   r,   rM   rl  )modulesallowed_rootsrB   receiptsr4   raw_pathr)   s          r   loaded_module_receiptsr     s     FFFE(*H 1h  "tU#RSWRXYZZv./DLLL56%d+		++		
 2 Or   c                   t        t        t        t        f   | j	                  d            }i }dD ]a  }t        t        t        t        f   |j	                  |            }t        t
        t        t        t        f      |j	                  d            D cg c]^  }dt        t        |j	                  dd                  j                  vr,t        |j	                  dd            j                  d      s|` }}dD ci c]  }||j	                  |       }}t        t        t        t        f   |j	                  d	            }	|	j	                  d
      |d<   ||d<   t        j                  t        |            j                         |d<   |||<   d t        t        t        t        f   | j	                  d            }
d|
j	                  d      |
j	                  d      d|dS c c}w c c}w )zGRetain only path-independent installed facts and projection identities.distributionsprofilehermesrd  r   r)   r}   rM  )r   r_  r`  rc  r   r  rK  r  !portable_record_projection_sha256re  r  z$installed-golden-runtime-portable-v2r$   rr  )r$   rr  )r   r  r  )r   r	   rf   r   r   r
   r   r   rR  r#   r$   r   r(   )runtimer  portable_distributionsroler   r   ru  rg   portable_distribution
projectionr  s              r   portable_installed_runtimer    s   f-w{{?/KLM02%GCK0-2C2CD2IJ HWS&[%9:L<L<LMb<cd
d4CGGFB$7 89???+,556IJ d 	 
4
 !!#&& 	 4
 CK ,"2"23O"P

 FP^^F
AB 8A34>Enni ?

)+ 	:; (=t$3 &4 wsF{+W[[-GHK8!ooh/"y1
 0 3
4
s   A#G)?G.c                j    t        | t              xr" t        |       dk(  xr t        d | D              S )N@   c              3  $   K   | ]  }|d v  
 yw)0123456789abcdefNr  r	  s     r   r@   z_hex_digest.<locals>.<genexpr>B  s     GI	//r  )re   rf   rr   allr   s    r   _hex_digestr  >  s7    5# 	HJ"	HGGGr   c               x   |dvst        |      st        d      | j                  d      }t        |t              st        d      t        t        t        t        f   |      }i }dD ]  }|j                  |      }t        |t              st        d      t        t        t        t        f   |      }|j                  d      }	t        |	t              st        d      t        t        t        t        f   |	      }
|
j                  d	      }t        |t              rt        |t        t        f      rt        d
      t               }|D ]`  }t        |t              st        t        t        t        f   |      }|j                  d      }|dv sG|j                  t        |             b |
j                  d      }t        |t              st        d      t        t        t        t        f   |      }|j                  ddh       t        |      }|j                  d      |j                  d      |
j                  d      |
j                  d      d|j                  d      |j                  d      dd|d
||<    d|||dd}t        j                  t!        |            j#                         |d<   |S )zDBind raw RECORD hashes without making them portable equality inputs.>   original
rehydratedz,nonportable RECORD audit identity is invalidr  z2nonportable RECORD audit distributions are invalidr  z0nonportable RECORD audit distribution is invalidrK  z(nonportable RECORD projection is invalidr  z.nonportable RECORD classifications are invalidr   >   r   r  r  z'nonportable direct URL audit is invaliddirect_url_absolute_file_urldirect_url_raw_record_hashr   r   r  r  Fr   r   Avalidated_path_dependent_installer_material_may_change_raw_record)
r   r   portable_projection_sha256r  r  raw_direct_url_sha256 raw_direct_url_record_row_sha256+raw_direct_url_equality_required_or_claimedreasonpath_dependent_classifications,task26-nonportable-installed-record-audit-v1)r   install_rolecandidate_digestr  0raw_direct_url_hash_equality_required_or_claimedaudit_sha256)r  rP   r   re   r	   r   rf   r   r
   bytesr   r   r'   r)  r#   r$   r   r(   )r  r  r  distributions_valuer  audit_distributionsr  distribution_valuer   projection_valuer  generated_valueclassification_valuesgenerated_rowr2  r   raw_direct_url_valuer  classificationsaudits                       r   "nonportable_installed_record_auditr  F  s    55[> GHH!++o6)73MNNf-/BCM-/%*..t4,g6OPPGCK02DE'++,HI*G4GHH'#v+.0@A
$..)<=/84
c5\9
 MNN*-%,MmW5WS&[1=AI==(D   &))#d)4 -  *~~.>?.8FGGgc6k24HI$$+-IJ	
 !!67(,,-@A(,,^<*4..9L*M+5>>-, .3%3%7%7%F0>0B0B#1 <AY.=%
D!C &d A$,,<A E $NN9U+;<FFHE.Lr   c               4   t        | t              rt        |       h dk7  rt        d      t	        t        t
        t        f   |       }|j                         D ci c]  \  }}|dk7  s|| }}}|j                  d      }|j                  d      }	t        |t              rt        |	t              st        d      t	        t        t
        t        f   |      }
t	        t        t
        t        f   |	      }|j                  d      dk7  s|j                  d      |k7  su|j                  d	      |k7  sa|j                  d
      dusN|j                  d      t        j                  t        |            j                         k7  st        |      ddhk7  rt        d      dD ]  }|j                  |      }|
j                  |      }t        |t              rt        |t              st        d      t	        t        t
        t        f   |      }t	        t        t
        t        f   |      }|j                  d      }t        |      h dk7  s6|j                  d      |j                  d      k7  s|j                  d      |j                  d      k7  s|j                  d      |j                  d      k7  st        |j                  d            r|j                  d      dust        |j                  d            r|j                  d      |j                  d      k7  sb|j                  d      dusO|j                  d      dk7  s;t        |t              r+|t!        t        |            k7  st#        d |D              st        d       |S c c}}w ) N>   r   r  r  r  r  r  z4nonportable installed RECORD audit schema is invalidr  r  z<nonportable installed RECORD audit distributions are invalidr   r  r  r  r  Fr  r  z5nonportable installed RECORD audit binding is invalidr  z1nonportable installed RECORD audit row is invalidr  >
   r  r   r   r  r  r  r  r  r  r  r   r   r   r  r  r  r  r  r  r  r  r  c              3  $   K   | ]  }|d v 
 yw)>   r   r  r  r  Nr  )r=   rO  s     r   r@   z>validate_nonportable_installed_record_audit.<locals>.<genexpr>  s&      	 ,D  ,r  )re   rj   r   rP   r   rf   r   r&  r   r	   r#   r$   r   r(   r  r   r)  rA   )r   r  r  runtime_portabler  rg   rO  unsignedportable_distributions_valueaudit_distributions_valuer  r  r  	row_valueportable_valuer   r   r  s                     r   +validate_nonportable_installed_record_auditr    s-    eT"c%j 5 ' OPPc6k"E*E+0;;=R=ic4C><QT	=HR#3#7#7#H  %		/ :2G<J!7E WXX!'#v+"68TUwsF{35NO		(MM99^$499'(,<<99GHPUU99^$>>)H-.88:;"#	8'<<PQQ%'++D1	/33D9)W-ZG6
 PQQ73;'3V,n=''"BCH ww~&(,,7J*KKww~&(,,~*FFww34||?@Asww'DEFww67uDsww'>?@ww9:ww./0wwDEURwwx RSot4&_)=">> 	 ,	 	 PQQc &d LK Ss   N*Nc                    t        | |d      }t        | ||dd      }t        | ||dd      }dt        | j                               t        |j	                  d	
            |||ddS )N)checkin_cligateway)r   r   rm  zphysique-checkin-cli)r  )r   r   r   r   rm  zhermes-agent)r  zinstalled-golden-runtime-v1Tr7   r  )r   r   r   r  r  )r  r|  rf   rf  r;   )r   r   profile_wheelhermes_wheelr  r  r  s          r   collect_installed_runtimer    s     .#2K
 -#0(G ,#($F 0DMMO$]22$2?@"%,? r   )r   r   r   r  )r)   r   r   rf   )r4   rf   r   rf   )r)   r   rB   zIterable[Path]r   bool)r)   r   rW   rf   rE   r  r   None)r)   r   rW   rf   r   r  )r)   r   r   zdict[str, Any])r   rf   rW   rf   r   rf   )r   r  r   rf   rW   rf   r   z!list[tuple[str, str, int | None]])r   r   r   rf   r   z%Sequence[tuple[str, str, int | None]]rW   rf   r   r   r   r   r   rf   )r   r  rW   rf   r   r   )r   r  r   rf   r   rf   r   rf   r   r   r   rf   r   z+tuple[dict[str, object], dict[str, object]])r   r   r   r   r*  r   r   r   r   rf   r   r  r   r   )
rT  r   r   r   rP  rf   r   r   r   r   )r   r   r   r   r   r   r   rf   rm  Sequence[str]r   r   )r   r   r   r   rm  r  r}  zSequence[str] | Noner~  zPath | Noner   r   )r  zMapping[str, Path]r  zSequence[Path]r   zlist[dict[str, object]])r  Mapping[str, object]r   r   )r   r   r   r  )r  r  r  rf   r  rf   r   r   )
r   r   r  rf   r  rf   r  r  r   r   )
r   r   r   r   r  r   r  r   r   r   )2__doc__
__future__r   rp   r"  r   r#   r   r   rT   rM   r  r   email.parserr   email.policyr   pathlibr   typingr   r   r	   r
   r   urllib.parser   r   r   r,   r5   rC   rY   r^   rk   r{   r   r   r   r   rK  rY  r|  r  r  r  r  r  r  r  r  r   r   <module>r     s   O "   
  	  	  
  $ !  9 9 3?~
 9> AA'
:1?1?1? :1? 	1? 1? 1? 	1?h*,OO O 	O
 O O O 1Or  %TT T 	T
 T T T Tn)) ) 	)
 ) )Xs
s s 	s
 s #s sv )-"1
1 1 #	1
 &1 1 1h3A*&RI!I I 	I
 IXVV V 	V
 +V Vr 
    	 
    r   