/* SGP22 Templates in TTCN-3
 *
 * Author: Philipp Maier <pmaier@sysmocom.de> / sysmocom - s.f.m.c. GmbH
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

module RSPDefinitions_Templates {

import from PEDefinitions all;
import from RSPDefinitions all;
import from RSPDefinitions_Types all;

import from PKIX1Explicit88 all;
import from PKIX1Explicit88_Templates all;
import from PKIX1Explicit88_Types all;

import from PKIX1Implicit88 all;

/* GSMA SGP.22, section 2.5.4 */
template (present) BoundProfilePackage
tr_boundProfilePackage := {
	initialiseSecureChannelRequest := {
		remoteOpId := ?,
		transactionId := ?,
		controlRefTemplate := {
			keyType := ?,
			keyLen := ?,
			hostId := ?
		},
		smdpOtpk := ?,
		smdpSign := ?
	},
	/* ES8+.ConfigureISDP */
	firstSequenceOf87 := ?,
	/* ES8+.StoreMetadata */
	sequenceOf88 := ?,
	/* ES8+.ReplaceSessionKeys (optional) */
	secondSequenceOf87 := *,
	/* ES8+.LoadProfileElements */
	sequenceOf86 := ?
}
template (value) BoundProfilePackage
ts_boundProfilePackage := {
	initialiseSecureChannelRequest := {
		remoteOpId := 1,
		transactionId := 'AABBCC'O,
		controlRefTemplate := {
			keyType := '88'O, /* AES */
			keyLen := '10'O, /* 16 byte key-length */
			hostId := '01020304050607080910111213141516'O
		},
		smdpOtpk := '1122334455667788'O,
		smdpSign := 'AABBCCDDEEFF0000'O
	},
	/* ES8+.ConfigureISDP */
	firstSequenceOf87 := {'41414141414141414141414141414141414141414141414141414141414141'O,
			      '42424242424242424242424242424242424242424242424242424242424242'O,
			      '43434343434343434343434343434343434343434343434343434343434343'O},
	/* ES8+.StoreMetadata */
	sequenceOf88 := {'444444444444444444444444444444444444444444'O,
			 '454545454545454545454545454545454545454545'O,
			 '464646464646464646464646464646464646464646'O},
	/* ES8+.ReplaceSessionKeys (optional) */
	secondSequenceOf87 := omit,
	/* ES8+.LoadProfileElements */
	sequenceOf86 := {'474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747'O,
			 '484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848'O,
			 '494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949'O,
			 '505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050'O,
			 '515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151'O}
}

template (present) ServerSigned1 tr_serverSigned1(template (present) octetstring transactionId := ?,
						  template (present) octetstring euiccChallenge := ?,
						  template (present) universal charstring serverAddress := ?,
						  template (present) octetstring serverChallenge := ?) := {
	 transactionId := transactionId,
	 euiccChallenge := euiccChallenge,
	 serverAddress := serverAddress,
	 serverChallenge := serverChallenge
}
template (value) ServerSigned1 ts_serverSigned1(template (value) octetstring transactionId := 'ABCDEF'O,
						template (value) octetstring euiccChallenge := '00112233445566778899AABBCCDDEEFF'O,
						template (value) universal charstring serverAddress := "smdp.example.com",
						template (value) octetstring serverChallenge := '01020304050607080910111213141516'O) := {
	 transactionId := transactionId,
	 euiccChallenge := euiccChallenge,
	 serverAddress := serverAddress,
	 serverChallenge := serverChallenge
}

template (present) CtxParams1 tr_ctxParams1 := {
	 ctxParamsForCommonAuthentication := {
		matchingId := *,
		deviceInfo := {
			tac := ?,
			deviceCapabilities := {
				gsmSupportedRelease := *,
				utranSupportedRelease := *,
				cdma2000onexSupportedRelease := *,
				cdma2000hrpdSupportedRelease := *,
				cdma2000ehrpdSupportedRelease := *,
				eutranEpcSupportedRelease := *,
				contactlessSupportedRelease := *,
				rspCrlSupportedVersion := *,
				nrEpcSupportedRelease := *,
				nr5gcSupportedRelease := *,
				eutran5gcSupportedRelease := *,
				lpaSvn := *,
				catSupportedClasses := *,
				euiccFormFactorType := *,
				deviceAdditionalFeatureSupport := *
			},
			imei := *
		}
	}
}
template (value) CtxParams1 ts_ctxParams1 := {
	ctxParamsForCommonAuthentication := {
		matchingId := omit,
		deviceInfo := {
			tac := '12345678'O,
			deviceCapabilities := {
				gsmSupportedRelease := omit,
				utranSupportedRelease := omit,
				cdma2000onexSupportedRelease := omit,
				cdma2000hrpdSupportedRelease := omit,
				cdma2000ehrpdSupportedRelease := omit,
				eutranEpcSupportedRelease := omit,
				contactlessSupportedRelease := omit,
				rspCrlSupportedVersion := omit,
				nrEpcSupportedRelease := omit,
				nr5gcSupportedRelease := omit,
				eutran5gcSupportedRelease := omit,
				lpaSvn := omit,
				catSupportedClasses := omit,
				euiccFormFactorType := omit,
				deviceAdditionalFeatureSupport := omit
			},
			imei := omit
		}
	}
}

template (present) EuiccSigned1 tr_euiccSigned1(template (present) octetstring transactionId := ?,
						template (present) universal charstring serverAddress := ?,
						template (present) octetstring serverChallenge := ?,
						template (present) EUICCInfo2 euiccInfo2 := ?,
						template (present) CtxParams1 ctxParams1 := ?) := {
	 transactionId := transactionId,
	 serverAddress := serverAddress,
	 serverChallenge := serverChallenge,
	 euiccInfo2 := euiccInfo2,
	 ctxParams1 := ctxParams1
}
template (value) EuiccSigned1 ts_euiccSigned1(template (value) octetstring transactionId := 'ABCDEF'O,
					      template (value) universal charstring serverAddress := "smdp.example.com",
					      template (value) octetstring serverChallenge := '01020304050607080910111213141516'O,
					      template (value) EUICCInfo2 euiccInfo2 := ts_EUICCInfo2,
					      template (value) CtxParams1 ctxParams1 := ts_ctxParams1) := {
	 transactionId := transactionId,
	 serverAddress := serverAddress,
	 serverChallenge := serverChallenge,
	 euiccInfo2 := euiccInfo2,
	 ctxParams1 := ctxParams1
}

template (present) StoreMetadataRequest tr_storeMetadataRequest := {
	iccid := ?,
	serviceProviderName := ?,
	profileName := ?,
	iconType := *,
	icon := *,
	profileClass := ?,
	notificationConfigurationInfo := *,
	profileOwner := *,
	profilePolicyRules := *,
	serviceSpecificDataStoredInEuicc := *,
	serviceSpecificDataNotStoredInEuicc := *
}
template (value) StoreMetadataRequest ts_storeMetadataRequest := {
	iccid := '123456789ABCDEFFAAAA'O,
	serviceProviderName := "testsuite",
	profileName := "testprofile",
	iconType := omit,
	icon := omit,
	profileClass := 2, /* operational */
	notificationConfigurationInfo := omit,
	profileOwner := omit,
	profilePolicyRules := omit,
	serviceSpecificDataStoredInEuicc := omit,
	serviceSpecificDataNotStoredInEuicc := omit
}

template (present) SmdpSigned2 tr_smdpSigned2(template (present) octetstring transactionId := ?,
					      template (present) boolean ccRequiredFlag := ?) := {
	 transactionId := transactionId,
	 ccRequiredFlag := ccRequiredFlag,
	 bppEuiccOtpk := ?
}
template (value) SmdpSigned2 ts_smdpSigned2(template (value) octetstring transactionId := 'ABCDEF'O,
					    template (value) boolean ccRequiredFlag := false) := {
	 transactionId := transactionId,
	 ccRequiredFlag := ccRequiredFlag,
	 bppEuiccOtpk := omit
}

/* GSMA SGP.22, section 2.5.6 */
template (present) ProfileInstallationResultData
tr_profileInstallationResultData := {
	transactionId := ?,
	notificationMetadata := {
		seqNumber := ?,
		profileManagementOperation := ?,
		notificationAddress := ?,
		iccid := *
	},
	smdpOid := ?,
	finalResult := ?
}
template (value) ProfileInstallationResultData
ts_profileInstallationResultData := {
	transactionId := 'AABBCC'O,
	notificationMetadata := {
		seqNumber := 1234,
		profileManagementOperation := '01'B, /* is this correct? (notificationInstall) */
		notificationAddress := "smdp.example.com",
		iccid := '123456789ABCDEFFAAAA'O
	},
	smdpOid := id_rsp, /* random OBJECT IDENTIFIER for testing */
	finalResult := {
		successResult := {
			aid := '0102030405'O,
			simaResponse := '4141414141414141414141414141414141414141414141414141'O
		}
	}
}
template (present) ProfileInstallationResult
tr_profileInstallationResult := {
	profileInstallationResultData := tr_profileInstallationResultData,
	euiccSignPIR := ?
}
template (value) ProfileInstallationResult
ts_profileInstallationResult := {
	profileInstallationResultData := ts_profileInstallationResultData,
	euiccSignPIR := '00112233445566778899AABBCCDDEEFF'O
}

/* GSMA SGP.22, section 5.6.1 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_initiateAuthenticationRequest(template (present) octetstring euiccChallenge := ?,
				 template (present) charstring smdpAddress := ?,
				 template (present) EUICCInfo1 euiccInfo1 := ?) := {
	initiateAuthenticationRequest := {
		euiccChallenge := euiccChallenge,
		smdpAddress := smdpAddress,
		euiccInfo1 := euiccInfo1
	}
}
template (value) RemoteProfileProvisioningRequest
ts_initiateAuthenticationRequest(template (value) octetstring euiccChallenge := '00112233445566778899aabbccddeeff'O,
				 template (value) charstring smdpAddress := "smdp.example.com",
				 template (value) EUICCInfo1 euiccInfo1 := ts_EUICCInfo1) := {
	initiateAuthenticationRequest := {
		euiccChallenge := euiccChallenge,
		smdpAddress := smdpAddress,
		euiccInfo1 := euiccInfo1
	}
}
template (present) RemoteProfileProvisioningResponse
tr_initiateAuthenticationResponse(template (present) octetstring transactionId := ?,
				  template (present) ServerSigned1 serverSigned1 := ?,
				  template (present) octetstring serverSignature1 := ?,
				  template (present) SubjectKeyIdentifier euiccCiPKIdToBeUsed := ?,
				  template (present) Certificate serverCertificate := ?) := {
	initiateAuthenticationResponse := {
		initiateAuthenticationOk := {
			transactionId := transactionId,
			serverSigned1 := serverSigned1,
			serverSignature1 := serverSignature1,
			euiccCiPKIdToBeUsed := euiccCiPKIdToBeUsed,
			serverCertificate := serverCertificate
		}
	}
}
template (value) RemoteProfileProvisioningResponse
ts_initiateAuthenticationResponse(template (value) octetstring transactionId := 'ABCDEF'O,
				  template (value) ServerSigned1 serverSigned1 := ts_serverSigned1,
				  template (value) octetstring serverSignature1 := '01020304'O,
				  template (value) SubjectKeyIdentifier euiccCiPKIdToBeUsed := 'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O, /* NIST */
				  template (value) Certificate serverCertificate := ts_cert_s_sm_dpauth_nist) := {
	initiateAuthenticationResponse := {
		initiateAuthenticationOk := {
			transactionId := transactionId,
			serverSigned1 := serverSigned1,
			serverSignature1 := serverSignature1,
			euiccCiPKIdToBeUsed := euiccCiPKIdToBeUsed,
			serverCertificate := serverCertificate
		}
	}
}

/* GSMA SGP.22, section 5.6.2 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_getBoundProfilePackageRequest(template (present) octetstring transactionId := ?,
				 template (present) PrepareDownloadResponse prepareDownloadResponse := ?) := {
	getBoundProfilePackageRequest := {
		transactionId := transactionId,
		prepareDownloadResponse := prepareDownloadResponse
	}
}
template (value) RemoteProfileProvisioningRequest
ts_getBoundProfilePackageRequest(template (value) octetstring transactionId := 'AABBCC'O,
				 template (value) PrepareDownloadResponse prepareDownloadResponse := ts_prepareDownloadResponse) := {
	getBoundProfilePackageRequest := {
		transactionId := transactionId,
		prepareDownloadResponse := prepareDownloadResponse
	}
}
template (present) RemoteProfileProvisioningResponse
tr_getBoundProfilePackageResponse(template (present) octetstring transactionId := ?,
				  template (present) BoundProfilePackage boundProfilePackage := ?) := {
	getBoundProfilePackageResponse := {
		getBoundProfilePackageOk := {
			transactionId := transactionId,
			boundProfilePackage := boundProfilePackage
		}
	}
}
template (value) RemoteProfileProvisioningResponse
ts_getBoundProfilePackageResponse(template (value) octetstring transactionId := 'AABBCC'O,
				  template (value) BoundProfilePackage boundProfilePackage := ts_boundProfilePackage) := {
	getBoundProfilePackageResponse := {
		getBoundProfilePackageOk := {
			transactionId := transactionId,
			boundProfilePackage := boundProfilePackage
		}
	}
}

/* GSMA SGP.22, section 5.6.3 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_authenticateClientRequest(template (present) octetstring transactionId := ?,
			     template (present) AuthenticateServerResponse authenticateServerResponse := ?) := {
	authenticateClientRequest := {
		transactionId := transactionId,
		authenticateServerResponse := authenticateServerResponse
	}
}
template (value) RemoteProfileProvisioningRequest
ts_authenticateClientRequest(template (value) octetstring transactionId,
			     template (value) AuthenticateServerResponse authenticateServerResponse) := {
	authenticateClientRequest := {
		transactionId := transactionId,
		authenticateServerResponse := authenticateServerResponse
	}
}
template (present) RemoteProfileProvisioningResponse
tr_authenticateClientResponseEs9(template (present) octetstring transactionId := ?,
				 template (present) StoreMetadataRequest profileMetaData := ?,
				 template (present) SmdpSigned2 smdpSigned2 := ?,
				 template (present) octetstring smdpSignature2 := ?,
				 template (present) Certificate smdpCertificate := ?) := {
	authenticateClientResponseEs9 := {
		authenticateClientOk := {
			transactionId := transactionId,
			profileMetaData := profileMetaData,
			smdpSigned2 := smdpSigned2,
			smdpSignature2 := smdpSignature2,
			smdpCertificate := smdpCertificate
		}
	}
}
template (value) RemoteProfileProvisioningResponse
ts_authenticateClientResponseEs9(template (value) octetstring transactionId := 'ABCDEF'O,
				 template (value) StoreMetadataRequest profileMetaData := ts_storeMetadataRequest,
				 template (value) SmdpSigned2 smdpSigned2 := ts_smdpSigned2,
				 template (value) octetstring smdpSignature2 := 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'O,
				 template (value) Certificate smdpCertificate := ts_cert_s_sm_dpauth_nist) := {
	authenticateClientResponseEs9 := {
		authenticateClientOk := {
			transactionId := transactionId,
			profileMetaData := profileMetaData,
			smdpSigned2 := smdpSigned2,
			smdpSignature2 := smdpSignature2,
			smdpCertificate := smdpCertificate
		}
	}
}

/* GSMA SGP.22, section 5.6.4 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_handleNotification(template (present) PendingNotification pendingNotification := ?) := {
	handleNotification := {
		pendingNotification := pendingNotification
	}
}
template (value) RemoteProfileProvisioningRequest
ts_handleNotification(template (value) PendingNotification pendingNotification) := {
	handleNotification := {
		pendingNotification := pendingNotification
	}
}

/* GSMA SGP.22, section 5.6.5 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_cancelSessionRequestEs9(template (present) octetstring transactionId := ?,
			     template (present) CancelSessionResponse cancelSessionResponse := ?) := {
	cancelSessionRequestEs9 := {
		transactionId := transactionId,
		cancelSessionResponse := cancelSessionResponse
	}
}
template (value) RemoteProfileProvisioningRequest
ts_cancelSessionRequestEs9(template (value) octetstring transactionId,
			   template (value) CancelSessionResponse cancelSessionResponse) := {
	cancelSessionRequestEs9 := {
		transactionId := transactionId,
		cancelSessionResponse := cancelSessionResponse
	}
}
template (present) RemoteProfileProvisioningResponse
tr_cancelSessionResponseEs9 := {
	cancelSessionResponseEs9 := {
		cancelSessionOk := { } /* This function has no output data */
	}
}
template (value) RemoteProfileProvisioningResponse
ts_cancelSessionResponseEs9 := {
	cancelSessionResponseEs9 := {
		cancelSessionOk := { } /* This function has no output data */
	}
}


/* GSMA SGP.22, section 5.7.3 (ES10x) */
template (present) EuiccConfiguredAddressesResponse
tr_euiccConfiguredAddressesResponse := {
	defaultDpAddress := *,
	rootDsAddress := ?
}
template (value) EuiccConfiguredAddressesResponse
ts_euiccConfiguredAddressesResponse := {
	defaultDpAddress := "smdp.example.com",
	rootDsAddress := "smds.example.com"
}

/* GSMA SGP.22, section 5.7.5 (ES10x) */
template (present) PrepareDownloadResponseOk
tr_prepareDownloadResponseOk := {
	euiccSigned2 := {
		transactionId := ?,
		euiccOtpk := ?,
		hashCc := *
	},
	euiccSignature2 := ?
}
template (value) PrepareDownloadResponseOk
ts_prepareDownloadResponseOk := {
	euiccSigned2 := {
		transactionId := 'ABCDEF'O,
		euiccOtpk := 'AABBCCDDEEFF'O,
		hashCc := omit
	},
	euiccSignature2 := 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'O
}
template (present) PrepareDownloadResponse
tr_prepareDownloadResponse := {
	downloadResponseOk := tr_prepareDownloadResponseOk
}
template (value) PrepareDownloadResponse
ts_prepareDownloadResponse := {
	downloadResponseOk := ts_prepareDownloadResponseOk
}

/* GSMA SGP.22, section 5.7.7 (ES10x) */
template (present) GetEuiccChallengeResponse
tr_GetEuiccChallengeResponse := {
	euiccChallenge := ?
}
template (value) GetEuiccChallengeResponse
ts_GetEuiccChallengeResponse(template (value) octetstring euiccChallenge := '00112233445566778899AABBCCDDEEFF'O) := {
	euiccChallenge := euiccChallenge
}

/* GSMA SGP.22, section 5.7.8 (ES10x) */
template (present) EUICCInfo1
tr_EUICCInfo1 := {
	svn := ?,
	euiccCiPKIdListForVerification := ?,
	euiccCiPKIdListForSigning := ?
}
template (value) EUICCInfo1
ts_EUICCInfo1 := {
	svn := '020200'O,
	euiccCiPKIdListForVerification := {
	       'C0BC70BA36929D43B467FF57570530E57AB8FCD8'O,
	       'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O
	},
	euiccCiPKIdListForSigning := {
	       'C0BC70BA36929D43B467FF57570530E57AB8FCD8'O,
	       'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O
	}
}

/* GSMA SGP.22, section 5.7.8 (ES10x) */
template (present) EUICCInfo2
tr_EUICCInfo2 := {
	profileVersion := ?,
	svn := ?,
	euiccFirmwareVer := ?,
	extCardResource := ?,
	uiccCapability := ?,
	ts102241Version := *,
	globalplatformVersion := *,
	rspCapability := ?,
	euiccCiPKIdListForVerification := ?,
	euiccCiPKIdListForSigning := ?,
	euiccCategory := *,
	forbiddenProfilePolicyRules := *,
	ppVersion := ?,
	sasAcreditationNumber := ?,
	certificationDataObject := *,
	treProperties := *,
	treProductReference := *,
	additionalEuiccProfilePackageVersions := *
}
template (value) EUICCInfo2
ts_EUICCInfo2 := {
	profileVersion := '414243'O,
	svn := '02000C'O,
	euiccFirmwareVer := '414243'O,
	extCardResource := '414243'O,
	uiccCapability := '1111111111111111111'B,
	ts102241Version := omit,
	globalplatformVersion := omit,
	rspCapability := '1111'B,
	euiccCiPKIdListForVerification := {
	       'C0BC70BA36929D43B467FF57570530E57AB8FCD8'O,
	       'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O
	},
	euiccCiPKIdListForSigning := {
	       'C0BC70BA36929D43B467FF57570530E57AB8FCD8'O,
	       'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O
	},
	euiccCategory := omit,
	forbiddenProfilePolicyRules := omit,
	ppVersion := '414243'O,
	sasAcreditationNumber := "123456",
	certificationDataObject := omit,
	treProperties := omit,
	treProductReference := omit,
	additionalEuiccProfilePackageVersions := omit
}

/* GSMA SGP.22, section 5.7.10 (ES10x) */
template (value) RetrieveNotificationsListResponse
ts_retrieveNotificationsListResponse := {
	notificationList := {
		{
			profileInstallationResult := {
				profileInstallationResultData := ts_profileInstallationResultData,
				euiccSignPIR := 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'O
			}
		}
	}
}

/* GSMA SGP.22, section 5.7.11 (ES10x) */
template (present) NotificationSentResponse
tr_notificationSentResponse := {
	deleteNotificationStatus := ?
}
template (value) NotificationSentResponse
ts_notificationSentResponse := {
	deleteNotificationStatus := 0 /* 0k */
}

/* GSMA SGP.22, section 5.7.13 (ES10x) */
template (present) AuthenticateServerResponse
tr_authenticateServerResponse := {
	authenticateResponseOk := {
		euiccSigned1 := {
			transactionId := ?,
			serverAddress := ?,
			serverChallenge := ?,
			euiccInfo2 := ?,
			ctxParams1 := tr_ctxParams1
		},
		euiccSignature1 := ?,
		euiccCertificate := ?,
		eumCertificate := ?
	}
}
template (value) AuthenticateServerResponse
ts_authenticateServerResponse := {
	authenticateResponseOk := {
		euiccSigned1 := {
			transactionId := 'ABCDEF'O,
			serverAddress := "smdp.example.com",
			serverChallenge := '01020304050607080910111213141516'O,
			euiccInfo2 := ts_EUICCInfo2,
			ctxParams1 := ts_ctxParams1
		},
		euiccSignature1 := '12345678'O,
		euiccCertificate := ts_cert_euicc_nist,
//		euiccCertificate := ts_cert_euicc_brp,
		eumCertificate := ts_cert_eum_nist
//		eumCertificate := ts_cert_eum_brp

	}
}

/* GSMA SGP.22, section 5.7.13 (ES10x) */
template (present) CancelSessionResponseOk
tr_cancelSessionResponseOk := {
	euiccCancelSessionSigned := {
		 transactionId := ?,
		 smdpOid := ?,
		 reason := ?
	},
	euiccCancelSessionSignature := ?
}
template (value) CancelSessionResponseOk
ts_cancelSessionResponseOk := {
	euiccCancelSessionSigned := {
		 transactionId := 'AABBCC'O,
		 smdpOid := id_rspRole_euicc,
		 reason := 5
	},
	euiccCancelSessionSignature := '1234567890'O
}
template (present) CancelSessionResponse
tr_cancelSessionResponse := {
	cancelSessionResponseOk := tr_cancelSessionResponseOk
}
template (value) CancelSessionResponse
ts_cancelSessionResponse := {
	cancelSessionResponseOk := ts_cancelSessionResponseOk
}

/* GSMA SGP.22, section 5.7.20 (ES10x) */
template (present) GetEuiccDataResponse
tr_getEuiccDataResponse := {
	eidValue := ?
}
template (value) GetEuiccDataResponse
ts_getEuiccDataResponse(template (value) octetstring eidValue := '000102030405060708090A0B0C0D0E0F'O) := {
	eidValue := eidValue
}

}
