
    p                        S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr	  SSK
Jr  SSK
Jr  SNS
 jrS r    SOS jrS rS r    SPS jrSQS jr SRS jrS rSSS jr STS jrSNS jrS r SUS jrS rS rS rS rS rS r S r!\RD                  RF                  4S  jr$\RD                  RF                  4S! jr%S" r& SVS# jr'    SWS$ jr( SXS% jr)    SYS& jr* SZS' jr+    S[S( jr, S\S) jr-    S]S* jr.S+ r/S, r0S- r1S. r2S/ r3S0 r4S1 r5S2 r6S3 r7S4 r8S5 r9S^S6 jr: S_S7 jr;S8 r<S9 r=S: r>S; r?S< r@\RD                  RF                  4S= jrA\RD                  RF                  4S> jrBS\RD                  RF                  4S? jrCS@ rDSA rESB rF\RD                  RF                  4SC jrG\RD                  RF                  4SD jrHSE rISF rJSG rKSH rLSI rM S`SJ jrN    SaSK jrOSL rPSM rQg	)bzApphub Command Lib Flags.    )arg_parsers)base)concepts)deps)utils)concept_parsers)presentation_specsNc                     [         R                  " S[        R                  " [        R
                  SS9/U (       a  U S9$ SS9$ )Create basic attributes that fallthrough location to global in resource argument.

Args:
  help_text: If set, overrides default help text

Returns:
  Resource argument parameter config
locationz8Service project attachments only support global locationfunctionhintzLocation of the {resource}.namefallthroughs	help_textr    ResourceParameterAttributeConfigr   Fallthroughapphub_utilsDefaultToGlobalr   s    .lib/googlecloudsdk/command_lib/apphub/flags.py'_DefaultToGlobalLocationAttributeConfigr      sP     
	2	2


#33M '		
 	 .K	
 	    c                  \    [         R                  " SS[        5       [         R                  S9$ Napphub.projects.locationsr   )resource_namelocationsId
projectsId)r   ResourceSpecr    DEFAULT_PROJECT_ATTRIBUTE_CONFIG r   r   GetGlobalLocationResourceSpecr&   0   s*    			!9;::	
 r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ z6Constructs and returns the Location Resource Argument.z	Location.{}{} --required)r   ConceptParserForResourceformatr&   arg_namer   
positionalr-   s       r   GetGlobalLocationResourceArgr4   9   sJ     &;)		&	&	2	2mm*B$9#%	 
3 
 r   c                  ,    [         R                  " SSS9$ )Nr   z&The Cloud location for the {resource}.r   r   r   r   r%   r   r   LocationAttributeConfigr8   K   s    		2	28
 r   c                  \    [         R                  " SS[        5       [         R                  S9$ r   )r   r#   r8   r$   r%   r   r   GetLocationResourceSpecr:   R   s*    			!)+::	
 r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ r(   )r   r.   r/   r0   r:   r1   s       r   GetLocationResourceArgr<   [   sJ     &;)		&	&	2	2mm*B$9	 
3 
 r   c                 z   ^ ^ U U4S jn[         R                  " SSU" 5       [         R                  [        5       S9$ )zFConstructs and returns the Resource specification for Service project.c                  .   > [         R                  " T TS9$ Nr6   r7   r2   r   s   r   ServiceProjectAttributeConfigDGetServiceProjectResourceSpec.<locals>.ServiceProjectAttributeConfigp       44 r   z3apphub.projects.locations.serviceProjectAttachmentsServiceProjectAttachment)r    serviceProjectAttachmentsIdr"   r!   )r   r#   r$   r   )r2   r   rA   s   `` r   GetServiceProjectResourceSpecrF   m   s8     
		;."?"A::9;
 r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ )z=Constructs and returns the Service Project Resource Argument.zThe Service Project ID.r)   r*   r+   r,   )r   r.   r/   r0   rF   r1   s       r   GetServiceProjectResourceArgrH      sK    
 44)		&	&	2	2mm*B$9#%	 
3 
 r   c                 ,    [         R                  " U US9$ )z9Helper function for constructing ResourceAttributeConfig.r6   r7   r@   s     r   "ApplicationResourceAttributeConfigrJ      s     
	2	2
 r   applicationc                 p    [         R                  " SS[        X5      [         R                  [	        5       S9$ )zBConstructs and returns the Resource specification for Application.z&apphub.projects.locations.applicationsrK   )r    applicationsIdr"   r!   )r   r#   rJ   r$   r8   r@   s     r   GetApplicationResourceSpecrN      s4     
		.!7L::)+
 r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ )z<Constructs and returns the Application ID Resource Argument.zThe Application ID.r)   r*   r+   r,   )r   r.   r/   r0   rN   r1   s       r   GetApplicationResourceArgrP      sK    
 00)		&	&	2	2mm*B$9 "	 
3 
 r   c                     [         R                  " S[        R                  " [        R
                  SS9/U (       a  U S9$ SS9$ )r   r   z'Boundaries only support global locationr   zLocation of the Boundaryr   r   r   s    r   2_DefaultToGlobalLocationAttributeConfigForBoundaryrR      sP     
	2	2


#33< '		
 	 .H	
 	r   c                  \    [         R                  " SS[         R                  [        5       S9$ )zAConstructs and returns the Resource specification for a Boundary.r   r   )r    r"   r!   )r   r#   r$   rR   r%   r   r   GetBoundaryResourceSpecrT      s*    			!::DF	
 r   c                     U(       a  UOSn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       USS9$ )z6Constructs and returns the Boundary Resource Argument.zLocation of the Boundary.r)   r*   r+   F)
group_helpr-   )r   r.   r/   r0   rT   )r2   r   r3   s      r   GetBoundaryResourceArgrW      sJ     %i*E)		&	&	2	2mm*B$9	 
3 
 r   c                 6    [        5       R                  U 5        g)z=Adds the resource argument for the boundary describe command.N)rW   AddToParserparsers    r   AddDescribeBoundaryFlagsr\      s    &&v.r   c                     [        5       R                  U 5        [        R                  R                  U 5        U R	                  S5      nUR                  SSS9  U R                  SSS9  g)z3Adds the arguments for the boundary update command.zUpdate Boundary Optionsz
--crm-nodez,The CRM node to associate with the boundary.helpz--request-idz,An optional request ID to identify requests.N)rW   rY   r   
ASYNC_FLAGadd_argument_groupadd_argument)r[   update_groups     r   AddUpdateBoundaryFlagsrd      sj    &&v.//f%**+DE,G   	I  r   c                 6    [        5       R                  U 5        g N)rH   rY   rZ   s    r   AddDescribeServiceProjectFlagsrg           ,,V4r   c                 6    [        5       R                  U 5        g rf   rP   rY   rZ   s    r   AddDescribeApplicationFlagsrk          ))&1r   c                 6    [        5       R                  U 5        g rf   )r4   rY   rZ   s    r   AddListServiceProjectFlagsrn      rh   r   c                 6    [        5       R                  U 5        g rf   r<   rY   rZ   s    r   AddListApplicationFlagsrq          &&v.r   c                 \    [        5       R                  U 5        U R                  SSSSSS9  g N--asyncasync_
store_trueFNReturn immediately, without waiting for the operation in progress to complete.destactiondefaultr_   rH   rY   rb   rZ   s    r   AddServiceProjectFlagsr~     7     ,,V4  	r   c                     [        5       R                  U 5        [        U SUS9  U R                  SSSS.SSS	9  U R                  S
SS9  U R                  SSS9  U R                  SSSSSS9  g)-Adds flags required to create an application.rK   r    release_trackz--scope-typez!Represents a regional applicationzRepresents a global application)REGIONALGLOBALzScope of the ApplicationT)choicesr_   r-   --display-nameHuman-friendly display namer^   --descriptionDescription of the Applicationru   rv   rw   Frx   ry   N)rP   rY   AddAttributesFlagsrb   r[   r   s     r   CreateApplicationFlagsr     s     ))&1M 	95 &   	&-JKo,LM  	r   c                     [        5       R                  U 5        U R                  SSS9  U R                  SSS9  [        U SUS9  U R                  SS	S
SSS9  g)r   r   r   r^   r   r   rK   r   ru   rv   rw   Frx   ry   N)rP   rY   rb   r   r   s     r   UpdateApplicationFlagsr   -  ss     ))&1&-JKo,LMM 	  	r   c                 \    [        5       R                  U 5        U R                  SSSSSS9  g rt   r}   rZ   s    r   AddRemoveServiceProjectFlagsr   B  r   r   c                 z   ^ ^ U U4S jn[         R                  " SSU" 5       [         R                  [        5       S9$ )zIConstructs and returns the Resource specification for Discovered Service.c                  .   > [         R                  " T TS9$ r?   r7   r@   s   r    DiscoveredServiceAttributeConfigJGetDiscoveredServiceResourceSpec.<locals>.DiscoveredServiceAttributeConfigU  rC   r   z,apphub.projects.locations.discoveredServicesdiscoveredService)r    discoveredServicesIdr"   r!   r   r#   r$   r8   )r2   r   r   s   `` r    GetDiscoveredServiceResourceSpecr   P  s8    
 
		4';=::)+
 r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ )z@Constructs and returns the Discovered Service Resource Argument.zThe Discovered Service ID.r)   r*   r+   r,   )r   r.   r/   r0   r   r1   s       r   GetDiscoveredServiceResourceArgr   d  sK     77)		&	&	2	2mm*B$9&(	 
3 
 r   c                 z   ^ ^ U U4S jn[         R                  " SSU" 5       [         R                  [        5       S9$ )zJConstructs and returns the Resource specification for Discovered Workload.c                  .   > [         R                  " T TS9$ r?   r7   r@   s   r   !DiscoveredWorkloadAttributeConfigLGetDiscoveredWorkloadResourceSpec.<locals>.DiscoveredWorkloadAttributeConfig{  rC   r   z-apphub.projects.locations.discoveredWorkloadsdiscoveredWorkload)r    discoveredWorkloadsIdr"   r!   r   )r2   r   r   s   `` r   !GetDiscoveredWorkloadResourceSpecr   v  s8    
 
		5(=?::)+
 r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ )zAConstructs and returns the Discovered Workload Resource Argument.zThe Discovered Workload ID.r)   r*   r+   r,   )r   r.   r/   r0   r   r1   s       r    GetDiscoveredWorkloadResourceArgr     sK     88)		&	&	2	2mm*B$9')	 
3 
 r   c                    ^ ^ U U4S jn[         R                  " SSU" 5       [         R                  [        5       [	        SSS9S9$ )zKConstructs and returns the Resource specification for Application Workload.c                  .   > [         R                  " T TS9$ r?   r7   r@   s   r   "ApplicationWorkloadAttributeConfigNGetApplicationWorkloadResourceSpec.<locals>.ApplicationWorkloadAttributeConfig  rC   r   z0apphub.projects.locations.applications.workloadsworkloadrK   Name for the applicationr@   )r    workloadsIdr"   r!   rM   r   r#   r$   r8   rJ   )r2   r   r   s   `` r   "GetApplicationWorkloadResourceSpecr     sF    
 
		846::)+7 .

 
r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ )zBConstructs and returns the application workload Resource Argument.zThe Workload ID.r)   r*   r+   r,   )r   r.   r/   r0   r   r1   s       r   !GetApplicationWorkloadResourceArgr     sK     --)		&	&	2	2mm*B$9(*	 
3 
 r   c                    ^ ^ U U4S jn[         R                  " SSU" 5       [         R                  [        5       [	        SSS9S9$ )zJConstructs and returns the Resource specification for Application Service.c                  .   > [         R                  " T TS9$ r?   r7   r@   s   r   !ApplicationServiceAttributeConfigLGetApplicationServiceResourceSpec.<locals>.ApplicationServiceAttributeConfig  rC   r   z/apphub.projects.locations.applications.servicesservicerK   r   r@   )r    
servicesIdr"   r!   rM   r   )r2   r   r   s   `` r   !GetApplicationServiceResourceSpecr     sF    
 
		724::)+7 .

 
r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ )zAConstructs and returns the application service Resource Argument.zThe Service ID.r)   r*   r+   r,   )r   r.   r/   r0   r   r1   s       r    GetApplicationServiceResourceArgr     sK     ,,)		&	&	2	2mm*B$9')	 
3 
 r   c                 6    [        5       R                  U 5        g rf   )r   rY   rZ   s    r   !AddDescribeDiscoveredServiceFlagsr     s    !#//7r   c                 6    [        5       R                  U 5        g rf   rp   rZ   s    r   AddListDiscoveredServiceFlagsr     rr   r   c                 6    [        5       R                  U 5        g rf   rp   rZ   s    r   AddFindUnregisteredServiceFlagsr     rr   r   c                 6    [        5       R                  U 5        g rf   rp   rZ   s    r   AddFindDiscoveredServiceFlagsr     rr   r   c                 \    [        5       R                  U 5        U R                  SSSSSS9  g )N--uriURIresource_uriTz:Google Cloud Platform resource URI to look up service for.metavarrz   r-   r_   r<   rY   rb   rZ   s    r   AddLookupDiscoveredServiceFlagsr      s5    &&v.G  r   c                 6    [        5       R                  U 5        g rf   )r   rY   rZ   s    r   "AddDescribeDiscoveredWorkloadFlagsr         "$008r   c                 6    [        5       R                  U 5        g rf   rp   rZ   s    r   AddListDiscoveredWorkloadFlagsr     rr   r   c                 6    [        5       R                  U 5        g rf   rp   rZ   s    r    AddFindUnregisteredWorkloadFlagsr     rr   r   c                 6    [        5       R                  U 5        g rf   rp   rZ   s    r   AddFindDiscoveredWorkloadFlagsr     rr   r   c                 \    [        5       R                  U 5        U R                  SSSSSS9  g )Nr   r   r   Tz;Google Cloud Platform resource URI to look up workload for.r   r   rZ   s    r    AddLookupDiscoveredWorkloadFlagsr     s5    &&v.H  r   c                 \    [        5       R                  U 5        U R                  SSSSSS9  g rt   )rP   rY   rb   rZ   s    r   AddDeleteApplicationFlagsr   &  s7    ))&1  	r   c                 z   ^ ^ U U4S jn[         R                  " SSU" 5       [         R                  [        5       S9$ )z@Constructs and returns the Resource specification for Operation.c                  .   > [         R                  " T TS9$ r?   r7   r@   s   r   OperationAttributeConfig:GetOperationResourceSpec.<locals>.OperationAttributeConfig7  rC   r   z$apphub.projects.locations.operations	operation)r    operationsIdr"   r!   r   )r2   r   r   s   `` r   GetOperationResourceSpecr   4  s8     
		,+-::)+
 r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ )z7Constructs and returns the Operation Resource Argument.zThe Operation ID.r)   r*   r+   r,   )r   r.   r/   r0   r   r1   s       r   GetOperationResourceArgr   F  sK    
 ..)		&	&	2	2mm*B$9 	 
3 
 r   c                 6    [        5       R                  U 5        g rf   )r   rY   rZ   s    r   AddDescribeOperationFlagsr   U  s    ''/r   c                 6    [        5       R                  U 5        g rf   rp   rZ   s    r   AddListOperationsFlagsr   Y  rr   r   c                 4    [        SS9R                  U 5        g NFr3   rj   rZ   s    r   AddListApplicationWorkloadFlagsr   ]      u-99&Ar   c                 6    [        5       R                  U 5        g rf   )r   rY   rZ   s    r   #AddDescribeApplicationWorkloadFlagsr   a  s    #%11&9r   c                 \    [        5       R                  U 5        U R                  SSSSSS9  g rt   )r   rY   rb   rZ   s    r   !AddDeleteApplicationWorkloadFlagsr   e  s7    #%11&9  	r   c                 Z   [         R                  " [        R                  " S[	        5       SSSS.SSS9[        R                  " S[        5       S	S
S
S.SSS9/SS/0S9R                  U 5        [        U SUS9  U R                  SSS9  U R                  SSS9  U R                  SSSSSS9  g)z6Adds flags required to create an application workload.WORKLOADzThe Workload resource.
--location--applicationr   rK   Tflag_name_overridesprefixesr-   z--discovered-workloadz!The discovered workload resource.r*   r   projectz--discovered-workload.locationzWORKLOAD.locationcommand_level_fallthroughsr   r   r   r   r^   r   Description of the Workloadru   rv   rw   Frx   ry   N)	r   r.   r	   ResourcePresentationSpecr   r   rY   r   rb   r   s     r   !AddCreateApplicationWorkloadFlagsr   s  s     

5
502&*!0# 
 
5
5%/11 !# : +-@,A"; @ KJm 	&-JKo,IJ  	r   c                     [        5       R                  U 5        [        U SUS9  U R                  SSS9  U R                  SSS9  U R                  SS	S
SSS9  g)z6Adds flags required to update an application workload.r   r   r   r   r^   r   r   ru   rv   rw   Frx   ry   N)r   rY   r   rb   r   s     r   !AddUpdateApplicationWorkloadFlagsr     ss    
 $%11&9Jm 	&-JKo,IJ  	r   c           	      6   U R                  SSSSSSS.SR                  U5      S	9  U R                  S
SSSSSS.SR                  U5      S	9  U[        R                  R                  :X  a  U R                  S[
        R                  " [        [        [        S.S/S9SSR                  U5      S9  U R                  S[
        R                  " [        [        [        S.S/S9SSR                  U5      S9  U R                  S[
        R                  " [        [        [        S.S/S9SSR                  U5      S9  gU[        R                  R                  :X  a  U R                  S[
        R                  " [        [        S.S/S9SSR                  U5      S9  U R                  S[
        R                  " [        [        S.S/S9SSR                  U5      S9  U R                  S[
        R                  " [        [        S.S/S9SSR                  U5      S9  gg)z*Adds flags required for attributes fields.z--criticality-typezUnspecified criticality typez1Mission critical service, application or workloadzHigh impactzMedium impactz
Low impact)TYPE_UNSPECIFIEDMISSION_CRITICALHIGHMEDIUMLOWzCriticality Type of the {})r   r_   z--environment-typezUnspecified environment typezProduction environmentzStaging environmentzTest environmentzDevelopment environment)r   
PRODUCTIONSTAGINGTESTDEVELOPMENTzEnvironment Type of the {}z--business-owners)display-nameemailzchannel-urir  )specrequired_keysappendzBusiness owners of the {})typer{   r_   z--developer-ownerszDeveloper owners of the {}z--operator-ownerszOperator owners of the {})r  r  N)	rb   r0   r   ReleaseTrackALPHAr   ArgDictstrGA)r[   r    r   s      r   r   r     sr    	<A# (..}=   	<0*$2 (..}=  
 d''---
   #"
 #)
 (//>      #"
 #)
 )00?      #"
 #)
 (//>   )),,,
   # #)
 (//>      # #)
 )00?      # #)
 (//>  3 -r   c                 4    [        SS9R                  U 5        g r   rj   rZ   s    r   AddListApplicationServiceFlagsr  /  r   r   c                 6    [        5       R                  U 5        g rf   )r   rY   rZ   s    r   "AddDescribeApplicationServiceFlagsr  3  r   r   c                 \    [        5       R                  U 5        U R                  SSSSSS9  g rt   )r   rY   rb   rZ   s    r    AddDeleteApplicationServiceFlagsr  7  s7    "$008  	r   c                 Z   [         R                  " [        R                  " S[	        5       SSSS.SSS9[        R                  " S[        5       S	S
S
S.SSS9/SS/0S9R                  U 5        [        U SUS9  U R                  SSS9  U R                  SSS9  U R                  SSSSSS9  g)z5Adds flags required to create an application service.SERVICEzThe Service resource.r   r   r   Tr   z--discovered-servicez The discovered service resource.r*   r   z--discovered-service.locationzSERVICE.locationr   r   r   r   r   r^   r   Description of the serviceru   rv   rw   Frx   ry   N)	r   r.   r	   r   r   r   rY   r   rb   r   s     r    AddCreateApplicationServiceFlagsr  E  s     

5
5/1%*!0# 
 
5
5$.00 !# : *,>+?"; @ KI] 	&-JKo,HI  	r   c                     [        5       R                  U 5        [        U SUS9  U R                  SSS9  U R                  SSS9  U R                  SS	S
SSS9  g)z5Adds flags required to update an application service.r   r   r   r   r^   r   r  ru   rv   rw   Frx   ry   N)r   rY   r   rb   r   s     r    AddUpdateApplicationServiceFlagsr  }  ss    
 #$008I] 	&-JKo,HI  	r   c                 6    [        5       R                  U 5        g rf   rj   rZ   s    r   AddGetIamPolicyFlagsr    rl   r   c                 6    [        5       R                  U 5        g rf   rj   rZ   s    r   AddAddIamPolicyBindingFlagsr!    rl   r   c                 6    [        5       R                  U 5        g rf   rj   rZ   s    r   AddRemoveIamPolicyBindingFlagsr#    rl   r   c                 6    [        5       R                  U 5        g rf   rj   rZ   s    r   AddSetIamPolicyFlagsr%    rl   r   c                 4    [        SS9R                  U 5        g )NTr   rp   rZ   s    r   AddDescribeLocationFlagsr'    s    D)55f=r   c           	      |   ^ ^ U U4S jn[         R                  " SSSU" 5       [         R                  [        5       S9$ )zOConstructs and returns the Resource specification for Extended Metadata Schema.c                  .   > [         R                  " T TS9$ r?   r7   r@   s   r   %ExtendedMetadataSchemaAttributeConfigTGetExtendedMetadataSchemaResourceSpec.<locals>.ExtendedMetadataSchemaAttributeConfig  rC   r   z1apphub.projects.locations.extendedMetadataSchemasextendedMetadataSchemav1alpha)r    api_versionextendedMetadataSchemasIdr"   r!   r   )r2   r   r*  s   `` r   %GetExtendedMetadataSchemaResourceSpecr0    s;    
 
		9, E G::)+
 r   c                     U=(       d    Sn[         R                  R                  SR                  U(       a  SOSU 5      [	        5       UUS9$ )zFConstructs and returns the Extended Metadata Schema Resource Argument.z The Extended Metadata Schema ID.r)   r*   r+   r,   )r   r.   r/   r0   r0  r1   s       r   $GetExtendedMetadataSchemaResourceArgr2    sK     ==)		&	&	2	2mm*B$9+-	 
3 
 r   c                 6    [        5       R                  U 5        g rf   )r2  rY   rZ   s    r   &AddDescribeExtendedMetadataSchemaFlagsr4    s    &(44V<r   c                 4    [        SS9R                  U 5        g )NTr,   rp   rZ   s    r   "AddListExtendedMetadataSchemaFlagsr6    s    $'33F;r   rf   )r   NFF)r   NFT)service_projectN)r7  NTT)rK   N)rK   NTT)r   r*   F)discovered_serviceN)r8  NTT)discovered_workloadN)r9  NTT)r   zName for the workload)r   NTT)r   zName for the service)r   NTT)r   N)r   NTT)extended_metadata_schemaN)r:  NTT)R__doc__googlecloudsdk.callioper   r    googlecloudsdk.calliope.conceptsr   r   !googlecloudsdk.command_lib.apphubr   r   (googlecloudsdk.command_lib.util.conceptsr   r	   r   r&   r4   r8   r:   r<   rF   rH   rJ   rN   rP   rR   rT   rW   r\   rd   rg   rk   rn   rq   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   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r!  r#  r%  r'  r0  r2  r4  r6  r%   r   r   <module>r@     s     0 ( 5 1 C D G* 	$ 	$& KO	 GK* 38
/
525/ 261B1B1H1H < 261B1B1H1H * .2* "	& /3* #	& $;2 	& #92 	$8///9///& EI0/B: ++115r ++114 (t7H7H7N7NhVB9 ++115r ++1122222>
 48, (	$=<r   