eSIM RSP 测试用例对比站

人工切片(-man) ↔ Cas 盲生成(-cas)· 真机真卡执行证据对照

源码对照:4.2.13.2.10

ES10b 获取 eUICCInfo(附带 Profile 包版本) / TC_eUICC_ES10b.GetEUICCInfo_additionalEuiccProfilePackageVersions

左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
34 行 / 1231 字符 / gb18030
-cas 入口
TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions/Import/TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions.js
105 行 / 8667 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js34 行 / 1231 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions_01_Nominal_additionalEuiccProfilePackageVersions (extracted verbatim)
2
3function TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions_01_Nominal_additionalEuiccProfilePackageVersions()
4{
5	tracenamestr = "测试目的:验证eUICC返回的profileVersion值";
6	curDis.TraceStart(sno++,tracenamestr);
7
8	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
9	Ini_powerOn_eUICC_LPAe_not_activate();
10	
11	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
12	TS_MANAGE_CHANNEL_OPEN();
13	
14	curLogicChannel = 1;
15	
16	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
17	TS_SELECT("Select ISD",ISD_R_AID,"9000");
18	
19	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo2Request,获取EUICCInfo2;");
20	var euiccInfo2 = new EUICCInfo2();
21	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
22	
23	euiccInfo2.checkCardResDataFormat(hexData);
24	try
25	{		
26		if(typeof(IUT_PP_VERSION) != "undefined")
27			curStrHandle.CheckData(IUT_PP_VERSION, euiccInfo2.ppVersion, "ppVersion");	
28	}catch(e){
29		obj.SubLevel("EUICCInfo2数据内容检查不通过", level_of_SubLevel.error);
30	}
31	RecoverCard();
32	
33}
34
-cas 盲生成TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions/Import/TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions.js105 行 / 8667 字符 / gb18030入口函数 @L15
1// Author: 卡思Cas智能体
2// Date: 20260929-120402
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.GetEUICCInfo_additionalEuiccProfilePackageVersions,Test Sequence #01 Nominal – additionalEuiccProfilePackageVersions field,适用性 M。
4// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
5//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
6//   ICH-IC2-K2-C4 SW;S1-C1 SW;S1-C2 R_EUICC_INFO2 outer tag
7//   S1-C2 R_EUICC_INFO2 required members present
8//   S1-C3 ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS oracle
9//   S1-C4 ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS oracle
10//   S1-C5 ANY_ADD_PP_VERSIONS encodes Annex K listed value
11//   S1-C6 RQ43_002 EUICCInfo2 received from eUICC
12// 本函数由 CaseIR 4.2.13.2.10 编译生成(R2,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
13// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
14// 适用性 M:编译期门,运行时由 harness 环境前置承担。
15function TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions_01_merged() {
16    var bind = curBind;
17
18    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
19    var s2 = bind.resetAndAtr();
20    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s2.atr_hex !== "" ? "1" : "0");
21
22    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
23    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
24    var s3 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
25    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s3.resp.length > 0 ? "1" : "0");
26    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s3.sw);
27
28    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
29    var s4 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
30    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s4.sw);
31
32    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
33    var steady5 = bind.runToSteadyState(function () {
34        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
35    });
36    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady5.final.sw);
37
38    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
39    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
40    var s6 = bind.manageChannelOpen("9000");
41    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s6.sw);
42    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s6.chan !== null ? "1" : "0");
43
44    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
45    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
46    var s7 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
47    // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
48    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s7.sw);
49
50    // 步骤 1:MTD_STORE_DATA(tc_step;REQ: RQ43_002)
51    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
52    var sdCla1 = s6.chan !== null ? (s6.chan <= 3 ? 128 + s6.chan : 188 + s6.chan).toString(16).toUpperCase() : null;
53    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2200", "00", "9000");
54    bind.checkData("S1-C1 SW", "9000", s1.sw);
55    // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
56    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87", "8F"]});
57    bind.checkData("S1-C2 R_EUICC_INFO2 outer tag", "BF22", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
58    bind.checkData("S1-C2 R_EUICC_INFO2 required members present", "1", gw1.ok ? "1" : "0");
59    // S1-C3: ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS——语料真空诚实面(iut_euicc_add_pp_versions_constant 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
60    bind.checkData("S1-C3 ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS oracle", "iut_euicc_add_pp_versions_constant", "oracle_absent_corpus_vacuum");
61    // S1-C4: ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS——语料真空诚实面(iut_euicc_add_pp_versions_constant 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
62    bind.checkData("S1-C4 ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS oracle", "iut_euicc_add_pp_versions_constant", "oracle_absent_corpus_vacuum");
63    // S1-C5: Annex K v1.16 hash-bound 映射;SGP.22 SVN 缺席/未登记时 fail-closed。
64    var annexKMap1 = {"2.2.x":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":false,"additional_min_version":null},"2.3":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"},"2.4":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"},"2.5":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"},"2.6":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"},"2.6.1":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"}};
65    function annexKEntryForVersion1(version, mapping) {
66        if (Object.prototype.hasOwnProperty.call(mapping, version)) { return mapping[version]; }
67        for (var keyName in mapping) {
68            if (!Object.prototype.hasOwnProperty.call(mapping, keyName)) { continue; }
69            if (keyName.slice(-2) !== ".x") { continue; }
70            var prefix = keyName.slice(0, -1);
71            if (version === prefix.slice(0, -1) || (version.indexOf(prefix) === 0 && /^\d+$/.test(version.substring(prefix.length)))) { return mapping[keyName]; }
72        }
73        return null;
74    }
75    function annexKVersion1(raw) {
76        var v = raw || "";
77        if (v.length !== 6 && v.substring(0, 2) === "04") {
78            var tlv = BindEs10xSingleRequest.parseBerTlv(v);
79            if (tlv.length !== 1 || tlv[0].tag !== "04" || tlv[0].len !== 3 || v.length !== 10) { return ""; }
80            v = tlv[0].value;
81        }
82        if (!/^[0-9A-Fa-f]{6}$/.test(v)) { return ""; }
83        var major = parseInt(v.substring(0, 2), 16); var minor = parseInt(v.substring(2, 4), 16); var rev = parseInt(v.substring(4, 6), 16);
84        return major + "." + minor + (rev === 0 ? "" : "." + rev);
85    }
86    function annexKAdditionalVersion1(raw) {
87        var values = BindEs10xSingleRequest.parseBerTlv(raw || "");
88        var encoded = String(raw || "").toUpperCase();
89        if (values.length !== 1 || values[0].tag !== "04" || values[0].len !== 3 || BindEs10xSingleRequest.buildTlv(values[0].tag, values[0].value) !== encoded) { return ""; }
90        return annexKVersion1(values[0].value);
91    }
92    function annexKAtLeast1(value, minimum) {
93        var v = String(value || "").split("."); var m = String(minimum || "").split(".");
94        if (v.length < 2 || m.length < 2) { return false; }
95        for (var i = 0; i < 3; i++) { var vi = parseInt(v[i] || "0", 10); var mi = parseInt(m[i] || "0", 10); if (isNaN(vi) || isNaN(mi)) { return false; } if (vi !== mi) { return vi > mi; } }
96        return true;
97    }
98    var annexKSgp22_1 = annexKVersion1(gw1.fields["82"] || "");
99    var annexKEntry_1 = annexKEntryForVersion1(annexKSgp22_1, annexKMap1);
100    var annexKAdditional_1 = annexKEntry_1 && annexKEntry_1.additional_applicable && gw1.fields["AF"] ? annexKAdditionalVersion1(gw1.fields["AF"]) : "";
101    var annexKAdditionalOk_1 = annexKEntry_1 && annexKEntry_1.additional_applicable && annexKAdditional_1 !== "" && annexKAtLeast1(annexKAdditional_1, annexKEntry_1.additional_min_version);
102    bind.checkData("S1-C5 ANY_ADD_PP_VERSIONS encodes Annex K listed value", "1", annexKAdditionalOk_1 ? "1" : "0");
103    bind.checkData("S1-C6 RQ43_002 EUICCInfo2 received from eUICC", "1", (s1.resp !== "" && gw1.outer_tag === "BF22") ? "1" : "0");
104}
105

完整 unified diff

行级差异:新增 101 行 / 删除 30 行(以 -man 为基准,unified 上下文 3 行)。

展开 diff(138 行)
--- -man
+++ -cas
@@ -1,34 +1,105 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions_01_Nominal_additionalEuiccProfilePackageVersions (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20260929-120402
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.GetEUICCInfo_additionalEuiccProfilePackageVersions,Test Sequence #01 Nominal – additionalEuiccProfilePackageVersions field,适用性 M。
+// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
+//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
+//   ICH-IC2-K2-C4 SW;S1-C1 SW;S1-C2 R_EUICC_INFO2 outer tag
+//   S1-C2 R_EUICC_INFO2 required members present
+//   S1-C3 ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS oracle
+//   S1-C4 ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS oracle
+//   S1-C5 ANY_ADD_PP_VERSIONS encodes Annex K listed value
+//   S1-C6 RQ43_002 EUICCInfo2 received from eUICC
+// 本函数由 CaseIR 4.2.13.2.10 编译生成(R2,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
+// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
+// 适用性 M:编译期门,运行时由 harness 环境前置承担。
+function TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions_01_merged() {
+    var bind = curBind;
 
-function TC_eUICC_ES10b_GetEUICCInfo_additionalEuiccProfilePackageVersions_01_Nominal_additionalEuiccProfilePackageVersions()
-{
-	tracenamestr = "测试目的:验证eUICC返回的profileVersion值";
-	curDis.TraceStart(sno++,tracenamestr);
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+    var s2 = bind.resetAndAtr();
+    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s2.atr_hex !== "" ? "1" : "0");
 
-	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
-	Ini_powerOn_eUICC_LPAe_not_activate();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
-	TS_MANAGE_CHANNEL_OPEN();
-	
-	curLogicChannel = 1;
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
-	TS_SELECT("Select ISD",ISD_R_AID,"9000");
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo2Request,获取EUICCInfo2;");
-	var euiccInfo2 = new EUICCInfo2();
-	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
-	
-	euiccInfo2.checkCardResDataFormat(hexData);
-	try
-	{		
-		if(typeof(IUT_PP_VERSION) != "undefined")
-			curStrHandle.CheckData(IUT_PP_VERSION, euiccInfo2.ppVersion, "ppVersion");	
-	}catch(e){
-		obj.SubLevel("EUICCInfo2数据内容检查不通过", level_of_SubLevel.error);
-	}
-	RecoverCard();
-	
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
+    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
+    var s3 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s3.resp.length > 0 ? "1" : "0");
+    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s3.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+    var s4 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s4.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+    var steady5 = bind.runToSteadyState(function () {
+        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+    });
+    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady5.final.sw);
+
+    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
+    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+    var s6 = bind.manageChannelOpen("9000");
+    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s6.sw);
+    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s6.chan !== null ? "1" : "0");
+
+    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
+    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+    var s7 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
+    // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
+    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s7.sw);
+
+    // 步骤 1:MTD_STORE_DATA(tc_step;REQ: RQ43_002)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla1 = s6.chan !== null ? (s6.chan <= 3 ? 128 + s6.chan : 188 + s6.chan).toString(16).toUpperCase() : null;
+    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2200", "00", "9000");
+    bind.checkData("S1-C1 SW", "9000", s1.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87", "8F"]});
+    bind.checkData("S1-C2 R_EUICC_INFO2 outer tag", "BF22", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
+    bind.checkData("S1-C2 R_EUICC_INFO2 required members present", "1", gw1.ok ? "1" : "0");
+    // S1-C3: ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS——语料真空诚实面(iut_euicc_add_pp_versions_constant 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
+    bind.checkData("S1-C3 ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS oracle", "iut_euicc_add_pp_versions_constant", "oracle_absent_corpus_vacuum");
+    // S1-C4: ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS——语料真空诚实面(iut_euicc_add_pp_versions_constant 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
+    bind.checkData("S1-C4 ANY_ADD_PP_VERSIONS conditional on #IUT_EUICC_ADD_PP_VERSIONS oracle", "iut_euicc_add_pp_versions_constant", "oracle_absent_corpus_vacuum");
+    // S1-C5: Annex K v1.16 hash-bound 映射;SGP.22 SVN 缺席/未登记时 fail-closed。
+    var annexKMap1 = {"2.2.x":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":false,"additional_min_version":null},"2.3":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"},"2.4":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"},"2.5":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"},"2.6":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"},"2.6.1":{"base_versions":["2.1","2.2","2.3.1"],"additional_applicable":true,"additional_min_version":"3.1"}};
+    function annexKEntryForVersion1(version, mapping) {
+        if (Object.prototype.hasOwnProperty.call(mapping, version)) { return mapping[version]; }
+        for (var keyName in mapping) {
+            if (!Object.prototype.hasOwnProperty.call(mapping, keyName)) { continue; }
+            if (keyName.slice(-2) !== ".x") { continue; }
+            var prefix = keyName.slice(0, -1);
+            if (version === prefix.slice(0, -1) || (version.indexOf(prefix) === 0 && /^\d+$/.test(version.substring(prefix.length)))) { return mapping[keyName]; }
+        }
+        return null;
+    }
+    function annexKVersion1(raw) {
+        var v = raw || "";
+        if (v.length !== 6 && v.substring(0, 2) === "04") {
+            var tlv = BindEs10xSingleRequest.parseBerTlv(v);
+            if (tlv.length !== 1 || tlv[0].tag !== "04" || tlv[0].len !== 3 || v.length !== 10) { return ""; }
+            v = tlv[0].value;
+        }
+        if (!/^[0-9A-Fa-f]{6}$/.test(v)) { return ""; }
+        var major = parseInt(v.substring(0, 2), 16); var minor = parseInt(v.substring(2, 4), 16); var rev = parseInt(v.substring(4, 6), 16);
+        return major + "." + minor + (rev === 0 ? "" : "." + rev);
+    }
+    function annexKAdditionalVersion1(raw) {
+        var values = BindEs10xSingleRequest.parseBerTlv(raw || "");
+        var encoded = String(raw || "").toUpperCase();
+        if (values.length !== 1 || values[0].tag !== "04" || values[0].len !== 3 || BindEs10xSingleRequest.buildTlv(values[0].tag, values[0].value) !== encoded) { return ""; }
+        return annexKVersion1(values[0].value);
+    }
+    function annexKAtLeast1(value, minimum) {
+        var v = String(value || "").split("."); var m = String(minimum || "").split(".");
+        if (v.length < 2 || m.length < 2) { return false; }
+        for (var i = 0; i < 3; i++) { var vi = parseInt(v[i] || "0", 10); var mi = parseInt(m[i] || "0", 10); if (isNaN(vi) || isNaN(mi)) { return false; } if (vi !== mi) { return vi > mi; } }
+        return true;
+    }
+    var annexKSgp22_1 = annexKVersion1(gw1.fields["82"] || "");
+    var annexKEntry_1 = annexKEntryForVersion1(annexKSgp22_1, annexKMap1);
+    var annexKAdditional_1 = annexKEntry_1 && annexKEntry_1.additional_applicable && gw1.fields["AF"] ? annexKAdditionalVersion1(gw1.fields["AF"]) : "";
+    var annexKAdditionalOk_1 = annexKEntry_1 && annexKEntry_1.additional_applicable && annexKAdditional_1 !== "" && annexKAtLeast1(annexKAdditional_1, annexKEntry_1.additional_min_version);
+    bind.checkData("S1-C5 ANY_ADD_PP_VERSIONS encodes Annex K listed value", "1", annexKAdditionalOk_1 ? "1" : "0");
+    bind.checkData("S1-C6 RQ43_002 EUICCInfo2 received from eUICC", "1", (s1.resp !== "" && gw1.outer_tag === "BF22") ? "1" : "0");
 }