
    diMa                       d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZmZmZ ddlmZ ddlT ddlT ddlZddlmZmZmZmZmZ dd	lm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& dd
lm'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddlm.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddlm6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddlm<Z<m=Z=m>Z> ddlm?Z? ddl@T ddlAmBZBmCZC ddlDmEZEmFZFmGZG ddlDmHZHmIZI ddlJmKZKmLZLmMZM i dddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4i d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVi dWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxi dydzd{d|d}d~ddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddēddƓddȓddʓdd̓ddΓddГddғddԓddFddדddٓddۓddݓi ddߓddddddddddddddddddddddddddddddddi d ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,
ZNd-d.d/d0d1d2ZOdddXd3ZP G d4 d5eQd67          ZR G d8 d9eS          ZT G d: d;eU          ZV G d< d=eU          ZW G d> d?eX          ZY G d@ dAeU          ZZ G dB dCeU          Z[ G dD dEeC          Z\ G dF dGeS          Z] G dH dIeU          Z^ G dJ dKeU          Z_ G dL dMeU          Z` G dN dOea          Zb G dP dQea          Zc G dR dSea          Zd G dT dUeS          Ze G dV dWeC          Zf G dX dYeU          Zg G dZ d[eU          Zh G d\ d]eU          Zi G d^ d_eX          Zj G d` daeX          Zk G db dceU          Zl G dd deeS          Zm G df dgeS          Zn G dh dieS          Zo G dj dkeU          Zp G dl dmeS          Zq G dn doeS          Zr G dp dqeU          Zs G dr dseS          Zt G dt dueU          Zu G dv dwea          Zv G dx dyeU          Zw G dz d{eU          Zx G d| d}eU          Zy ed~ez  dez            Zz G d deU          Z{ G d deU          Z| G d deU          Z} G d de~          Z G d deS          Z G d deS          Z G d deS          Z G d deS          Z G d deU          Z G d deU          Z G d deS          Z G d deU          Z G d deU          Z G d deU          Z G d deU          Z G d deU          Z G d deU          Z G d deU          Z G d deS          Z G d de~          Z G d deC          Z G d deU          Z G d deU          Z G d deU          Z G d deU          Z G d deU          Z G d deU          Z G d deU          Z G d de~          Z G d deU          Z G d deU          Z G d de~          Z G d deU          Z G d deU          Z G dĄ deU          Z G dƄ deU          Z G dȄ de~          Z G dʄ de~          Z G d̄ de~          Z G d΄ de~          Z G dЄ de~          Z G d҄ de          ZdԐdՐd֐dאdؐdِdڜiZ G dۄ de          Z G d݄ de          ZdS (  z/
Various constants from 3GPP TS 31.102 V17.9.0
    N)Optional)	Int32ubNibbleGreedyRangeStruct	FlagsEnumSwitchthisInt16ubPadding)BytewiseInt24ubInt24sbPaddedStringPrefixedArrayIf)	is_hexstr)*)	EF_ACMmaxEF_AAeMEF_eMLPPEF_CMIEF_PNN)EF_MMSN	EF_MMSICPEF_MMSUP	EF_MMSUCPEF_VGCSEF_VGCSSEF_NIA)EF_SMSREF_DCKEF_EXTEF_CNLEF_OPLEF_MBIEF_MWIS)EF_CBMIDEF_CBMIREF_ADNEF_CFISEF_SMS	EF_MSISDNEF_SMSPEF_SMSS)EF_IMSIEF_xPLMNwAcTEF_SPNEF_CBMIEF_ACC
EF_PLMNsel)EF_Kc	EF_CPBCCH
EF_InvScan)EF_ARR)DF_PHONEBOOKEF_UServiceTable)EF_IMSConfigDataEF_XCAPConfigDataEF_MuDMiDConfigData)EF_AC_GBAUAPI	EF_IMSDCI)SMS_TPDUDeviceIdentitiesSMSPPDownload   zLocal Phone Book   zFixed Dialling Numbers (FDN)   zExtension 2   zService Dialling Numbers (SDN)   
Extension3   zBarred Dialling Numbers (BDN)   
Extension4   z'Outgoing Call Information (OCI and OCT)	   z'Incoming Call Information (ICI and ICT)
   zShort Message Storage (SMS)   z#Short Message Status Reports (SMSR)   z'Short Message Service Parameters (SMSP)   zAdvice of Charge (AoC)   z,Capability Configuration Parameters 2 (CCP2)   z!Cell Broadcast Message Identifier   z(Cell Broadcast Message Identifier Ranges   Group Identifier Level 1   Group Identifier Level 2   zService Provider Name   z4User controlled PLMN selector with Access Technology   MSISDN   zImage (IMG)   z*Support of Localised Service Areas (SoLSA)   z7Enhanced Multi-Level Precedence and Pre-emption Service   zAutomatic Answer for eMLPP   RFU   
GSM Access   zData download via SMS-PP   zData download via SMS-CB   zCall Control by USIM   zMO-SMS Control by USIM    zRUN AT COMMAND command!   zshall be set to 1"   Enabled Services Table#   zAPN Control List (ACL)$   zDepersonalisation Control Keys%   zCo-operative Network List&   zGSM security context'   zCPBCCH Information(   zInvestigation Scan)   MexE*   z8Operator controlled PLMN selector with Access Technology+   z%HPLMN selector with Access Technology,   zExtension 5-   zPLMN Network Name.   zOperator PLMN List/   Mailbox Dialling Numbers0   z!Message Waiting Indication Status1   z!Call Forwarding Indication Status2   zReserved and shall be ignored3   $Service Provider Display Information4   z"Multimedia Messaging Service (MMS)5   zExtension 86   zCall control on GPRS by USIM7   z MMS User Connectivity Parameters8   z0Network's indication of alerting in the MS (NIA)9   z/VGCS Group Identifier List (EFVGCS and EFVGCSS):   z,VBS Group Identifier List (EFVBS and EFVBSS);   	Pseudonym<   z/User Controlled PLMN selector for I-WLAN access=   z3Operator Controlled PLMN selector for I-WLAN access>   zUser controlled WSID list?   zOperator controlled WSID list@   zVGCS securityA   zVBS securityB   WLAN Reauthentication IdentityC   zMultimedia Messages StorageD   z(Generic Bootstrapping Architecture (GBA)E   zMBMS securityF   z0Data download via USSD and USSD application modeG   Equivalent HPLMNH   z1Additional TERMINAL PROFILE after UICC activationI   (Equivalent HPLMN Presentation IndicationJ   zLast RPLMN Selection IndicationK   zOMA BCAST Smart Card ProfileL   z+GBA-based Local Key Establishment MechanismM   zTerminal ApplicationsN   Service Provider Name IconO   PLMN Network Name IconP   z/Connectivity Parameters for USIM IP connectionsQ   $Home I-WLAN Specific Identifier ListR   /I-WLAN Equivalent HPLMN Presentation IndicationS    I-WLAN HPLMN Priority IndicationT   I-WLAN Last Registered PLMNU   z#EPS Mobility Management InformationV   z/Allowed CSG Lists and corresponding indicationsW   z*Call control on EPS PDN connection by USIMX   zHPLMN Direct AccessY   z
eCall DataZ   z0Operator CSG Lists and corresponding indications[   zSupport for SM-over-IP\   zSupport of CSG Display Control]   z%Communication Control for IMS by USIM^   zExtended Terminal Applications_   zSupport of UICC access to IMS`   z(Non-Access Stratum configuration by USIMa   zPWS configuration by USIMb   c   zURI support by UICCd   zExtended EARFCN supporte   ProSef   zUSAT Application Pairingg   zMedia Type supporth   zIMS call disconnection causei   z(URI support for MO SHORT MESSAGE CONTROLj   z&ePDG configuration Information supportk   z)ePDG configuration Information configuredl   zACDC supportm   MCPTTn   z<ePDG configuration Information for Emergency Service supporto   z?ePDG configuration Information for Emergency Service configuredp   zeCall Data over IMSq   zAURI support for SMS-PP DOWNLOAD as defined in 3GPP TS 31.111 [12]r   From Preferreds   zIMS configuration datat   zTV configurationu   z3GPP PS Data Offv   z3GPP PS Data Off Service Listw   V2Xx   zXCAP Configuration Datay   EARFCN list for MTC/NB-IOT UEsz   z#5GS Mobility Management Information{   z5G Security Parameters|   z'Subscription identifier privacy support}   zSUCI calculation by the USIM~   zUAC Access Identities support   z_Expect control plane-based Steering of Roaming information during initial registration in VPLMN   z#Call control on PDU Session by USIM   5GS Operator PLMN List   z*Support for SUPI of type NSI or GLI or GCI   z03GPP PS Data Off separate Home and Roaming lists   zSupport for URSP by USIM   z5G Security Parameters extended   zMuD and MiD configuration data   z4Support for Trusted non-3GPP access networks by USIM   zVSupport for multiple records of NAS security context storage for multiple registrationz#Pre-configured CAG information listzSOR-CMCI storage in USIMz5G ProSez/Storage of disaster roaming information in USIMzPre-configured eDRX parametersz5G NSWO supportz"PWS configuration for SNPN in USIMzRMultiplier Coefficient for Higher Priority PLMN search via NG-RAN satellite accessK_AUSF derivation configurationz!Network Identifier for SNPN (NID))
                              05G ProSe configuration data for direct discovery45G ProSe configuration data for direct communication65G ProSe configuration data for UE-to-network relay UE)5G ProSe configuration data for remote UE;5G ProSe configuration data for usage information reporting)rD   rE   rF   rG   rH   )rD   rE   rF   c                       e Zd ZeZdS )SUCI_TlvDataObjectN__name__
__module____qualname__GreedyBytes
_construct     =/home/jenkins/workspace/simtester-sanitize/pySim/ts_31_102.pyr   r      s        JJJr   r      tagc                       e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d ded          Z G d ded          Z	 G d dedeeeeee	g          Z
	 	 d fd	Z xZS )EF_5GS3GPPNSCc                       e Zd ZeZdS )EF_5GS3GPPNSC.NgKSINr   r   r   Int8ubr   r   r   r  NgKSIr             


r   r  r   r  c                   $    e Zd Z ed          ZdS )EF_5GS3GPPNSC.K_AMFrj   Nr   r   r   Bytesr   r   r   r  K_AMFr     s        U2YY


r   r  r   c                       e Zd ZeZdS )EF_5GS3GPPNSC.UplinkNASCountNr   r   r   r   r   r   r   r  UplinkNASCountr             


r   r  r   c                       e Zd ZeZdS )EF_5GS3GPPNSC.DownlinkNASCountNr  r   r   r  DownlinkNASCountr     r  r   r  r   c                   2    e Zd Z edez  dez            ZdS )#EF_5GS3GPPNSC.IdsOfSelectedNasAlgos	ciphering	integrityNr   r   r   	BitStructr   r   r   r   r  IdsOfSelectedNasAlgosr     )        Y{61;v3EFF


r   r   r   c                   2    e Zd Z edez  dez            ZdS )#EF_5GS3GPPNSC.IdsOfSelectedEpsAlgosr  r  Nr  r   r   r  IdsOfSelectedEpsAlgosr#     r!  r   r$  r   c                       e Zd ZdS )&EF_5GS3GPPNSC.FiveGSNasSecurityContextNr   r   r   r   r   r  FiveGSNasSecurityContextr&              	r   r(     r  nested4f03rF   EF.5GS3GPPNSCr   N$5GS 3GPP Access NAS Security Contextc                 h     t                      j        |f||||d| t          j        | _        d S )Nsfidnamedescrec_len)super__init__r  r(  _tlvselffidr3  r4  r6  r5  kwargs	__class__s          r  r8  zEF_5GS3GPPNSC.__init__   s<    Y4dwYYRXYYY!:			r   )r-  rF   r.  r/  r0  )r   r   r   
BER_TLV_IEr  r  r  r  r   r$  r(  r8  __classcell__r>  s   @r  r  r     s           
        
                :4    G G G G G
 G G G GG G G G G
 G G G G    :4+0%+;=R+@+B    MW<; ; ; ; ; ; ; ; ; ;r   r  c                        e Zd Z G d ded          Z G d ded          Z G d d	eeeg
          Z	 	 d fd	Z xZ	S )EF_5GAUTHKEYSc                       e Zd ZeZdS )EF_5GAUTHKEYS.K_AUSFNr   r   r   r  K_AUSFrE             


r   rF  r   r  c                       e Zd ZeZdS )EF_5GAUTHKEYS.K_SEAFNr   r   r   r  K_SEAFrI  	  rG  r   rJ  r   c                       e Zd ZdS )EF_5GAUTHKEYS.FiveGAuthKeysNr'  r   r   r  FiveGAuthKeysrL            r   rM  r,  4f05rH   EF.5GAUTHKEYSr   N5G authentication keysc                 h     t                      j        |f||||d| t          j        | _        d S Nr3  r4  r5  size)r7  r8  rC  rM  r9  r;  r<  r3  r4  rW  r5  r=  r>  s          r  r8  zEF_5GAUTHKEYS.__init__  s;    S4dDSSFSSS!/			r   )rP  rH   rQ  rR  rS  )
r   r   r   r?  rF  rJ  TLV_IE_CollectionrM  r8  r@  rA  s   @r  rC  rC    s        ! ! ! ! ! ! ! ! !! ! ! ! ! ! ! ! !    )662B     JT.0 0 0 0 0 0 0 0 0 0r   rC  c                       e Zd Zdddddddddgd ed          dd ed	          dgd
fgZ G d ded          Z G d ded          Z G d ded          Z G d dedeeg          Z	 G d de
ee	g          Z	 	 d, fd!	Zd" Zed#ee         d$ee         fd%            Zed#ee         d$ee         fd&            Zd' Zd( Zd) Zd* Zd+ Z xZS )-EF_SUCI_Calc_InfoڤA00401010000A14A80010A81204E858C4D49D1343E6181284C47CA721730C98742CB7C6182D2E8126E08088D3680010B8120D1BC365F4997D17CE4374E72181431CBFEBA9E1B98D7618F79D48561B144672Ar   rD   priority
identifier	key_indexrO   @4e858c4d49d1343e6181284c47ca721730c98742cb7c6182d2e8126e08088d36)hnet_pubkey_identifierhnet_pubkeyrP   @d1bc365f4997d17ce4374e72181431cbfeba9e1b98d7618f79d48561b144672aprot_scheme_id_listhnet_pubkey_listc                   ^    e Zd Z e ed eeddd          z  dez                      ZdS )"EF_SUCI_Calc_Info.ProtSchemeIdListr_  r   rD   rE   )nullABr`  N)	r   r   r   r   r   EnumByter
  r   r   r   r  ProtSchemeIdListri  !  sO         ![F<TQ! < < <<k&>PQQS S


r   ro  r*  r  c                       e Zd ZeZdS )&EF_SUCI_Calc_Info.HnetPubkeyIdentifierNr	  r   r   r  HnetPubkeyIdentifierrq  '  s        


r   rr  r   c                       e Zd ZeZdS )EF_SUCI_Calc_Info.HnetPubkeyNr   r   r   r  
HnetPubkeyrt  +           


r   ru  r   c                       e Zd ZdS ) EF_SUCI_Calc_Info.HnetPubkeyListNr'  r   r   r  HnetPubkeyListrx  /  rN  r   ry  r  r+  c                       e Zd ZdS )EF_SUCI_Calc_Info.SUCI_CalcInfoNr'  r   r   r  SUCI_CalcInfor{  3  rN  r   r|  rO  4f07rK   EF.SUCI_Calc_InforE   NSUCI Calc Infoc                 F     t                      j        |f||||d| d S rU  r7  r8  rX  s          r  r8  zEF_SUCI_Calc_Info.__init__6  s3    S4dDSSFSSSSSr   c                     dg}|                     t          |          dz             t          |d           D ]8}|                     |d                    |                     |d                    9|S )Nr*  rE   c                     | d         S )Nr^  r   )items    r  <lambda>z?EF_SUCI_Calc_Info._encode_prot_scheme_id_list.<locals>.<lambda>?  s    tJ7G r   )keyr_  r`  )appendlensorted)r;  in_list	out_bytesschemes       r  _encode_prot_scheme_id_listz-EF_SUCI_Calc_Info._encode_prot_scheme_id_list:  s    F	Wa((( W*G*GHHH 	2 	2FVL1222VK01111r   lreturnc                     g }t          |           rT|                     d          }|                     d          }i ||}|                    |           t          |           T|S )zconversion method to generate list of {hnet_pubkey_identifier, hnet_pubkey} dicts
        from flat [{hnet_pubkey_identifier: }, {net_pubkey: }, ...] listr   )r  popr  )r  outabzs        r  _compact_pubkey_listz&EF_SUCI_Calc_Info._compact_pubkey_listE  sh     !ff 	aAaA1

AJJqMMM	 !ff 	
 
r   c                 v    g }| D ]3}|                                 D ]\  }}|                    ||i           4|S )zconversion method to generate flat [{hnet_pubkey_identifier: }, {net_pubkey: }, ...] list
        from compacted list of {hnet_pubkey_identifier, hnet_pubkey} dicts)itemsr  )r  r  dkvs        r  _expand_pubkey_listz%EF_SUCI_Calc_Info._expand_pubkey_listQ  sV      	# 	#A		 # #1

Aq6""""#
r   c                 :   |                      |d                   }|                     |d                   }t                                          }|                    d|i           ||                                z  }d                    d |D                       S )Nrf  rg   c                     g | ]}d |z  S )z%02Xr   ).0is     r  
<listcomp>z1EF_SUCI_Calc_Info._encode_hex.<locals>.<listcomp>b  s    666q
666r   )r  r  r[  ry  	from_dictto_tlvjoin)r;  in_jsonr=  r  r  hpkls         r  _encode_hexzEF_SUCI_Calc_Info._encode_hex[  s    44)*, ,	$$W-?%@AA //11*A.///T[[]]"	ww66I666777r   c                     g }d}|t          |          k     rE|dz  ||         ||dz            d}|dz  }|                    |           |t          |          k     E|S )Nr   rE   rD   r]  )r  r  )r;  in_bytesrf  posprot_schemes        r  _decode_prot_scheme_id_listz-EF_SUCI_Calc_Info._decode_prot_scheme_id_listd  s}     CMM!!!1f&sm&s1uo K
 1HC&&{333 CMM!! #"r   c                 F    |                      t          |                    S N)_decode_hexb2h)r;  in_bins     r  _decode_binzEF_SUCI_Calc_Info._decode_binr  s    F,,,r   c                    t          |          }d}||         dk    rt          d           i S |dz  }||         }|dz  }|                     ||||z                      }||z  }t                                          }|                    ||d                     |                     |                                d                   }||dS )Nr   r*  z9missing Protection Scheme Identifier List data object tagrD   rg  re  )h2bprintr  r[  ry  from_tlvr  to_dict)r;  in_hexr  r  prot_scheme_id_list_lenrf  r  rg  s           r  r  zEF_SUCI_Calc_Info._decode_hexu  s    v;;C=D  MNNNIq"*3-q">>S44457 7&& !//11hsttn%%%44T\\^^DV5WXX $7#3
 
 	
r   c                 8    t           | j        |fi |          S r  )r  r  r;  r  r=  s      r  _encode_binzEF_SUCI_Calc_Info._encode_bin  s&    #4#G66v66777r   )r}  rK   r~  r  r  )r   r   r   r  _test_de_encoder?  ro  rr  ru  ry  rY  r|  r8  r  staticmethodListdictr  r  r  r  r  r  r  r@  rA  s   @r  r[  r[    s        q01QR#S#SbcdecdVf Vf #g <>!$%g!h!h!j !j;=!$%g!h!h!j !j kl l	n	OS S S S S:4 S S S S    zt    ! ! ! ! !ZT ! ! ! !    7KZ6X        )3C^2T     NW&T T T T T T	 	 	 	T
 	tDz 	 	 	 \	 tDz d4j    \8 8 8# # #- - -
 
 
48 8 8 8 8 8 8r   r[  c                   0     e Zd Z	 	 d
 fd	Zd Zd	 Z xZS )EF_LI6f05NEF.LIr  rE   Language Indicationc                 V    t                                          ||||||           d S Nr3  r4  r5  rW  r6  r  )r;  r<  r3  r4  rW  r6  r5  r>  s          r  r8  zEF_LI.__init__  s/    4dDRYZZZZZr   c                 <    |dk    rd S |                     d          S Ns   ascii)decode)r;  r  r=  s      r  _decode_record_binzEF_LI._decode_record_bin  s&    [  4 ==)))r   c                 4    |dS |                     d          S r  )encoder  s      r  _encode_record_binzEF_LI._encode_record_bin  s     ?; >>'***r   )r  Nr  r  rE   r  )r   r   r   r8  r  r  r@  rA  s   @r  r  r    sg        TU+[ [ [ [ [ [* * *+ + + + + + +r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_Keys6f08rM   EF.Keysrk   rk   Ciphering and Integrity Keysc                     t                                          |||||           t          dt          z  dt	          d          z  dt	          d          z            | _        d S )NrV  ksickrU   ik)r7  r8  r   r
  r  r   r;  r<  r3  r4  rW  r5  r>  s         r  r8  zEF_Keys.__init__  sZ    4dDIII &L$uRyy.$uRyy.: :r   )r  rM   r  r  r  r   r   r   r8  r@  rA  s   @r  r  r    sC        CK4: : : : : : : : : :r   r  c                   *     e Zd ZdgZ	 	 d fd	Z xZS )		EF_HPPLMN)05rH   6f31rX   	EF.HPPLMNrD   rD   "Higher Priority PLMN search periodc                 l    t                                          |||||           t          | _        d S rU  )r7  r8  r
  r   r  s         r  r8  zEF_HPPLMN.__init__  s1    4dDIII r   )r  rX   r  r  r  r   r   r   r  r8  r@  rA  s   @r  r  r    sJ        #oOEK:! ! ! ! ! ! ! ! ! !r   r  c                   \     e Zd Z fdZ ed           G d de                      Z xZS )EF_USTc           
           t                      j        ddddddt          d| | xj        |                                 gz  c_        d S )N6f38rG   zEF.USTzUSIM Service Table)rD   rV   r<  r3  r4  r5  rW  tabler   )r7  r8  
EF_UST_mapshell_commandsAddlShellCommandsr;  r=  r>  s     r  r8  zEF_UST.__init__  sr      	CV$XDX_emw  	C  	C  |B  	C  	C  	C 6 6 8 899r   File-Specific Commandsc                        e Zd Zd Zd Zd ZdS )EF_UST.AddlShellCommandsc                 |    | j         j        j        }|                    | j         t	          |          gg            dS )z Activate a service within EF.USTN_cmdlchanselected_file
ust_updateintr;  argr  s      r  do_ust_service_activatez0EF_UST.AddlShellCommands.do_ust_service_activate  6     IO9M$$TYS
B?????r   c                 |    | j         j        j        }|                    | j         g t	          |          g           dS )z"Deactivate a service within EF.USTNr  r  s      r  do_ust_service_deactivatez2EF_UST.AddlShellCommands.do_ust_service_deactivate  6     IO9M$$TYSXXJ?????r   c                    | j         j        j        }|                    | j                   }|                    | j                   }d|v r#d|vr| j                             d           |dz  }d|v r#d|vr| j                             d           |dz  }g d}|                                                                }d	|v r+|D ](}||v r"| j                             d
|z             |dz  })| j                             d|z             dS )a  Check consistency between services of this file and files present/activated.

            Many services determine if one or multiple files shall be present/activated or if they shall be
            absent/deactivated.  This performs a consistency check to ensure that no services are activated
            for files that are not - and vice-versa, no files are activated for services that are not.  Error
            messages are printed for every inconsistency found.rz   ry   z7ERROR: Service 46 available, but it requires Service 45rD   r   r   z:ERROR: Service 125 is ignored as Service 124 not available)r   r   r   zADF.ISIMzGERROR: Service %u shall not be available as ISIM application is presentz/===> %u service / file inconsistencies detectedN)	r  r  r  ust_service_checkget_active_servicesperrorget_mfget_app_namespoutput)r;  _argr  num_problemsactive_servicesnon_isim_services	app_namesss           r  do_ust_service_checkz-EF_UST.AddlShellCommands.do_ust_service_check  s=    !IO9M(::49EEL+??	JJO_$$R?-B-B	  !Z[[[!o%%c_.D.D	  !]^^^! -%,,..<<>>IY&&* * *AO++	(()ruv)vwww$)IOR^^_____r   N)r   r   r   r  r  r  r   r   r  r  r    sL        	@ 	@ 	@
	@ 	@ 	@
	` 	` 	` 	` 	`r   r  r   r   r   r8  with_default_category
CommandSetr  r@  rA  s   @r  r  r    s        : : : : :
 344&` &` &` &` &`J &` &` 54&` &` &` &` &`r   r  c                        e Zd ZdddddddddddfdddddddddddfgZdZ e e ed	                              Z e	e
d
dd	dddd          Z e ee                    Z	 	 d fd	Zd Zd Z xZS )EF_ECC19f1ff01911TF)police	ambulancefire_brigademarine_guardmountain_rescuemanual_ecallautomatic_ecall	call_codeservice_category19f3ff02913rF   rD   rE   rG   rH   rJ   rK   6fb7EF.ECCEmergency Call Codesc                 T    t                                          ||||d           d S )N)rG   r[   r2  r  )r;  r<  r3  r4  r5  r>  s        r  r8  zEF_ECC.__init__  s,    4dwOOOOOr   c                    |d d         }|dk    rd S |dd          }t          t          j        |          t          t          j        |          d}t	          |          dk    r'|dd         }t          t          j        |          |d<   |S )NrF   s   r  rG   alpha_id)parse_constructr  cc_constructcategory_constructr  alpha_construct)r;  r  r=  codesvc_categoryretr*  s          r  r  zEF_ECC._decode_record_bin  s    bqbz?""4bcc{+F,?FF#263Ll#[#[] ] v;;??ad|H-f.DhOOC
O
r   c                    |dS t           j                            |d                   }t           j                            |d                   }d|v r&t           j                            |d                   }nd}||z   |z   S )Ns   r   r!  r*  r   )r  r,  buildr-  r.  )r;  r  r=  r/  r0  r*  s         r  r  zEF_ECC._encode_record_bin
  s    ?&&"(()=>>066w?Q7RSS  -33GJ4GHHHH Hh--r   )r$  rD   r%  r&  )r   r   r   r  _test_no_padPaddedBcdAdapterRpadr  r,  r   rn  r-  GsmOrUcs2Adapterr   r.  r8  r  r  r@  rA  s   @r  r  r    sL       
U8<5bg>CX]>CX]-` -`b b 	d U8=Dbg>CX]>CX]-` -`b b 	d	O L##DDqNN33L"4QQ]^341VWY Y Y&&ttK'8'899O3;,P P P P P P  
. 
. 
. 
. 
. 
. 
.r   r  c                        e Zd Zd ed          d ed          ddddfd	 ed
          d ed          ddddfgZd fd	Z xZS )EF_LOCI47d1264a62f21037211e0047d1264a262-013721)mcc_mnclacrh   r   )tmsilairfu	lu_statusffffffff62f2200000ff01ffffffffz262-020000   rD   6f7erP   EF.LOCILocation informationrP   rP   c                 B   t                                          |||||           t          dt          t	          d                    z  dt	          d          z            }t          dt	          d          z  d|z  d	t
          z  d
t
          z            | _        d S )NrV  r>  rF   r?  rE   r@  rG   rA  rB  rC  r7  r8  r   PlmnAdapterr  r
  r   )r;  r<  r3  r4  r5  rW  Lair>  s          r  r8  zEF_LOCI.__init__   s    4dDIIIY{588444eE!HHnEE a%)U6\;W]K]^^r   )rH  rP   rI  rJ  rK  )r   r   r   r  r  r8  r@  rA  s   @r  r9  r9    s        
"C
OO##f++,W,WA( (	* #3z??xF+U+U^apq
r
r	u	O_ _ _ _ _ _ _ _ _ _r   r9  c                        e Zd Zdddddddddddfd	d
dddddddddfgZdZ G d dej                  Zd fd	Z xZ	S )EF_AD00000002normalFciphering_indicatorcsg_display_controlprose_servicesextended_drxr   rE   r   )ms_operation_modeadditional_inforB  mnc_len
extensions01000102normal_and_specific_facilitiesTc                   &    e Zd ZdZdZdZdZdZdZdS )EF_AD.OP_MODEr   r   rD   r   rE   rG   N)	r   r   r   rS  type_approvalr^  %type_approval_and_specific_facilitiesmaintenance_off_line	cell_testr   r   r  OP_MODEr`  3  s/        )-&04-#			r   re  6fadrF   EF.ADAdministrative DatarG   rJ   c                    t                                          |||||           t          dt          t	          t
          t          j                            z  dt          t          t          dddd                    z  d	t          d          z  d
t          d          z  dt          t          t                              z            | _        d S )NrV  rY  rZ  rD   rE   rG   rM   rT  rB  r[  r\  )r7  r8  r  r   rm  rn  rQ  re  r   r   BitsRFUBitsInteger	COptionalGreedyBytesRFUr   r;  r<  r3  r4  r5  rW  r>  s         r  r8  zEF_AD.__init__;  s    4dDIII#dEM)B)B C CChyaef@APQ(S (S (S T T T'!**k!nn$8N#;#;<<<	
 	
r   )rf  rF   rg  rh  ri  )
r   r   r   r  r4  enumIntEnumre  r8  r@  rA  s   @r  rQ  rQ  &  s        
XDIbg?DV[,^ ,^ QcD D 	F -MDHaf?DV[,^ ,^ QcD D 	F	O L    $,   
 
 
 
 
 
 
 
 
 
r   rQ  c                         e Zd Zd fd	Z xZS )	EF_PSLOCI6f73rQ   	EF.PSLOCIPS Location informationrS   rS   c                     t                                          |||||           t          dt          d          z  dt          d          z  dt          d          z  dt          z            | _        d S )	NrV  ptmsirG   	ptmsi_sigrF   rairJ   
rau_status)r7  r8  r   r  r
  r   ro  s         r  r8  zEF_PSLOCI.__init__J  sk    4dDIII q!1;uQxx3G!&uQxxf1DF Fr   )rt  rQ   ru  rv  rw  r  rA  s   @r  rs  rs  I  sG        F F F F F F F F F Fr   rs  c                   $     e Zd Z	 	 d fd	Z xZS )EF_ICI6f80r[   EF.ICIrf   r}   Incoming Call Informationc                     t                      j        d|||||d| t          dt          t          j        j        dz
            z  dt          z  dt          z  dt          t          t          d                              z  dt          z  d	t          z  d
t          t          d                    z  dt          z  dt          z  dt          d          z  
  
        | _        d S )Nr<  r3  r4  r5  r6  r*  rf   len_of_bcd_contentston_npicall_numberrO   cap_cfg2_record_idext5_record_iddate_and_timerK   durationstatuslink_to_phonebookrF   r   )r7  r8  r   r  r
   _	total_lenr
  r5  r6  
BcdAdapterr   rn  r   r:  s          r  r8  zEF_ICI.__init__Q  s    ]St$T7]]V\]]] E$&2B22E,F,F!F!6v!=!*6!1!./?U2YY/P/P!P!5f!<!1&!8!0E!HH1E1E!E!+G!3!)$!4U1XX!=	? 	?r   )r  r[   r  r  r  r  rA  s   @r  r~  r~  P  sC        EM1? ? ? ? ? ? ? ? ? ?r   r~  c                   $     e Zd Z	 	 d fd	Z xZS )EF_OCI6f81r\   EF.OCIrd   r{   Outgoing Call Informationc                     t                      j        d|||||d| t          dt          t          j        j        dz
            z  dt          z  dt          z  dt          t          t          d                              z  dt          z  d	t          z  d
t          t          d                    z  dt          z  dt          d          z  	  	        | _        d S )Nr  r*  rd   r  r  r  rO   r  r  r  rK   r  r  rF   r   )r7  r8  r   r  r
   r  r  r
  r5  r6  r  r   r   r:  s          r  r8  zEF_OCI.__init__a  s    ]St$T7]]V\]]] E$&2B22E,F,F!F!6v!=!*6!1!./?U2YY/P/P!P!5f!<!1&!8!0E!HH1E1E!E!+G!3!4U1XX!=? ?r   )r  r\   r  r  r  r  rA  s   @r  r  r  `  sC        EM1? ? ? ? ? ? ? ? ? ?r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_ICT6f82NEF.ICTrF   rF   Incoming Call Timerc           	      ~     t                      j        d|||||d| t          dt          z            | _        d S )Nr  accumulated_call_timerr   r7  r8  r   r   r   r:  s          r  r8  zEF_ICT.__init__p  sG    ]St$T7]]V\]]] !9'!ABBr   )r  Nr  r  r  r  rA  s   @r  r  r  o  sM        EK+C C C C C C C C C Cr   r  c                         e Zd Zd fd	Z xZS )EF_CCP26f4fr^   EF.CCP2%Capability Configuration Parameters 2c           	      F     t                      j        d||||dd| d S )N)rT   Nr  r   r  r;  r<  r3  r4  r5  r=  r>  s         r  r8  zEF_CCP2.__init__w  s4    `St$T:``Y_`````r   )r  r^   r  r  r  rA  s   @r  r  r  v  sG        a a a a a a a a a ar   r  c                   \     e Zd Z fdZ ed           G d de                      Z xZS )EF_ESTc           
           t                      j        ddddddt          d| | xj        |                                 gz  c_        d S )N6f56rH   zEF.ESTrm   rD   Nr  r   )r7  r8  
EF_EST_mapr  r  r  s     r  r8  zEF_EST.__init__|  sr      	IV$XD\cks}  	I  	I  BH  	I  	I  	I 6 6 8 899r   r  c                       e Zd Zd Zd ZdS )EF_EST.AddlShellCommandsc                 |    | j         j        j        }|                    | j         t	          |          gg            dS )zEnable a service within EF.ESTNr  r  s      r  do_est_service_enablez.EF_EST.AddlShellCommands.do_est_service_enable  r  r   c                 |    | j         j        j        }|                    | j         g t	          |          g           dS )zDisable a service within EF.ESTNr  r  s      r  do_est_service_disablez/EF_EST.AddlShellCommands.do_est_service_disable  r  r   N)r   r   r   r  r  r   r   r  r  r    :        	@ 	@ 	@
	@ 	@ 	@ 	@ 	@r   r  r  rA  s   @r  r  r  {  s        : : : : :
 344	@ 	@ 	@ 	@ 	@J 	@ 	@ 54	@ 	@ 	@ 	@ 	@r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_ACL6f57NEF.ACLrj   NAccess Point Name Control Listc                      t                      j        |f||||d| t          dt          z  dt          z            | _        d S )NrV  num_of_apnstlvs)r7  r8  r   r
  r   r   rX  s          r  r8  zEF_ACL.__init__  sL    S4dDSSFSSS v!5vk7IJJr   )r  Nr  r  r  r  rA  s   @r  r  r    sM        BL6K K K K K K K K K Kr   r  c                   4     e Zd ZddddfgZ	 	 d
 fd		Z xZS )EF_START_HFNf00000f00000i   )start_csstart_ps6f5brT   EF.START-HFNrJ   rJ   +Initialisation values for Hyperframe numberc                      t                      j        |f||||d| t          dt          z  dt          z            | _        d S )NrV  r  r  r  rX  s          r  r8  zEF_START_HFN.__init__  sL    S4dDSSFSSS G!3Z5GHHr   )r  rT   r  r  r  r  rA  s   @r  r  r    sh        
hHHJO IOCI I I I I I I I I Ir   r  c                   2     e Zd ZdddifgZ	 	 d
 fd		Z xZS )EF_THRESHOLDf01000	max_starti  6f5crU   EF.THRESHOLDr  Maximum value of STARTc                 ~     t                      j        |f||||d| t          dt          z            | _        d S )NrV  r  r  rX  s          r  r8  zEF_THRESHOLD.__init__  sE    S4dDSSFSSS W!455r   )r  rU   r  r  r  r  rA  s   @r  r  r    s[        
k8-/O IO.6 6 6 6 6 6 6 6 6 6r   r  c                   *     e Zd Z	 	 d	 fd	Zd Z xZS )
EF_RPLMNAcT6f65NEF.RPLMNAcTDrE   rG   rE   !RPLMN Last used Access Technologyc           	      H     t                      j        |f|||||d| d S r  r  	r;  r<  r3  r4  rW  r6  r5  r=  r>  s	           r  r8  zEF_RPLMNAcT.__init__  s7    d4dDRYdd]cdddddr   c                      t          |          S r  )dec_act)r;  r  r=  s      r  _decode_record_hexzEF_RPLMNAcT._decode_record_hex  s    vr   )r  Nr  r  rE   r  )r   r   r   r8  r  r@  rA  s   @r  r  r    sX        XY9e e e e e e      r   r  c                   $     e Zd Z	 	 d fd	Z xZS )		EF_VGCSCA6fd4N	EF.VGCSCArE   r   rE   ,Voice Group Call Service Ciphering Algorithmc           	           t                      j        |f|||||d| t          dt          z  dt          z            | _        d S )Nr  
alg_v_ki_1
alg_v_ki_2r7  r8  r   r
  r   r  s	           r  r8  zEF_VGCSCA.__init__  sP    d4dDRYdd]cddd f!4l66IJJr   )r  Nr  r  rE   r  r  rA  s   @r  r  r    sM        WXDK K K K K K K K K Kr   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_GBABP6fd6NEF.GBABPrF   r   GBA Bootstrapping parametersc                      t                      j        |f||||d| t          dt          z  dt          z  dt          z            | _        d S )NrV  randb_tidkey_lifetime)r7  r8  r   LVr   rX  s          r  r8  zEF_GBABP.__init__  sQ    S4dDSSFSSS GBJr8IJJr   )r  Nr  r  r  r  rA  s   @r  r  r    sM        DK4K K K K K K K K K Kr   r  c                         e Zd Zd fd	Z xZS )EF_MSK6fd7NEF.MSKMBMS Service Key Listc           	          t                      j        d	||||dd| t          dt          z  dt          z            }t          dt	          d          z  dt
          z  d|t          j                 z            | _        d S )
N)r[   Nr  msk_idtimestamp_counterkey_domain_idrF   
num_msk_idmsk_idsr   )	r7  r8  r   r   r  r
  r
   r  r   )r;  r<  r3  r4  r5  r=  msk_ts_constrr>  s          r  r8  zEF_MSK.__init__  s    `St$T:``Y_```x/1DW1LMM q!9!-f!4!*=+I!IK Kr   )r  Nr  r  r  rA  s   @r  r  r    sG        K K K K K K K K K Kr   r  c                        e Zd Z G d ded          Z G d ded          Z G d d	ed
eeg          Z G d ded          Z G d deeeg          Z	d fd	Z
 xZS )EF_MUKc                       e Zd ZeZdS )EF_MUK.MUK_IdrNr   r   r   r  MUK_Idrr    rG  r   r   r   r  c                       e Zd ZeZdS )EF_MUK.MUK_IdiNr   r   r   r  MUK_Idir    rG  r   r  r   c                       e Zd ZdS )EF_MUK.MUK_IDNr'  r   r   r  MUK_IDr    rN  r   r  r*  r+  c                       e Zd ZdS )EF_MUK.TimeStampCounterNr'  r   r   r  TimeStampCounterr    rN  r   r	  r   c                       e Zd ZdS )EF_MUK.EF_MUK_CollectionNr'  r   r   r  EF_MUK_Collectionr    rN  r   r  rO  6fd8NEF.MUKMBMS User Keyc           	      h     t                      j        d||||dd| t          j        | _        d S NNNr  r   )r7  r8  r  r  r9  r  s         r  r8  zEF_MUK.__init__  s<    bSt$T<bb[abbb,			r   )r  Nr  r  )r   r   r   r?  r   r  r  r	  rY  r  r8  r@  rA  s   @r  r  r    s@       ! ! ! ! !*$ ! ! ! !! ! ! ! !*$ ! ! ! !    w.@        :4        -v?O6P    - - - - - - - - - -r   r  c                        e Zd Z G d ded          Z G d ded          Z G d d	eeeg
          Zd fd	Z xZS )EF_GBANLc                       e Zd ZeZdS )EF_GBANL.NAF_IDNr   r   r   r  NAF_IDr    rG  r   r  r   r  c                       e Zd ZeZdS )EF_GBANL.B_TIDNr   r   r   r  B_TIDr    rG  r   r  r   c                       e Zd ZdS )EF_GBANL.EF_GBANL_CollectionNr'  r   r   r  EF_GBANL_Collectionr    rN  r   r  rO  6fdaNEF.GBANLGBA NAF Listc           	      h     t                      j        d||||dd| t          j        | _        d S r  )r7  r8  r  r  r9  r  s         r  r8  zEF_GBANL.__init__  s<    bSt$T<bb[abbb0			r   )r  Nr  r   )	r   r   r   r?  r  r  r  r8  r@  rA  s   @r  r  r    s        ! ! ! ! ! ! ! ! !! ! ! ! !
 ! ! ! !    j&%    1 1 1 1 1 1 1 1 1 1r   r  c                   <     e Zd ZdddifdddifgZ	 	 d fd	Z xZS )EF_EHPLMNPI00presentation_indno_preference02display_all6fdbNEF.EHPLMNPIr  r   c           	           t                      j        |f||||d| t          dt          t          ddd          z            | _        d S )NrV  r%  r   rD   rE   )r&  display_highest_prio_onlyr(  r7  r8  r   rm  rn  r   rX  s          r  r8  zEF_EHPLMNPI.__init__  sc    S4dDSSFSSS !3!%d!WXfg!h!h!h"i j jr   )r)  Nr*  r  r   r  rA  s   @r  r#  r#    st        
#_57
$m57O HN@j j j j j j j j j jr   r#  c                   D     e Zd Z G d ded          Z	 	 d fd
	Z xZS )	EF_NAFKCAc                       e Zd ZeZdS )EF_NAFKCA.NAF_KeyCentreAddressNr   r   r   r  NAF_KeyCentreAddressr1    rG  r   r2  r   r  6fddN	EF.NAFKCAr  NAF Key Centre Addressc           	      h     t                      j        d|||||d| t          j        | _        d S Nr  r   )r7  r8  r/  r2  r9  r:  s          r  r8  zEF_NAFKCA.__init__  <    ]St$T7]]V\]]]2			r   )r3  Nr4  r  r5  )r   r   r   r?  r2  r8  r@  rA  s   @r  r/  r/    st        ! ! ! ! !zt ! ! ! !HT.3 3 3 3 3 3 3 3 3 3r   r/  c            	            e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d ded          Z G d de	eeeeg          Z
	 	 d fd	Z xZS )	EF_NCP_IPc                   R    e Zd Z ed eedd          z  dez  dez            ZdS )EF_NCP_IP.DataDestAddrRangetype_of_addressrk   r   )IPv4IPv6prefix_lengthprefixN)	r   r   r   r   rm  rn  r
  r   r   r   r   r  DataDestAddrRanger<    sH        V-dd4d.N.N.NN+F2$[02 2


r   rB  r   r  c                       e Zd ZeZdS )EF_NCP_IP.AccessPointNameNr   r   r   r  AccessPointNamerD    rv  r   rE  r   c                   $    e Zd Z ee          ZdS )EF_NCP_IP.LoginNr   r   r   GsmStringAdapterr   r   r   r   r  LoginrG            %%k22


r   rJ  r   c                   $    e Zd Z ee          ZdS )EF_NCP_IP.PasswordNrH  r   r   r  PasswordrM    rK  r   rN  r   c                       e Zd ZdS )EF_NCP_IP.BearerDescriptionNr'  r   r   r  BearerDescriptionrP            r   rQ  r   c                       e Zd ZdS )EF_NCP_IP.EF_NCP_IP_CollectionNr'  r   r   r  EF_NCP_IP_CollectionrT    rR  r   rU  rO  6fe2N	EF.NCP-IPr  7Network Connectivity Parameters for USIM IP connectionsc           	      h     t                      j        d|||||d| t          j        | _        d S r7  )r7  r8  r:  rU  r9  r:  s          r  r8  zEF_NCP_IP.__init__  r8  r   )rV  NrW  r  rX  )r   r   r   TLV_IErB  rE  rJ  rN  rQ  rY  rU  r8  r@  rA  s   @r  r:  r:    sy       2 2 2 2 2F 2 2 2 2
! ! ! ! !&d ! ! ! !3 3 3 3 3D 3 3 3 33 3 3 3 36t 3 3 3 3    F        0'6xIZ&[    IUO3 3 3 3 3 3 3 3 3 3r   r:  c                   $     e Zd Z	 	 d fd	Z xZS )
EF_EPSLOCI6fe3rh   
EF.EPSLOCIEPS Location InformationrX   rX   c                      t                      j        |f||||d| t          t          ddd          }t	          dt          d          z  dt          d	          z  d
|z            | _        d S )NrV  r   rD   rE   updatednot_updatedroaming_not_allowedgutirQ   last_visited_registered_tairH   eps_update_statusr7  r8  rm  rn  r   r  r   )	r;  r<  r3  r4  r5  rW  r=  upd_status_constrr>  s	           r  r8  zEF_EPSLOCI.__init__!  s    S4dDSSFSSS !C C C b		!1!>uQxx!G!45F!FH Hr   )r]  rh   r^  r_  r`  r  rA  s   @r  r\  r\     sM        3?7>H H H H H H H H H Hr   r\  c                        e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d ded          Z G d dedeeeeeg          Z		 	 d fd	Z
 xZS )	EF_EPSNSCc                       e Zd ZeZdS )EF_EPSNSC.KSI_ASMENr	  r   r   r  KSI_ASMErn  ,  r  r   ro  r   r  c                       e Zd ZeZdS )EF_EPSNSC.K_ASMENr   r   r   r  K_ASMErq  /  rG  r   rr  r   c                       e Zd ZeZdS )EF_EPSNSC.UplinkNASCountNr  r   r   r  r  rt  2  r  r   r  r   c                       e Zd ZeZdS )EF_EPSNSC.DownlinkNASCountNr  r   r   r  r  rv  5  r  r   r  r   c                       e Zd ZeZdS )EF_EPSNSC.IDofNASAlgorithmsNr   r   r   r  IDofNASAlgorithmsrx  8  rG  r   ry  r   c                       e Zd ZdS )"EF_EPSNSC.EPS_NAS_Security_ContextNr'  r   r   r  EPS_NAS_Security_Contextr{  ;  s         	r   r|  r*  r+  6fe4r`   	EF.EPSNSCr   r   EPS NAS Security Contextc           	      h     t                      j        d|||||d| t          j        | _        d S r7  )r7  r8  rl  r|  r9  r:  s          r  r8  zEF_EPSNSC.__init__?  s<    ]St$T7]]V\]]]6			r   )r}  r`   r~  r  r  )r   r   r   r?  ro  rr  r  r  ry  r|  r8  r@  rA  s   @r  rl  rl  +  s           :4    ! ! ! ! ! ! ! ! !            :4    ! ! ! ! !JD ! ! ! !    :4+3V^M]+<+>    IR07 7 7 7 7 7 7 7 7 7r   rl  c                   4     e Zd ZdddddifgZd fd
	Z xZS )EF_PWSr$  pws_configurationF"ignore_pws_in_hplmn_and_equivalentignore_pws_in_vplmn6fecNEF.PWSPublic Warning Systemr  c                      t                      j        |f||||d| t          t          dd          }t	          d|z            | _        d S )NrV  rD   rE   r  r  r7  r8  r   rn  r   r   )	r;  r<  r3  r4  r5  rW  r=  
pws_configr>  s	           r  r8  zEF_PWS.__init__J  sd    S4dDSSFSSSQAO O O
 !4Z!?@@r   )r  Nr  r  r  r  rA  s   @r  r  r  E  sq        
%u@E(H (H J 	LOA A A A A A A A A Ar   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_IPS6ff1NEF.IPSrG   rG   IMEI(SV) Pairing Statusc                      t                      j        |f||||d| t          dt          dd          z  dt          z  dt
          z            | _        d S )Nr2  r  rE   r  link_to_ef_ipdrB  )r7  r8  r   r   r
  rn  r   r:  s          r  r8  zEF_IPS.__init__R  sd    Y4dwYYRXYYY ,q'*B*B!B!1&!8%*F Fr   )r  Nr  r  r  r  rA  s   @r  r  r  Q  sM        EK/F F F F F F F F F Fr   r  c                   t     e Zd Zdddddifdddddifd	dd
ddifgZ G d ded          Zd fd	Z xZS )	EF_ePDGId&801100657064672e6f736d6f636f6d2e6f7267e_pdg_idFQDNzepdg.osmocom.org)type_of_ePDG_addressePDG_address800501c0a8a001r>  z192.168.160.1&80110220010db8000000000000000000000023r?  z2001:db8::23c                       e Zd Z ed eeddd          z  d eej         e	e
           ee
           ee
          d          z            ZdS )EF_ePDGId.ePDGIdr  r   rD   rE   )r  r>  r?  r  N)r   r   r   r   rm  rn  r	   r
   r  Utf8Adapterr   Ipv4AdapterIpv6Adapterr   r   r   r  ePDGIdr  _  s        V24411ST3U3U3UU*66$2K;F;{;S;S;F;{;S;S;F;{;S;S3U 3U,V ,V VW W


r   r  r   r  6ff3N	EF.ePDGIdHome ePDG Identifierc                 f     t                      j        |f|||d| t          j        | _        d S Nr3  r4  r5  )r7  r8  r  r  r9  r  s         r  r8  zEF_ePDGId.__init__f  s9    H4dHHHHH$			r   )r  Nr  r  )r   r   r   r  r?  r  r8  r@  rA  s   @r  r  r  Y  s        
2ZZ`  tF  BH  BH  5J  	L
Z&[j)l)lnp
2ZZ`  tB  BD  BD  5F  	HO
W W W W W W W W W% % % % % % % % % %r   r  c                        e Zd Zddddddgifdddd	d
dgifdddd	d
dgifgZ G d ded          Zd fd	Z xZS )EF_ePDGSelection800600f110000100e_pdg_selectionz001-01rD   operator_identified)plmnepdg_priorityepdg_fqdn_format800600110000a001z001-001r*  location_based800600011000a001z001-010c                       e Zd Z e ed e ed                    z  dez  d ee	dd          z                      Z
dS )	EF_ePDGSelection.ePDGSelectionr  rF   r  r  r   rD   )r  r  N)r   r   r   r   r   rN  r  r   rm  r
  r   r   r   r  ePDGSelectionr  q  sm         [{{5588/D/D(D(7(?(:44\]no;p;p;p(p"r "r s s


r   r  r   r  6ff4NEF.ePDGSelectionePDG Selection Informationc                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  r  r  r9  r  s         r  r8  zEF_ePDGSelection.__init__v  s9    H4dHHHHH$2			r   )r  Nr  r  )r   r   r   r  r?  r  r8  r@  rA  s   @r  r  r  k  s       
0HWX  oD  4F  4F  3G  I  	J
0IX[  rB  4D  4D  3E  G  	H
0IX[  rB  4D  4D  3E  G  	HO
s s s s s
 s s s s
3 3 3 3 3 3 3 3 3 3r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_FromPreferred6ff7NEF.FromPreferredr  r   c                      t                      j        |f||||d| t          dt          d          z  dt          z            | _        d S )NrV  rB  rK   from_preferredr7  r8  r  rk  Flagr   rX  s          r  r8  zEF_FromPreferred.__init__|  sS    S4dDSSFSSS#E'!**$46Ft6KLLr   )r  Nr  r  r   r  rA  s   @r  r  r  {  sM        LR&M M M M M M M M M Mr   r  latitude	longitudec                       e Zd Zddddiddddd	d
ddddgigigfddddiddddd	d
ddddgiddddd	d
dddddddgigigfddddiddddd	d
ddddgigidddiddddddddddgigigfgZ G d ded          Z G d ded          Z G d d ed!eeg"          Z G d# d$eeg%          Z		 	 d, fd+	Z
 xZS )-EF_EARFCNList8a01a8004000100008112000001100001000002100002000003100003earfcn_list_tlvearfcni   geographical_arearD   i  )r  r  rE   i  rF   i  la03480040001000081120000011000010000021000020000031000038118000001100001000002100002000003100003000004100004rG   i  pa01a8004000100008112000001100001000002100002000003100003a01a8004000200008112000011100011000012100012000013100013i   rV   i  rX   i  rZ   i  c                       e Zd ZeZdS )EF_EARFCNList.EarfcnNr  r   r   r  Earfcnr    r  r   r  r   r  c                   $    e Zd Z ee          ZdS )EF_EARFCNList.GeographicalAreaN)r   r   r   r   GadPointr   r   r   r  GeographicalArear    s         [**


r   r  r   c                       e Zd ZdS )EF_EARFCNList.EarfcnListTlvNr'  r   r   r  EarfcnListTlvr    rN  r   r  r*  r+  c                       e Zd ZdS )%EF_EARFCNList.EarfcnListTlvCollectionNr'  r   r   r  EarfcnListTlvCollectionr    rN  r   r  rO  6ffdNEF.EARFCNListrh   r   r   c                 ^     t                      j        |f||||d| | j        | _        d S rU  )r7  r8  r  r9  rX  s          r  r8  zEF_EARFCNList.__init__  s;    S4dDSSFSSS0			r   )r  Nr  r  r   )r   r   r   r  r?  r  r  r  rY  r  r8  r@  rA  s   @r  r  r    s        
D%0 31SZ6[6[CDSZ6[6[CDSZ6[6[6]  _` a 
b	d 
x%0 31SZ6[6[CDSZ6[6[CDSZ6[6[6]  _ !41SZ6[6[CDSZ6[6[CDSZ6[6[CDSZ6[6[6]  _	! # 
$		& 
|%0 31SZ6[6[CDSZ6[6[CDSZ6[6[6]  _` a &1 32T[6\6\CET[6\6\CET[6\6\6^  `a b	
d	e'O:        + + + + +:4 + + + +    
f=M5N        "3]O    IR61 1 1 1 1 1 1 1 1 1r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_eAKA6f01NEF.eAKAr  enhanced AKA supportc                      t                      j        |f||||d| t          dt          d          z  dt          z            | _        d S )NrV  rB  rK   "enhanced_sqn_calculation_supportedr  rX  s          r  r8  zEF_eAKA.__init__  sT    S4dDSSFSSS#E'!**$46Z[_6_``r   )r  Nr  r  r  r  rA  s   @r  r  r    sM        CI,a a a a a a a a a ar   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_OCST6f02NEF.OCSTr  :Operator controlled signal threshold per access technologyc                      t                      j        |f||||d| t          dt          t          d          z  dt
          z            | _        d S )NrV  senserD   )sense_enabledocst_tlvr7  r8  r   r   rn  r   r   rX  s          r  r8  zEF_OCST.__init__  s^    S4dDSSFSSS 4q)I)I)I!I!+K!79 9r   )r  Nr  r  r  r  rA  s   @r  r  r    sC        CKR9 9 9 9 9 9 9 9 9 9r   r  c                         e Zd Zd fd	Z xZS )DF_GSM_ACCESS5F3BDF.GSM-ACCESSre   c                      t                      j        d|||dd| t          ddd          t          dddd	d
          t          dd          t	          dd          g}|                     |           d S )Nrd   )r<  r4  r5  service4f20rD   )r<  r3  r  4f52rE   z	EF.KcGPRSzGPRS Ciphering key KcGPRS)r<  r3  r4  r5  r  4f63rr   )r<  r  4f64rs   r   )r7  r8  r6   r7   r8   	add_filesr;  r<  r4  r5  r=  filesr>  s         r  r8  zDF_GSM_ACCESS.__init__  s    MSt$MMfMMMf4444f4k@[eghhh&"---62...	
 	ur   )r  r  re   r  rA  s   @r  r  r    s=                 r   r  c                        e Zd Zddddidddddid	igifgZ G d
 ded          Z G d ded          Z G d dedeeg          Zd fd	Z xZ	S )EF_ACSGLa00d800362f21081060000000002e0csg_listr  r<  csg_informationfrom_other_sourcesidr_   csg_typehnb_name_indicationcsg_idc                   6    e Zd Z e ed                    ZdS )EF_ACSGL.PlmnrF   N)r   r   r   rN  r  r   r   r   r  Plmnr
    %         [q**


r   r  r   r  c                       e Zd Z ed eed          z  d eed          z  d ed ed          z   ed                    z            Z	d	S )
EF_ACSGL.CsgInformationr  r   )r  r  r  r  rd   rH   N)
r   r   r   r   rm  r
  r  rl  r   r   r   r   r  CsgInformationr    sx        VJttFq'I'I'II1$$vRS2T2T2TT$YYtKKOO/CWWQZZ%P%PPR R


r   r  r   c                       e Zd ZdS )EF_ACSGL.CsgListNr'  r   r   r  CsgListr    rN  r   r  r*  r+  4f81rD   EF.ACSGLAllowed CSG Listsr   c           
      j     t                      j        d|||||dd| t          j        | _        d S Nr  )r<  r3  r4  r5  r  r6  r   )r7  r8  r  r  r9  r;  r<  r3  r4  r5  r  r=  r>  s          r  r8  zEF_ACSGL.__init__  s?    pSt$T7\eppioppp$			r   )r  rD   r  r  r   )
r   r   r   r  r?  r  r  r  r8  r@  rA  s   @r  r  r    s(       
***:NEY:>-G -G IK M	OO+ + + + +zt + + + +R R R R R R R R R    *$n/E    % % % % % % % % % %r   r  c                        e Zd ZdddigfdddiddigfgZ G d ded	
          Z G d ded
          Z G d ded
          Z G d deeeeg          Z	d fd	Z
 xZS )EF_CSGT8906810300666f6ftext_csg_typefoo48906810300666f6f801068747470733a2f2f666f6f2e6261722fgraphics_csg_type_urizhttps://foo.bar/c                   $    e Zd Z ee          ZdS )EF_CSGT.TextCsgTypeNr   r   r   Ucs2Adapterr   r   r   r   r  TextCsgTyper!             [--


r   r$  r   r  c                   $    e Zd Z ee          ZdS )EF_CSGT.GraphicsCsgTypeURINr   r   r   r  r   r   r   r   r  GraphicsCsgTypeURIr'    r%  r   r)  r   c                       e Zd ZeZdS )EF_CSGT.GraphicsCsgTypeEfImgNr	  r   r   r  GraphicsCsgTypeEfImgr+    r  r   r,  r   c                       e Zd ZdS )EF_CSGT.Csgt_TLV_CollectionNr'  r   r   r  Csgt_TLV_Collectionr.    rR  r   r/  rO  4f82rE   EF.CSGT	CSG Typesr   c           
      j     t                      j        d|||||dd| t          j        | _        d S r  )r7  r8  r  r/  r9  r  s          r  r8  zEF_CSGT.__init__  s?    pSt$T7\eppioppp/			r   )r0  rE   r1  r2  r   )r   r   r   r  r?  r$  r)  r,  rY  r/  r8  r@  rA  s   @r  r  r    s@       
%9:<
@e%)@BT'V
W	ZO
. . . . .jd . . . .. . . . .ZT . . . .    zt        /&13EG[%\   0 0 0 0 0 0 0 0 0 0r   r  c                   N     e Zd ZdddifgZ G d ded          Zd fd	Z xZS )EF_HNBN800b8108006d61686c7a656974hnb_namemahlzeitc                   $    e Zd Z ee          ZdS )EF_HNBN.HnbNameNr"  r   r   r  HnbNamer:    r%  r   r;  r   r  4f83rF   EF.HNBNHome NodeB Namer   c           
      j     t                      j        d|||||dd| t          j        | _        d S r  )r7  r8  r5  r;  r9  r  s          r  r8  zEF_HNBN.__init__  s>    pSt$T7\eppiopppO			r   )r<  rF   r=  r>  r   )r   r   r   r  r?  r;  r8  r@  rA  s   @r  r5  r5     s        *j*,FGO. . . . .*$ . . . .$ $ $ $ $ $ $ $ $ $r   r5  c            	            e Zd Zddddidddddid	id
digifgZ G d ded          Z G d dedej        ej        eg          Z	d fd	Z
 xZS )EF_OCSGL$a010800362f21081060000000002e0820100operator_csg_listr  r<  r  r  r  r_   r  csg_display_indicatorall_available_csg_idsc                   *    e Zd Z eedd          ZdS )EF_OCSGL.CsgDisplayIndicatorr   rD   )rE  only_ocsgl_csg_idsN)r   r   r   rm  r
  r   r   r   r  CsgDisplayIndicatorrG    s$        T&aPPP


r   rI  r   r  c                       e Zd ZdS )EF_OCSGL.OperatorCsgListNr'  r   r   r  OperatorCsgListrK    rN  r   rL  r*  r+  4f84rG   EF.OCSGLOperator CSG Listsr   c           
      j     t                      j        d|||||dd| t          j        | _        d S r  )r7  r8  rA  rL  r9  r  s          r  r8  zEF_OCSGL.__init__  s?    pSt$T7\eppioppp,			r   )rM  rG   rN  rO  r   )r   r   r   r  r?  rI  r  r  r  rL  r8  r@  rA  s   @r  rA  rA    s
       
0&(!3"3CWEY:>6G 6G "I #:;R!T	!W Y	[OQ Q Q Q Qjd Q Q Q Q    *$xG^`s7t    - - - - - - - - - -r   rA  c                   $     e Zd Z	 	 d fd	Z xZS )EF_5GS3GPPLOCI4f01rD   EF.5GS3GPPLOCIr[   r[   5S 3GP location informationc                      t                      j        |f||||d| t          t          ddd          }t	          dt          d          z  dt          d	          z  d
|z            | _        d S )NrV  r   rD   rE   rb  5g_gutirR   "last_visited_registered_tai_in_5gsrJ   5gs_update_statusri  )	r;  r<  r3  r4  rW  r5  r=  rj  r>  s	           r  r8  zEF_5GS3GPPLOCI.__init__$  s    S4dDSSFSSS !C C C 599!4!EeAhh!N!45F!FH Hr   )rS  rD   rT  rU  rV  r  rA  s   @r  rR  rR  #  sM        JR3H H H H H H H H H Hr   rR  c                   8     e Zd ZdddddifgZ	 	 d fd
	Z xZS )
EF_UAC_AIC03uac_access_id_configTmultimedia_priority_servicemission_critical_service4f06rJ   
EF.UAC_AICr  #UAC Access Identities Configurationc                      t                      j        |f||||d| t          t          dd          }t	          d|z            | _        d S )NrV  rD   rE   r_  r^  r  )	r;  r<  r3  r4  rW  r5  r=  
cfg_constrr>  s	           r  r8  zEF_UAC_AIC.__init__3  sa    S4dDSSFSSSt89; ; ;
 !7
!BCCr   )rb  rJ   rc  r  rd  r  rA  s   @r  r\  r\  .  s{        
(4HL+O +O Q 	SO GM;D D D D D D D D D Dr   r\  c                         e Zd Zd fd	Z xZS )EF_OPL5G4f08rM   EF.OPL5Gr   c           	      "    t                      j        d	||||dd| t          dt          t	          d                    z  dt	          d          z  dt	          d          z            }t          d|z  dt
          z            | _        d S )
N)rO   Nr  r>  rF   tac_mintac_maxtaipnn_record_idr   rM  )r;  r<  r3  r4  r5  r=  Tair>  s          r  r8  zEF_OPL5G.__init__<  s    `St$T:``Y_```Y{588444ia6HuQxx') ) sOF,BCCr   )ri  rM   rj  r   r  rA  s   @r  rh  rh  ;  sG        D D D D D D D D D Dr   rh  c                        e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d deeeeg          Z	 	 d fd	Z	 xZ
S )EF_SUPI_NAIc                   $    e Zd Z ee          ZdS )%EF_SUPI_NAI.NetworkSpecificIdentifierNr(  r   r   r  NetworkSpecificIdentifierrt  D           [--


r   ru  r   r  c                   $    e Zd Z ee          ZdS ) EF_SUPI_NAI.GlobalLineIdentifierNr(  r   r   r  GlobalLineIdentifierrx  H  rv  r   ry  r   c                   $    e Zd Z ee          ZdS )!EF_SUPI_NAI.GlobalCableIdentifierNr(  r   r   r  GlobalCableIdentifierr{  L  rv  r   r|  r   c                       e Zd ZdS )EF_SUPI_NAI.NAI_TLV_CollectionNr'  r   r   r  NAI_TLV_Collectionr~  P  rR  r   r  rO  4f09rN   EF.SUPI_NAI!SUPI as Network Access Identifierc                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  rr  r  r9  r  s         r  r8  zEF_SUPI_NAI.__init__S  s9    H4dHHHHH2			r   )r  rN   r  r  )r   r   r   rZ  ru  ry  r|  rY  r  r8  r@  rA  s   @r  rr  rr  C  s       . . . . .F . . . .. . . . .v4 . . . .. . . . .D . . . .    .%>@TVk$l    4A93 3 3 3 3 3 3 3 3 3r   rr  c                         e Zd Zd fd	Z xZS )EF_Routing_Indicator4f0arO   EF.Routing_IndicatorRouting Indicatorc           
           t                      j        |f|||d| t          dt          t	          t          d                              z  dt          d          z            | _        d S )Nr  routing_indicatorrE   rB  )r7  r8  r   r5  r6  r  r   r  s         r  r8  zEF_Routing_Indicator.__init__Z  sm    H4dHHHHH !!45Ed5QR88nn5U5U!U!&uQxx1 1r   )r  rO   r  r  r  rA  s   @r  r  r  Y  s=        1 1 1 1 1 1 1 1 1 1r   r  c                   D     e Zd Z G d ded          Z	 	 d
 fd		Z xZS )EF_TN3GPPSNNc                   $    e Zd Z ee          ZdS )EF_TN3GPPSNN.ServingNetworkNameNr(  r   r   r  ServingNetworkNamer  f  r%  r   r  r   r  4f0crQ   EF.TN3GPPSNN+Trusted non-3GPP Serving network names listc                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  r  r  r9  r  s         r  r8  zEF_TN3GPPSNN.__init__h  s9    H4dHHHHH 3			r   )r  rQ   r  r  )r   r   r   r?  r  r8  r@  rA  s   @r  r  r  e  st        . . . . .ZT . . . .3AC4 4 4 4 4 4 4 4 4 4r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_CAG4f0drR   EF.CAG&Pre-configured CAG information list EFc                 \     t                      j        |f|||d| t          | _        d S r  r7  r8  r   r   r  s         r  r8  zEF_CAG.__init__o  6    H4dHHHHH%r   )r  rR   r  r  r  rA  s   @r  r  r  n  sC        3;>& & & & & & & & & &r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_SOR_CMCI4f0erS   EF.SOR-CMCI8Steering Of Roaming - Connected Mode Control Informationc                 \     t                      j        |f|||d| t          | _        d S r  r  r  s         r  r8  zEF_SOR_CMCI.__init__v  r  r   )r  rS   r  r  r  rA  s   @r  r  r  u  sC        3@P& & & & & & & & & &r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_DRI4f0frT   EF.DRIDisaster roaming information EFc           
          t                      j        |f|||d| t          dt          z  dt	          t          ddd          z  dt          d          z  d	t          d          z  d
t          z            | _        d S )Nr  disaster_roaming_enabledparameters_indicator_statusrD   rE   rF   )roaming_wait_rangereturn_wait_rangeapplicability_indicatorr  r  r  )r7  r8  r   rn  r   r  r   r  s         r  r8  zEF_DRI.__init__}  s    H4dHHHHH !;D!@!>ybc[\ab@d @d @d "d "6eAhh!>!4U1XX!=!:4!?A Ar   )r  rT   r  r  r  rA  s   @r  r  r  |  sM        3;7	A 	A 	A 	A 	A 	A 	A 	A 	A 	Ar   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_PWS_SNPNrS  rD   EF.PWS_SNPNPublic Warning System in SNPNsc                      t                      j        |f|||d| t          dt          t          dd          z            | _        d S )Nr  pws_config_in_snpnsrD   rE   )ignore_all_pws_in_subscribed ignore_all_pws_in_non_subscribed)r7  r8  r   r   rn  r   r  s         r  r8  zEF_PWS_SNPN.__init__  sg    H4dHHHHH !6ydebc8e 8e 8e "e f fr   )rS  rD   r  r  r  rA  s   @r  r  r    sM        3@6f f f f f f f f f fr   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_NID4f02rE   EF.NIDNetwork Identifier for SNPNc           	           t                      j        |f|||dd| t          dt          t          ddd          z  dt          d	          z            | _        d S )
Nr  r2  assignment_moder   rD   rE   )coordinated_ass_opt1self_asscoordinated_ass_opt2network_identifierrH   )r7  r8  r   rm  rn  r  r   r  s         r  r8  zEF_NID.__init__  s}    W4duWWPVWWW !24STGHST4V 4V 4V "V "6eAhh!>@ @r   )r  rE   r  r  r  rA  s   @r  r  r    sM        3;3@ @ @ @ @ @ @ @ @ @r   r  c                         e Zd Zd fd	Z xZS )DF_SNPN5fe0DF.SNPNFiles for SNPN purposec                      t                      j        d|||d| t          d          t          d          g}|                     |           d S )Nr<  r4  r5  r   r  r   r   )r7  r8  r  r  r  r  s         r  r8  zDF_SNPN.__init__  sf    ASt$AA&AAA$$$3
 	ur   )r  r  r  r  rA  s   @r  r  r    =                 r   r  c                   \     e Zd Z fdZ ed           G d de                      Z xZS )EF_5G_PROSE_STc           
           t                      j        ddddddt          d| | xj        |                                 gz  c_        d S )NrS  rD   zEF.5G_PROSE_STz5G ProSe Service Table)rD   rE   r  r   )r7  r8  EF_5G_PROSE_ST_mapr  r  r  s     r  r8  zEF_5G_PROSE_ST.__init__  sp     	hV$5E6UJ\	h 	h`f	h 	h 	h 	 6 6 8 899r   r  c                       e Zd Zd Zd ZdS ) EF_5G_PROSE_ST.AddlShellCommandsc                 |    | j         j        j        }|                    | j         t	          |          gg            dS )z(Activate a service within EF.5G_PROSE_STNr  r  s      r  do_prose_service_activatez:EF_5G_PROSE_ST.AddlShellCommands.do_prose_service_activate  r  r   c                 |    | j         j        j        }|                    | j         g t	          |          g           dS )z*Deactivate a service within EF.5G_PROSE_STNr  r  s      r  do_prose_service_deactivatez<EF_5G_PROSE_ST.AddlShellCommands.do_prose_service_deactivate  r  r   N)r   r   r   r  r  r   r   r  r  r    r  r   r  r  rA  s   @r  r  r    s        : : : : : 344	@ 	@ 	@ 	@ 	@J 	@ 	@ 54	@ 	@ 	@ 	@ 	@r   r  c                   V    e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d ded          Z G d ded          Z	 G d ded          Z
 G d ded          Z G d dedeeeeee	e
eg          Z	 	 d# fd"	Z xZS )$EF_5G_PROSE_DDc                       e Zd ZdS )EF_5G_PROSE_DD.ServedByNgRanNr'  r   r   r  ServedByNgRanr    rN  r   r  r   r  c                       e Zd ZdS )EF_5G_PROSE_DD.NotServedByNgranNr'  r   r   r  NotServedByNgranr    rN  r   r  r   c                       e Zd ZdS )EF_5G_PROSE_DD.ProSeIdentifiersNr'  r   r   r  ProSeIdentifiersr    rN  r   r  r   c                       e Zd ZdS )'EF_5G_PROSE_DD.ProSeIdToDefaultDestL2IdNr'  r   r   r  ProSeIdToDefaultDestL2Idr    rN  r   r  r   c                       e Zd ZdS )-EF_5G_PROSE_DD.GroupMemberDiscoveryParametersNr'  r   r   r  GroupMemberDiscoveryParametersr    rN  r   r  r   c                       e Zd ZdS )EF_5G_PROSE_DD.ValidityTimerNr'  r   r   r  ValidityTimerr    rN  r   r  r   c                       e Zd ZdS )'EF_5G_PROSE_DD.ProSeDirectDiscoveryUeIdNr'  r   r   r  ProSeDirectDiscoveryUeIdr    rN  r   r  r   c                       e Zd ZdS )-EF_5G_PROSE_DD.Hplmn5GDdnmfAddressInformationNr'  r   r   r  Hplmn5GDdnmfAddressInformationr    rN  r   r  r   c                       e Zd ZdS ),EF_5G_PROSE_DD.ProSeConfigForDirectDiscoveryNr'  r   r   r  ProSeConfigForDirectDiscoveryr            
 	r   r  r*  r+  r  rE   EF.5G_PROSE_DDr   c                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  r  r  r9  r  s         r  r8  zEF_5G_PROSE_DD.__init__  s9    H4dHHHHH"@			r   )r  rE   r  r   )r   r   r   r?  r  r  r  r  r  r  r  r  r  r8  r@  rA  s   @r  r  r    s'           
        :4        :4        :4                
        :4                
0=?OQa0HJh0=?W0N0P    4DHA A A A A A A A A Ar   r  c                        e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d dedej	        ej
        eeeej        eg          Z	 	 d fd	Z xZS )EF_5G_PROSE_DCc                       e Zd ZdS )EF_5G_PROSE_DC.PrivacyConfigNr'  r   r   r  PrivacyConfigr    rN  r   r  r   r  c                       e Zd ZdS ) EF_5G_PROSE_DC.DirectCommInNrPc5Nr'  r   r   r  DirectCommInNrPc5r    rN  r   r  r   c                       e Zd ZdS )6EF_5G_PROSE_DC.ApplicationToPathPreferenceMappingRulesNr'  r   r   r  'ApplicationToPathPreferenceMappingRulesr    rN  r   r  r   c                       e Zd ZdS )GEF_5G_PROSE_DC.ProSeIdToNrTxProfileForBroadcastAndGroupcastMappingRulesNr'  r   r   r  8ProSeIdToNrTxProfileForBroadcastAndGroupcastMappingRulesr    rN  r   r   r   c                       e Zd ZdS )0EF_5G_PROSE_DC.ProSeConfigForDirectCommunicationNr'  r   r   r  !ProSeConfigForDirectCommunicationr    s         	r   r  r*  r+  r-  rF   EF.5G_PROSE_DCr   c                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  r  r  r9  r  s         r  r8  zEF_5G_PROSE_DC.__init__  s9    H4dHHHHH"D			r   )r-  rF   r  r   )r   r   r   r?  r  r  r  r   r  r  r  r  r  r8  r@  rA  s   @r  r  r    sj           
        JD        *$        :SW        JD4B4P4B4S4ACT4[4B4P4l4n    4DLE E E E E E E E E Er   r  c                   X    e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d ded          Z G d ded          Z	 G d ded          Z
 G d dedej        ej        eeeeej        ee	e
g
          Z	 	 d  fd	Z xZS )!EF_5G_PROSE_U2NRUc                       e Zd ZdS )*EF_5G_PROSE_U2NRU.ProSeIdToDefaultDestL2IdNr'  r   r   r  r  r	    rN  r   r  r   r  c                       e Zd ZdS )EF_5G_PROSE_U2NRU.RxcInfoListNr'  r   r   r  RxcInfoListr    rN  r   r  r   c                       e Zd ZdS )7EF_5G_PROSE_U2NRU.FiveQiToPc65QosParametersMappingRulesNr'  r   r   r  %FiveQiToPc65QosParametersMappingRulesr    rN  r   r  r   c                       e Zd ZdS )1EF_5G_PROSE_U2NRU.ProSeIdToAppSrvAddrMappingRulesNr'  r   r   r  ProSeIdToAppSrvAddrMappingRulesr    rN  r   r  r   c                       e Zd ZdS )(EF_5G_PROSE_U2NRU.UserInfoIdForDiscoveryNr'  r   r   r  UserInfoIdForDiscoveryr    rN  r   r  r   c                       e Zd ZdS )EF_5G_PROSE_U2NRU.PrivacyTimerNr'  r   r   r  PrivacyTimerr    rN  r   r  r   c                       e Zd ZdS ).EF_5G_PROSE_U2NRU.FiveGPkkmfAddressInformationNr'  r   r   r  FiveGPkkmfAddressInformationr    rN  r   r     c                       e Zd ZdS )6EF_5G_PROSE_U2NRU.ProSeConfigDataForUeToNetworkRelayUeNr'  r   r   r  $ProSeConfigDataForUeToNetworkRelayUer    s         	r   r  r*  r+  4f04rG   EF.5G_PROSE_U2NRUr   c                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  r  r  r9  r  s         r  r8  zEF_5G_PROSE_U2NRU.__init__
  s9    H4dHHHHH%J			r   )r   rG   r!  r   )r   r   r   r?  r  r  r  r  r  r  r  r  r  r  r  r  r8  r@  rA  s   @r  r  r    s           :4        jd        
        *$                zt        zt        zt7E7S7E7V7O7B7\7V7E7S7M7C7S	7U    4GNK K K K K K K K K Kr   r  c                        e Zd Z G d ded          Z G d ded          Z G d d	ed
ej        ej        ee	j
        eej        e	j        e	j        e	j        g	          Z	 	 d fd	Z xZS )EF_5G_PROSE_RUc                       e Zd ZdS )EF_5G_PROSE_RU.DefaultDestL2IdsNr'  r   r   r  DefaultDestL2Idsr&    rN  r   r'  r   r  c                       e Zd ZdS )5EF_5G_PROSE_RU.N3IwfSelectionInfoFor5GProSeL3RemoteUENr'  r   r   r  &N3IwfSelectionInfoFor5GProSeL3RemoteUEr)    rN  r   r*  r   c                       e Zd ZdS ))EF_5G_PROSE_RU.ProSeConfigDataForRemoteUeNr'  r   r   r  ProSeConfigDataForRemoteUer,    s         	r   r-  r*  r+  rP  rH   EF.5G_PROSE_RUr   c                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  r$  r-  r9  r  s         r  r8  zEF_5G_PROSE_RU.__init__!  s9    H4dHHHHH"=			r   )rP  rH   r.  r   )r   r   r   r?  r'  r*  r  r  r  r  r  r  r  r  r  r-  r8  r@  rA  s   @r  r$  r$    s           :4            
 
 
 
 
ZT-;-I-;-L-=->-J-S-;-I->-U->-K->-[-]
 
 
 
 4DA> > > > > > > > > >r   r$  c                        e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d dedej	        eeeeg          Z
	 	 d fd	Z xZS )EF_5G_PROSE_UIRc                       e Zd ZdS ) EF_5G_PROSE_UIR.CollectionPeriodNr'  r   r   r  CollectionPeriodr3  )  rN  r   r4     r  c                       e Zd ZdS )EF_5G_PROSE_UIR.ReportingWindowNr'  r   r   r  ReportingWindowr7  +  rN  r   r8     c                       e Zd ZdS )#EF_5G_PROSE_UIR.ReportingIndicatorsNr'  r   r   r  ReportingIndicatorsr;  -  rN  r   r<     c                       e Zd ZdS )-EF_5G_PROSE_UIR.FiveGDdnmfCtfAddrForUploadingNr'  r   r   r  FiveGDdnmfCtfAddrForUploadingr?  /  rN  r   r@     c                       e Zd ZdS )4EF_5G_PROSE_UIR.ProSeConfigDataForUeToNetworkRelayUENr'  r   r   r  $ProSeConfigDataForUeToNetworkRelayUErC  1  r  r   rD  r*  r+  rb  rJ   EF.5G_PROSE_UIRr   c                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  r1  rD  r9  r  s         r  r8  zEF_5G_PROSE_UIR.__init__7  s9    H4dHHHHH#H			r   )rb  rJ   rE  r   )r   r   r   r?  r4  r8  r<  r@  r  r  rD  r8  r@  rA  s   @r  r1  r1  (  s\           :4        *$        jd        
        zt7E7S7G7J7T7V    4ESI I I I I I I I I Ir   r1  c                   4    e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d ded          Z G d ded          Z	 G d ded          Z
 G d dedeeeeee	e
g          Z	 	 d  fd	Z xZS )!EF_5G_PROSE_U2URUc                   $    e Zd Z ed          ZdS )EF_5G_PROSE_U2URU.ValidityTimerrH   Nr  r   r   r  r  rJ  ?  s        U1XX


r   r  r   r  c                       e Zd ZeZdS )EF_5G_PROSE_U2URU.ServedByNGRANNr   r   r   r  ServedByNGRANrL  A  rG  r   rM  r   c                       e Zd ZeZdS )"EF_5G_PROSE_U2URU.NotServedByNGRANNr   r   r   r  NotServedByNGRANrO  C  rG  r   rP  r   c                       e Zd ZeZdS )*EF_5G_PROSE_U2URU.DefaultDstL2IdsForRxDiscNr   r   r   r  DefaultDstL2IdsForRxDiscrR  E  rG  r   rS     c                       e Zd ZeZdS ))EF_5G_PROSE_U2URU.UserInforIdForDiscoveryNr   r   r   r  UserInforIdForDiscoveryrV  G  rG  r   rW  r   c                       e Zd ZeZdS )EF_5G_PROSE_U2URU.RSCInfoListNr   r   r   r  RSCInfoListrY  I  rG  r   rZ  r   c                       e Zd ZeZdS ).EF_5G_PROSE_U2URU.DefaultDstL2IdsForTxRxDirectNr   r   r   r  DefaultDstL2IdsForTxRxDirectr\  K  rG  r   r]     c                       e Zd ZdS ).EF_5G_PROSE_U2URU.ProSeConfigDataForU2URelayUENr'  r   r   r  ProSeConfigDataForU2URelayUEr`  M  r)  r   ra  r*  r+  r}  rK   EF.5G_PROSE_U2URU15G ProSe configuration data for UE-to-UE relay UEc                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  rH  ra  r9  r  s         r  r8  zEF_5G_PROSE_U2URU.__init__R  s9    H4dHHHHH%B			r   )r}  rK   rb  rc  )r   r   r   r?  r  rM  rP  rS  rW  rZ  r]  ra  r8  r@  rA  s   @r  rH  rH  >  s           
    ! ! ! ! !
 ! ! ! !! ! ! ! !:4 ! ! ! !! ! ! ! !:4 ! ! ! !! ! ! ! !*$ ! ! ! !! ! ! ! !jd ! ! ! !! ! ! ! !zt ! ! ! !    zt/<mM]/GI`/:<X/Z   
 4GIC C C C C C C C C Cr   rH  c                        e Zd Z G d ded          Z G d dedej        ej        ej        ej	        ej
        ej        ej        eg          Z	 	 d fd	Z xZS )EF_5G_PROSE_EUc                      e Zd Z eee          Z ee ed                    Z e	d e
eddd          z  d eej        j        e          z  d eej        j        e          z  d	 ee ee                    z            Zd
S )%EF_5G_PROSE_EU.PKMFAddressInformationrU   flagsrD   rE   rG   )ipv4ipv6fqdnipv4_addr_listipv6_addr_listrl  N)r   r   r   r   r
  r   Ipv4AddrListr  Ipv6AddrListr   r   rn  r   r
   ri  rj  rk  Prefixedr  r   r   r   r   r  PKMFAddressInformationrh  Y  s        $}VW55$}VUU2YY77VGIId$K$K$KK,RR
-N-NN,RR
-N-NN"88FKK4L4L#M#MMO O


r   rr  r  r  c                       e Zd ZdS )&EF_5G_PROSE_EU.ProSeConfigDataForEndUENr'  r   r   r  ProSeConfigDataForEndUErt  `  s         	r   ru  r*  r+  ri  rM   EF.5G_PROSE_EU&5G ProSe configuration data for end UEc                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  rf  ru  r9  r  s         r  r8  zEF_5G_PROSE_EU.__init__j  s9    H4dHHHHH":			r   )ri  rM   rv  rw  )r   r   r   r?  rr  rH  r  rM  rP  rS  rW  rZ  r]  ru  r8  r@  rA  s   @r  rf  rf  X  s        O O O O O O O O O	 	 	 	 	*$*;*I*;*I*;*L*;*T*;*S*;*G*;*X*@*B	 	 	 	 4D>; ; ; ; ; ; ; ; ; ;r   rf  c                         e Zd Zd fd	Z xZS )DF_5G_ProSe5ff0DF.5G_ProSeFiles for 5G ProSe purposec           
      \    t                      j        d
|||d| t                      t          d          t	          d          t          d          t          d          t          d          t          d          t          d	          g}| 
                    |           d S )Nr  rD   r  rE   rF   rG   rH   rJ   rK   r   )r7  r8  r  r  r  r  r$  r1  rH  rf  r  r  s         r  r8  zDF_5G_ProSe.__init__q  s    ASt$AA&AAA1%%%1%%%a(((1%%%A&&&a(((1%%%

 	ur   )r{  r|  r}  r  rA  s   @r  rz  rz  p  s=                 r   rz  c            
           e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d ded          Z G d dedeeg          Z	 G d dedeeee	g          Z
	 	 d fd	Z xZS )EF_5MBSUECONFIGc            	       z    e Zd Z ed e ed                    z  d e ed                    z            ZdS )EF_5MBSUECONFIG.Plmnr  rF   nidrJ   N)r   r   r   r   rN  r  rm  r   r   r   r  r  r    sR        VF;;uuQxx#8#88!))EE!HH"5"557 7


r   r  r   r  c            
           e Zd Z ed ed          z  d ed          z  d eedd          z            Z ee          Z	dS )	EF_5MBSUECONFIG.TmgitmgirJ   usd_fidrE   service_typerD   )mbs_service_announcementmbs_user_serviceN)
r   r   r   r   r  r   rn  	TmgiEntryr   r   r   r   r  Tmgir    sk        F6%%((?$UU1XX-)))DSTgh*i*i*iik k	 ![++


r   r  r   c                   6    e Zd Z e ed                    ZdS )EF_5MBSUECONFIG.NrArfcnListrG   N)r   r   r   r   r  r   r   r   r  NrArfcnListr    r  r   r  r   c                       e Zd ZeZdS )EF_5MBSUECONFIG.DNNNr   r   r   r  DNNr    rG  r   r  r   c                       e Zd ZeZdS )EF_5MBSUECONFIG.SNSSAINr   r   r   r  SNSSAIr    rG  r   r  r   c                       e Zd ZdS )EF_5MBSUECONFIG.PduInfoListNr'  r   r   r  PduInfoListr    rN  r   r  r  r+  c                       e Zd ZdS )(EF_5MBSUECONFIG.Plmn5mbsPreconfigurationNr'  r   r   r  Plmn5mbsPreconfigurationr    rR  r   r  r*  rS  NEF.5MBSUECONFIG5MBS UE pre-configurationc                 f     t                      j        |f|||d| t          j        | _        d S r  )r7  r8  r  r  r9  r  s         r  r8  zEF_5MBSUECONFIG.__init__  s9    H4dHHHHH#<			r   )rS  Nr  r  )r   r   r   r?  r  r  r  r  r  r  r  r8  r@  rA  s   @r  r  r    s       7 7 7 7 7zt 7 7 7 7, , , , ,zt , , , ,
+ + + + +jd + + + +! ! ! ! !jd ! ! ! !! ! ! ! ! ! ! ! !    jdC=        :4+/{K*P    4E1= = = = = = = = = =r   r  c                   H     e Zd ZdZ G d ded          Z	 	 d
 fd		Z xZS )
EF_5MBSUSDzThere can be any number of these files with undefined FID; the FIDs are contained
    in EF.5BMSUECONFIG. FID range is 4f08...4fffc                       e Zd ZeZdS )EF_5MBSUSD.USDNr   r   r   r  USDr    rG  r   r  r   r  N
EF.5MBSUSD5MBS User Service Descriptionc                 \     t                      j        |f|||d| t          | _        d S r  )r7  r8  r  r9  r  s         r  r8  zEF_5MBSUSD.__init__  s6    H4dHHHHH			r   )Nr  r  )r   r   r   __doc__r?  r  r8  r@  rA  s   @r  r  r    s~        4 4! ! ! ! !jd ! ! ! !,85         r   r  c                         e Zd Zd fd	Z xZS )DF_5MBSUECONFIG5ff1DF.5MBSUECONFIGr  c                      t                      j        d|||d| t                      g}|                     |           d S )Nr  r   )r7  r8  r  r  r  s         r  r8  zDF_5MBSUECONFIG.__init__  sS    ASt$AA&AAA
 	ur   )r  r  r  r  rA  s   @r  r  r    r  r   r  c                   $     e Zd Z	 	 d fd	Z xZS )
EF_5GSEDRX4f10rU   
EF.5GSEDRX5GS eDRX Parametersc                      t                      j        |f|||d| t          dt          t          dd          z  dt
          z            | _        d S )Nr  5gs_rat_typerD   rE   )ng_ran
sat_ng_ranedrx_cycle_length)r7  r8  r   r   rn  r
  r   r  s         r  r8  zEF_5GSEDRX.__init__  s_    H4dHHHHH 	$qUV0W0W0W!W!4V!;= =r   )r  rU   r  r  r  rA  s   @r  r  r    sC        3?+= = = = = = = = = =r   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_5GNSWO_CONF4f11rV   EF.5GNSWO_CONF*5G Non-Seamless WLAN Offload configurationc                      t                      j        |f|||d| t          dt          t          dd          z            | _        d S )Nr  5g_nswo_usage_indr   rD   )disabledenabledr-  r  s         r  r8  zEF_5GNSWO_CONF.__init__  sT    H4dHHHHH !4T$TU5V5V5V!VWWr   )r  rV   r  r  r  rA  s   @r  r  r    sM        3CBX X X X X X X X X Xr   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_MCHPPLMN4f15r\   EF.MCHPPLMN6Multiplier Coefficient for Higher Priority PLMN searchc                 |     t                      j        |f|||d| t          dt          z            | _        d S )Nr  multiplier_coefficientr  r  s         r  r8  zEF_MCHPPLMN.__init__  sD    H4dHHHHH !9&!@AAr   )r  r\   r  r  r  rA  s   @r  r  r    sM        3@NB B B B B B B B B Br   r  c                   $     e Zd Z	 	 d fd	Z xZS )EF_KAUSF_DERIVATION4f16r^   EF.KAUSF_DERIVATIONr   c                      t                      j        |f|||d| t          dt          t          d          z  dt
          z            | _        d S )Nr  k_ausf_deriv_cfgrD   )use_mskrB  r  r  s         r  r8  zEF_KAUSF_DERIVATION.__init__  sZ    H4dHHHHH !3IdA4N4N4N!NPUVaPabbr   )r  r^   r  r   r  rA  s   @r  r  r    sM        3H7c c c c c c c c c cr   r  c                         e Zd Zd fd	Z xZS )DF_WLAN5f40DF.WLANFiles for WLAN purposec                     t                      j        d:|||d| t          ddddd          t          dd	d
dd          t          ddddd          t          ddddd          t          ddddd          t          ddddd           t          d!d"d#d$d%          t          d&d'd(d)d*          t          d+d,d-d.d/          t          d0d1d2d3d4          t          d5d6d7d8d9          g}|                     |           d S );Nr  4f41rD   z	EF.Pseudor   r   r  4f42rE   zEF.UPLMNWLANz/User controlled PLMN selector for I-WLAN Accessr   4f43rF   zEF.OPLMNWLANz3Operator controlled PLMN selector for I-WLAN Accessr   4f44rG   z	EF.UWSIDLz-User controlled WLAN Specific Identifier Listr   4f45rH   z	EF.OWSIDLz1Operator controlled WLAN Specific Identifier Listr   4f46rJ   zEF.WRIr   r   4f47rK   z	EF.HWSIDLr   r   4f48rM   zEF.WEHPLMNPIr   r   4f49rN   zEF.WHPIr   r   4f4arO   z
EF.WLRPLMNr   r   4f4brP   zEF.HPLMNDAIzHPLMN Direct Access Indicatorr   r   )r7  r8  TransparentEF
LinFixedEFr  r  s         r  r8  zDF_WLAN.__init__  s   ASt$AA&AAA&$["MMM&$KUWY Y Y&$OY[] ] ]vt[FPRT T Tvt[JTVX X X&$:BH H Hvt[=rK K K&$KUWY Y Y&$	<bJ J J&$7E E E&$92G G G)
. 	ur   )r  r  r  r  rA  s   @r  r  r    s=                 r   r  c                         e Zd Zd fd	Z xZS )DF_HNB5f50DF.HNBFiles for HomeNodeB purposec                 $    t                      j        d|||d| t                      t                      t	                      t                      t          ddddd          t	          dd	d
dd          g}|                     |           d S )Nr  4f85rH   zEF.OCSGTzOperator CSG Typer   r  4f86rJ   zEF.OHNBNzOperator Home NodeB Namer   )r7  r8  r  r  r5  rA  r  r  s         r  r8  zDF_HNB.__init__  s    ASt$AA&AAAJJIIIIJJFD*.A2NNNFD*.HRTUUU
 	ur   )r  r  r  r  rA  s   @r  r  r    s=        
 
 
 
 
 
 
 
 
 
r   r  c                         e Zd Zd fd	Z xZS )DF_ProSe5f90DF.ProSeFiles for ProSe purposec                 L    t                      j        d:|||d| t          dddd          t          dddd	          t          d
ddd          t          dddd          t          dddd          t          dddd          t          dddd          t          ddd d!          t          d"d#d$d%          t          d&d'd(d)          t          d*d+d,d-          t          d.d/d0d1          t          d2d3d4d5          t          d6d7d8d9          g}|                     |           d S );Nr  rS  rD   zEF.PROSE_MONzProSe Monitoring Parametersr  rE   zEF.PROSE_ANNzProSe Announcing Parametersr-  rF   zEF.PROSEFUNCzHPLMN ProSe Functionr   rG   zEF.PROSE_RADIO_COMz+ProSe Direct Communication Radio ParametersrP  rH   zEF.PROSE_RADIO_MONz2ProSe Direct Discovery Monitoring Radio Parametersrb  rJ   zEF.PROSE_RADIO_ANNz2ProSe Direct Discovery Announcing Radio Parametersr}  rK   zEF.PROSE_POLICYzProSe Policy Parametersri  rM   zEF.PROSE_PLMNzProSe PLMN Parametersr  rN   zEF.PROSE_GCzProSe Group Counterr  rU   zEF.PSTzProSe Service Tabler  rV   zEF.UIRCz,ProSe UsageInformationReportingConfiguration4f12rX   zEF.PROSE_GM_DISCOVERYz'ProSe Group Member Discovery Parameters4f13rZ   zEF.PROSE_RELAYzProSe Relay Parameters4f14r[   zEF.PROSE_RELAY_DISCOVERYz ProSe Relay Discovery Parametersr   )r7  r8  r  r  r  r  s         r  r8  zDF_ProSe.__init__  s   ASt$AA&AAAvt^46 6vt^46 6vt^5KLL&$(<GI I&$(<NP P&$(<NP Pvt%602 2vt_6MNN&$7LMM&$2GHH&$	HJ Jvt%<@B Bvt%5/1 1&$(B<> >/
4 	ur   )r  r  r  r  rA  s   @r  r  r    =                 r   r  c                         e Zd Zd fd	Z xZS )DF_USIM_5GS5FC0DF.5GS5GS related filesc                     t                      j        d|||d| t          d          t          ddddd          t          d          t          d	d
ddd          t	          d          t          d          t          d          t          d          t          d          t          d          t          ddddd          t          d          t          d          t          d          t          d          t          d          t!          d          t#          d          t%          d          g}|                     |           d S ) Nr  r   r  r  rE   zEF.5GSN3GPPLOCIz!5GS non-3GPP location informationr5  r  r   rG   zEF.5GSN3GPPNSCz(5GS non-3GPP Access NAS Security Contextr   r   r   r   r   4F0BrP   zEF.URSPz#UE Route Selector Policies per PLMNr   r   r   r   r   r   r   r   r   r   )r7  r8  rR  r  rC  r\  r[  rh  rr  r  r  r  r  r  r  r  r  r  r  r  r  s         r  r8  zDF_USIM_5GS.__init__  s   ASt$AA&AAA 3'''64): CSR R R#&&&&$(8ISVX X X#&&&s###c***S!!!$$$ ---&$	DcS S S%%%3$$$3s###3'''$$$,,,1
4 	ur   )r  r  r  r  rA  s   @r  r  r    r  r   r  c                   $     e Zd ZdZd fd	Z xZS )DF_SAIPzThis is not really TS 31.102 but part of the eUICC Profile Package: Interoperable Format Technical
    Specification as released by TCA (formerly SIMalliance)5FD0DF.SAIP!SIMalliance Interoperable Profilec                      t                      j        d|||d| t          d          g}|                     |           d S )Nr  rS  )r<  r   )r7  r8  r[  r  r  s         r  r8  zDF_SAIP.__init__>  sZ    ASt$AA&AAA &)))
 	ur   )r  r  r  )r   r   r   r  r8  r@  rA  s   @r  r  r  ;  sG        ? ?         r   r  c                   h     e Zd Z	 	 d fd	Zd Z ed           G d	 d
e                      Z xZS )ADF_USIMa0000000871002TADF.USIMNUSIM Applicationc           	         t                                          ||||||           | xj        |                                 gz  c_        g t	          d          t                      t          dddd          t          d	d
ddd          t                      t          d          t                      t          dd dddd          t          dd ddd          t          dd ddd          t          d          t          dd d d!d"d#          t          d$          t          d%          t          d&dd'd(d)*          t!                      t#                      t%          d+d,-          t'                      t)          d.          t+                      t-          d/d d0d1dd2gd3          t/          d4d d
          t1          d5          t3          d6          t5          d
          t-          d7d d8d9d:d2gd;3          t7          d<d d=d>d;          t7          d?d d@dAdB          t9          dC          t;          d          t=          dD          t?          d          t?          dEd dFdGdD          t7          dHd dIdJdK          tA          d+          tC          dL          tE          dM          t-          dNd dOdPd%d:3          t7          dQd dRdSdT          tG          d%          tI          g dU          tK          dV          tM          dW          tO          dX          tQ                      tS                      t          dYddZdd[          t          d\dd]d^d_          tU          d`da          tW                      t          dbd dcdd          tY          dedMdf          t[          dg          t-          dhd didjdkd%3          t7          dld dmdn          t]          dk          t_          do          ta          dpdTq          t7          drd dsdt          t          dud dvdwdx          tc          dy          t7          dzd d{d|d}          te          dy          tg          dy          ti          d~          tk          dd          tm          d          to          d          tm          dd ddd          to          dd ddd          tq          d          tq          dd ddd          ts          d          tu          d          tw          d          ty          d          t          dd,ddd)d#          t{          d          t}          d          t          dd ddd          t          dd ddd          t          d          t          ddddd          t          d          t          dd ddd*          t          dd ddd          t          d          t          dd ddd          t          dd ddd          t          dd ddd          t                      t          d          t          d          t          dd ddd          t          dd ddd          t          d¬          t          dì          t          dĬ          t          dŬ          t          dƬ          t                      t          dǬ          t          d          t          dȬ          t                      t                      t          g dɢ          t          ddg          t          d̬          t          g d͢          t          ddg          t          dЬ          t                      t          dѬ          }|r#|Z                    t          dT                     | \                    |           d S )N)aidhas_fsr<  r3  r4  r5  rE   )r3  6f09rN   z	EF.KeysPSz*Ciphering and Integrity Keys for PS domain)r5  6f60rO   zEF.PLMNwAcTz4User controlled PLMN Selector with Access Technologyr[   r  rR   r  6f39zEF.ACMzAccumulated call meterr  )r5  r6  r  6f3ezEF.GID1rW   rV   6f3fzEF.GID2rY   rX   rZ   6f41zEF.PUCTz!Price per unit and currency table)rH   rH   )r5  rW  r  rT   rJ   6f7bzEF.FPLMNzForbidden PLMNs)rQ   N)r5  rW  rS   rg   )r3  r  rU   6f3bzEF.FDNzFixed Dialling Numbersr   )r5  r  ext6f3cr\   rQ   6f49zEF.SDNzService Dialling NumbersrG   rF   6f4bzEF.EXT2zExtension2 (FDN)6f4czEF.EXT3zExtension2 (SDN)rH   rP   rM   6f83zEF.OCTzOutgoing Call Timer6f4ezEF.EXT5zExtension5 (ICI/OCI/MSISDN)rx   r`   ra   6f4dzEF.BDNzBarred Dialling Numbers6f55zEF.EXT4zExtension4 (BDN/SSC)rK   )rE   rJ   rl   rn   rn   ro   rp   6f61zEF.OPLMNwAcTrv   6f62zEF.HPLMNwAcTz%HPLMN Selector with Access Technologyrw   6f06r_   6fc4z	EF.NETPARzNetwork Parameters6fc5ry   rz   6fc7zEF.MBDNr|   r{   6fc8zEF.EXT6zExtension6 (MBDN)r}   r~   )r  r  6fcczEF.EXT7zExtension7 (CFIS)6fcdzEF.SPDIr   r   r   6fcfzEF.EXT8zExtension8 (MMSN)r   )r   r   r   6fd3)r  r<  r   6fb3zEF.VBSzVoice Broadcast Servicer   6fb4zEF.VBSSzVoice Broadcast Service Statusr   6fd5zEF.VBSCAz+Voice Broadcast Service Ciphering Algorithmr   r   r   6fd9z	EF.EHPLMNr   r   )r   r   )r   r   6fdezEF.SPNIr   r   6fdfzEF.PNNIr   r   r   r]  rh   r^  zEPS location informationr   6fe6zEF.UFCzUSAT Facility Control)rD   rU   6fe8zEF.NASCONFIGz Non Access Stratum Configurationr   r   6fedz	EF.FDNURIzFixed Dialling Numbers URI)rE   r   6feez	EF.BDNURIzBarred Dialling Numbers URI)rJ   r   6fefz	EF.SDNURIzService Dialling Numbers URI)rG   r   )r   r   6ff5zEF.ePDGIdEmzEmergency ePDG Identifier)r   r   6ff6zEF.ePDGSelectionEmz1ePDG Selection Information for Emergency Servicesr   r   r   r   r   r5  r=  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r  )]r7  r8  r  r  r  r  r1   r  r   r  CyclicEFr  r2   r3   r4   r5   r9  rQ  r(   r  r)   rs  r*   r,   r-   r.   r/   r#   r!   r~  r  r  r  r   r   r   r  r  r"   r$   r  r  r9   r  r   r%   r&   r'   r+   r   r   r   r   r    r   r   r  r  r  r  r  r#  r/  r  r:  r\  rl  r  r  r  r  r  r<   r=   r  r>   r  r  r?   r@   r:   r  r  r  r  r  r  rz  r  r  r  r0   r  )
r;  r  r  r4  r<  r3  r5  has_imsir  r>  s
            r  r8  zADF_USIM.__init__H  s   SSt$UYZZZ 6 6 8 899D
tD
IID
 FD+EG G GD

 }T^`b b bD
 KKD
 b!!!D
 HHD
 VT82FBP P PD
 &$	8R\^___D
 &$	8R\^___D
 2D
 &$	BY[] ] ]D
" B#D
$ %D
& vtZ6GjYYY'D
( II)D
* GG+D
, $+++-D
. HH/D
0 R   1D
2 KK3D
4 640HSTVXRY_`aaa5D
6 64,,,7D
8 b!!!9D
: B;D
< B=D
> 640JUVXZT[abccc?D
@ 641CQOOOAD
B 641CQOOOCD
D BED
F 1GD
H 1ID
J 1KD
L 640EqQQQMD
N 641NXZ[[[OD
P BQD
R R   SD
T BUD
X 640ISTZ[\\\YD
Z 641GQRSSS[D
\ 1]D
^ >>>***_D
` 2aD
b 2cD
d 2eD
f NNgD
h NNiD
j ~<r|~kD
l ~<cmopppmD
n 64  oD
p MMqD
r &$:NOOOsD
t 64,,,uD
v 2wD
x 641KUW]^___yD
z 641DEEE{D
| 2}D
~ BD
@ BA&&&AD
B 641DEEECD
D &$	8^hjkkkED
F BGD
H 641DbQQQID
J b!!!KD
L R   MD
N h'''OD
P 26***QD
R BSD
T R   UD
V FD(1JTVWWWWD
X VT93S]_```YD
Z b!!![D
\ fdJ5blnooo]D
^ R   _D
` 2aD
b 2cD
d R   eD
f vt[7IPZdfggggD
h )))iD
l h'''mD
n &$	8T^`aaaoD
p vtY5MWYZZZqD
r b!!!sD
t vt\8R\^___uD
v b!!!wD
z &$7NU\]]]{D
| &$=_iklll}D
@ 2AD
B vt[7S]deeeCD
D vt[7T^efffED
F vt[7U_fgggGD
J HHKD
L j)))MD
N Z000OD
P fdM8S]ghhhQD
R VT+?"U_ik k kSD
V S)))WD
X S)))YD
` c***aD
b #&&&cD
d  ,,,eD
f IIgD
h C   iD
j "%%%kD
l c"""mD
p NNqD
r OOsD
t HHHIIIuD
v B8$$$wD
x S!!!yD
~  H H HIIID
@ SI&&&AD
B $$$CD
D IIED
F C(((GD
L  	-LLd+++,,,ur   c                 J    t           j        j                            |          S r  )pySim
ts_102_221CardProfileUICCdecode_select_response)r;  data_hexs     r  r8  zADF_USIM.decode_select_response  s    /FFxPPPr   zApplication-Specific Commandsc                   "   e Zd Ze                                Ze                    ded           e                    ded           e	                    e          d             Z
e                                Ze                    ded           e	                    e          d	             Ze                                Ze                    d
ed           e	                    e          d             Ze                                Ze                    ded           e	                    e          d             Ze                                Ze                    ddd           e	                    e          d             ZdS )ADF_USIM.AddlShellCommandsRANDzRandom challenge)typehelpAUTNzAuthentication Noncec                     | j         j        j                            |j        |j                  \  }}| j                             |           dS )z/Perform Authentication and Key Agreement (AKA).N)r  r  sccauthenticater<  r?  poutput_json)r;  optsdata_sws       r  do_authenticatez*ADF_USIM.AddlShellCommands.do_authenticate  sD     )/-::49diPPKT3I""4(((((r   PROFILEz%Hexstring of encoded terminal profilec                     | j         j        j                            |j                  \  }}| j                             d|d|           dS )am  Send a TERMINAL PROFILE command to the card.
            This is used to inform the card about which optional
            features the terminal (modem/phone) supports, particularly
            in the context of SIM Toolkit, Proactive SIM and OTA.  You
            must specify a hex-string with the encoded terminal profile
            you want to send to the card.SW: , data: N)r  r  rA  terminal_profilerH  r	  r;  rD  rE  sws       r  do_terminal_profilez.ADF_USIM.AddlShellCommands.do_terminal_profile  sN     ,==dlKKJT2IBBB=>>>>>r   PAYLOADz(Hexstring of encoded payload to ENVELOPEc                     | j         j        j                            |j                  \  }}| j                             d|d|           dS )zSend an ENVELOPE command to the card.  This is how a
            variety of information is communicated from the terminal
            (modem/phone) to the card, particularly in the context of
            SIM Toolkit, Proactive SIM and OTA.rJ  rK  N)r  r  rA  enveloperP  r	  rM  s       r  do_envelopez&ADF_USIM.AddlShellCommands.do_envelope  sN     ,55dlCCJT2IBBB=>>>>>r   TPDUzHexstring of encoded SMS TPDUc                    t                      }|                    t          |j                             t	          ddd          }t          ||g          }| j        j        j        	                    t          |                                                    \  }}| j                            d|d|           dS )	a?  Send an ENVELOPE(SMS-PP-Download) command to the card.
            This emulates a terminal (modem/phone) having received a SMS
            with a PID of 'SMS for the SIM card'.  You can use this
            command in the context of testing OTA related features
            without a modem/phone or a cellular network.networkuicc)source_dev_iddest_dev_id)decoded)childrenrJ  rK  N)rA   
from_bytesr  rT  rB   rC   r  r  rA  rR  r  r  r	  )r;  rD  tpdu_iedev_idssms_dlrE  rN  s          r  do_envelope_smsz*ADF_USIM.AddlShellCommands.do_envelope_sms  s     jjGs49~~...&*3FKKM M MG"Wg,>???F,55c&--//6J6JKKJT2IBBB=>>>>>r   z--nswo-context
store_truez-use SUCI 5G Non-Seamless WLAN Offload context)actionr>  c                 R   d}|j         rd}| j        j        j                            |          \  }}t                      }|                    t          |                     |                                }| j        	                    dt          |d                   z             dS )zSend a GET IDENTITY command to the card. This is part of the
            procedure for "SUCI calculation performed on USIM" supported
            by USIM with support for both EF.UST service 124 and 125.rD   rE   zSUCI TLV Data Object: %ssuci__tlv_data_objectN)nswo_contextr  r  rA  get_identityr   r  r  r  r	  r  )r;  rD  contextrE  rF  dodo_ds          r  do_get_identityz*ADF_USIM.AddlShellCommands.do_get_identity  s    
 G  )/-::7CCKT3#%%BKKD		"""::<<DI83tD[?\;];]]^^^^^r   N)r   r   r   argparseArgumentParserauthenticate_parseradd_argumentr   cmd2with_argparserrG  term_prof_parserrO  envelope_parserrS  envelope_sms_parserr`  get_id_parserrj  r   r   r  r  r;    s       &5577((iFX(YYY((iF\(]]] 
		0	1	1	) 	) 
2	1	)
 $2244%%iiFm%nnn			-	.	.	? 	? 
/	.	? #1133$$YYEo$ppp			_	-	-	? 	? 
.	-	? '5577((iFe(fff			0	1	1	? 	? 
2	1	? !//11""#3L(W 	# 	Y 	Y 	Y 
		]	+	+	_ 	_ 
,	+	_ 	_ 	_r   r  )r  Tr  NNr  T)	r   r   r   r8  r8  r  r  r  r@  rA  s   @r  r  r  G  s        [_37O O O O O ObQ Q Q :;;H_ H_ H_ H_ H_J H_ H_ <;H_ H_ H_ H_ H_r   r  zSecurity managementz#Authentication error, incorrect MACz4Authentication error, security context not supportedzKey freshness failurez/Authentication error, no memory space availablez9Authentication error, no memory space available in EF MUK)98629864986598669867c                        e Zd Z fdZ xZS )CardApplicationUSIMc                 r    t                                          dt                      t                     d S )NUSIMadfrN  )r7  r8  r  sw_usim)r;  r>  s    r  r8  zCardApplicationUSIM.__init__5  s,    XZZG<<<<<r   r  rA  s   @r  r{  r{  4  s8        = = = = = = = = =r   r{  c                        e Zd Z fdZ xZS )CardApplicationUSIMnonIMSIc                     t          dddd          }t                                          d|t                     d S )Na000000087100bzADF.USIM-non-IMSIFz23GPP USIM (non-IMSI SUPI Type) - TS 31.102 Annex N)r  r4  r3  r5  zUSIM-non-IMSIr~  )r  r7  r8  r  )r;  r  r>  s     r  r8  z#CardApplicationUSIMnonIMSI.__init__:  sK    +2EPUPR R Rcg>>>>>r   r  rA  s   @r  r  r  9  s8        ? ? ? ? ? ? ? ? ?r   r  )r  rp  	constructr   rm  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   osmocom.utilsr   osmocom.tlvosmocom.constructpySim.ts_102_221r5  pySim.ts_51_011r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   pySim.filesystempySim.ts_31_102_telecomr:   r;   pySim.ts_31_103_sharedr<   r=   r>   r?   r@   	pySim.catrA   rB   rC   r  r  r  r?  r   r  r  r  rC  r[  
TransRecEFr  r  r  r  r  r9  rQ  rs  r2  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r/  r:  r\  rl  r  r  r  r  r  r  r  r  r  CardDFr  r  r  r5  rA  rR  r\  rh  rr  r  r  r  r  r  r  r  r  r  r  r  r  r$  r1  rH  rf  rz  r  r  r  r  r  r  r  r  r  r  r  r  CardADFr  r  CardApplicationr{  r  r   r   r  <module>r     s   ,  + + + + + + e e e e e e e e e e e e e e e e e e e e e e Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q # # # # # #             H H H H H H H H H H H H H H ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ T T T T T T T T T T T T T T T T T T d d d d d d d d d d d d d d d d d d d d V V V V V V V V V V V V V V V V 8 8 8 8 8 8 8 8 8 8 # # # # # #     B B B B B B B B [ [ [ [ [ [ [ [ [ [ ; ; ; ; ; ; ; ; ? ? ? ? ? ? ? ? ? ?SS%S }S '	S
 |S &S |S 0S 0S %S -S 1S  S 6S +S  2!S" "#S S$ "%S& 'S( >)S* +S, -S. 4/S0 A1S2 $3S4 5S6 7S8 "9S: ";S< =S>  ?S@  ASB CSD  ES S SF  GSH (ISJ #KSL MSN OSP QSR SST BUSV /WSX YSZ [S\ ]S^ "_S` +aSb +cSd 'eSf .gS S Sh ,iSj kSl &mSn *oSp ;qSr 9sSt 6uSv wSx 9ySz ={S| #}S~ 'S@ ASB CSD (ESF %GSH 2IS S SJ KSL :MSN OSP ;QSR 2SST )USV &WSX 5YSZ [S\ $]S^  _S` 9aSb .cSd 9eSf *gSh %iSj -kS S Sl 9mSn 4oSp qSr sSt :uSv  wSx (ySz /{S| (}S~ 'S@ 2ASB #CSD ESF GSH 	"ISJ KSL 	#MS S SN 	OSP 	'QSR 	3SST 	1USV 	4WSX YSZ [S\ 	G]S^ 	J_S` 	aSb 	LcSd 	eSf 	!gSh 	iSj 	kSl 	(mSn oS S Sp 	"qSr 	)sSt 	.uSv 	!wSx 	2ySz 	'{S| 	(}S~ 	jS@ 	.ASB 	!CSD 	5ESF 	;GSH 	#ISJ 	*KSL 	)MSN 	?OSP 	aQS SR 
/	#		:	)		-	]	*	,eS S S
l :=?2D   && 
        ; ; ; ; ;J ; ; ;B0 0 0 0 0M 0 0 0 {8 {8 {8 {8 {8 {8 {8 {8|+ + + + +J + + +(: : : : :m : : :! ! ! ! ! ! ! !-` -` -` -` -` -` -` -`b-. -. -. -. -.Z -. -. -.b_ _ _ _ _m _ _ _ 
  
  
  
  
M  
  
  
FF F F F F F F F? ? ? ? ?X ? ? ? ? ? ? ? ?X ? ? ?C C C C CX C C Ca a a a aj a a a
@ @ @ @ @ @ @ @&K K K K K] K K KI I I I I= I I I6 6 6 6 6= 6 6 6    *   K K K K K
 K K KK K K K K} K K KK K K K KZ K K K- - - - -Z - - -*1 1 1 1 1z 1 1 1	j 	j 	j 	j 	j- 	j 	j 	j3 3 3 3 3
 3 3 33 3 3 3 3
 3 3 3>H H H H H H H H7 7 7 7 7
 7 7 74	A 	A 	A 	A 	A] 	A 	A 	AF F F F FX F F F% % % % % % % %$3 3 3 3 3} 3 3 3 M M M M M} M M M 6*W$k'&9::*1 *1 *1 *1 *1M *1 *1 *1Za a a a am a a a9 9 9 9 9m 9 9 9	 	 	 	 	F 	 	 	"% % % % %z % % %*0 0 0 0 0j 0 0 0*$ $ $ $ $j $ $ $- - - - -z - - -0H H H H H] H H H
D 
D 
D 
D 
D 
D 
D 
DD D D D Dz D D D3 3 3 3 3- 3 3 3,	1 	1 	1 	1 	1= 	1 	1 	14 4 4 4 4= 4 4 4& & & & &] & & && & & & &- & & &
A 
A 
A 
A 
A] 
A 
A 
Af f f f f- f f f@ @ @ @ @Z @ @ @    f   @ @ @ @ @% @ @ @(A A A A A] A A A<E E E E E] E E E0K K K K K K K KD> > > > >] > > >.I I I I Im I I I,C C C C C C C C4; ; ; ; ;] ; ; ;0    &   "= = = = =m = = =6           f   = = = = = = = =X X X X X] X X XB B B B B- B B Bc c c c c- c c c    f   :    V       v   @    &   @	 	 	 	 	f 	 	 	^_ ^_ ^_ ^_ ^_w ^_ ^_ ^_F 5F'AK = = = = =/ = = =
? ? ? ? ? ? ? ? ? ?r   