Commit 3cbf0da1 authored by Cypres TAC's avatar Cypres TAC
Browse files

countrycode reserved C and Java

parent 19e9d354
Pipeline #235936 canceled with stages
......@@ -66,10 +66,10 @@ Test #3 passed
>./test_ecies
Usage: ./test_ecies random priv_key data
> test_clea
> simple_clea
AE7ovhtS8OmTGOVkk/5kcp6G0r5FBDCbQQffyCRE4U5LSG2Muxk12q/iWhpnHVucPMIkAJ5UZVFnfGHjmt3B8xFVERSoCT0fiBtFE7GGZUSQVvvZJ3ujtdLTqVVsO2ONOsAuRqHNOqXdzlQlWzua2X2qOahDScgC1IHe00ftKR6aOrdCpn1ZA2XJeWmt6wIyJX+XKF/qUqL7/p0Bj9NvorGxWRmIST3c+OFHkbBLsw==
AE7ovhtS8OmTGOVkk/5kcp6yyiQaTivN8kC8MT9FaGlcMYXetqJm9hzUQZhlvV4DQFrPdXASsNuHPfrbQWHkwLtktrEj/y6DuTwQz774KyVtknUE6oMpBp8inzQaHx4mrimPqQa1vEkI7BiRKKbtcVYT6H7LYcHZq5sOKCIE4Pmm6mJcGXmU6CJWMhVZpAORdEQswqnR9k1gNibRhhQhVmzs+WAGVOGJeANUyj+rzA==
> ./build_clea
Usage: build_clea staff CRIexp venueType venueCategory1 venueCategory2 countryCode periodDuration locationPhone locationPin PK_SA PK_MCTA
> ./test_clea
Usage: build_clea staff CRIexp venueType venueCategory1 venueCategory2 periodDuration locationPhone locationPin PK_SA PK_MCTA
```
......@@ -62,8 +62,9 @@ int32_t clea_renew_qrcode(uint32_t *ptr_ct_periodStart, uint32_t *ptr_t_qrStart)
LSP[cpt++] = LTId[i];
}
LSP[cpt++] = (c->staff & 0x1) << 7 | ((c->locContactMsgPresent & 0x1) << 6) | ((c->countryCode & 0xFC0) >> 6);
LSP[cpt++] = ((c->countryCode & 0x3F) << 2) | ((c->CRIexp & 0x18) >> 3);
uint8_t reserved = 0x0; /* 12 bits reserved for the spec. evolution */
LSP[cpt++] = (c->staff & 0x1) << 7 | ((c->locContactMsgPresent & 0x1) << 6) | ((reserved & 0xFC0) >> 6);
LSP[cpt++] = ((reserved & 0x3F) << 2) | ((c->CRIexp & 0x18) >> 3);
LSP[cpt++] = ((c->CRIexp & 0x7) << 5) | (c->venueType & 0x1F);
LSP[cpt++] = ((c->venueCategory1 & 0xF) << 4) | (c->venueCategory2 & 0xF);
LSP[cpt++] = c->periodDuration;
......
......@@ -30,7 +30,6 @@ typedef struct
uint8_t venueType; // 5 bits
uint8_t venueCategory1; // 4 bits
uint8_t venueCategory2; // 4 bits
uint16_t countryCode; // 12 bits
uint8_t periodDuration; // 8 bits: period duration in hours
// Location contact
......
......@@ -15,7 +15,6 @@ clea_conf_t clea_conf =
.venueType = 10,
.venueCategory1 = 0,
.venueCategory2 = 0,
.countryCode = 250, // France numeric code as defined in ISO3166-1
.periodDuration = 3, // 3 hours
.locationPhone = {0x33, 0x80, 0x01, 0x30, 0x00, 0x0F, 0xFF, 0xFF}, // +33 800 130 000
.locationRegion = 11,
......
......@@ -25,7 +25,6 @@ clea_conf_t clea_conf =
.venueType = 10,
.venueCategory1 = 0,
.venueCategory2 = 0,
.countryCode = 250, // France
.periodDuration = 1, // 1 hour
.locationPhone = {0x33, 0x80, 0x01, 0x30, 0x00, 0x0F, 0xFF, 0xFF}, // +33 800 130 000
.locationPin = {0xDE, 0xAD, 0xBE, 0xEF} // "DEADBEEF"
......
......@@ -32,7 +32,7 @@ void print_uuid(uint8_t uuid[16])
void usage(char *s, char *err)
{
printf("ERROR: %s\n\n", err);
printf("Usage: %s staff countryCode CRIexp venueType venueCategory1 venueCategory2 periodDuration PK_SA PK_MCTA SK_L [locationPhone locationRegion locationPin]\n\n", s);
printf("Usage: %s staff CRIexp venueType venueCategory1 venueCategory2 periodDuration PK_SA PK_MCTA SK_L [locationPhone locationRegion locationPin]\n\n", s);
printf("locationPhone: 15-digit-max international phone number\n");
printf("locationPin: 8-digit-max pin code\n");
exit(1);
......@@ -49,31 +49,30 @@ int main(int argc, char *argv[])
uint32_t t_qrStart, ct_periodStart;
uint8_t LTId[16];
if ((argc == 14) || (argc == 11))
if ((argc == 13) || (argc == 10))
{
clea_conf.staff = atoi(argv[1]);
clea_conf.locContactMsgPresent = (argc == 14);
clea_conf.countryCode = atoi(argv[2]);
clea_conf.CRIexp = atoi(argv[3]);
clea_conf.venueType = atoi(argv[4]);
clea_conf.venueCategory1 = atoi(argv[5]);
clea_conf.venueCategory2 = atoi(argv[6]);
clea_conf.periodDuration = atoi(argv[7]);
clea_conf.locContactMsgPresent = (argc == 13);
clea_conf.CRIexp = atoi(argv[2]);
clea_conf.venueType = atoi(argv[3]);
clea_conf.venueCategory1 = atoi(argv[4]);
clea_conf.venueCategory2 = atoi(argv[5]);
clea_conf.periodDuration = atoi(argv[6]);
// Skip "04" for uncompressed keys
parse(&(argv[8][2]), PK_SA);
parse(&(argv[9][2]), PK_MCTA);
parse(argv[10], SK_L);
parse(&(argv[7][2]), PK_SA);
parse(&(argv[8][2]), PK_MCTA);
parse(argv[9], SK_L);
if (clea_conf.locContactMsgPresent)
{
if (parse_bcd(argv[11], clea_conf.locationPhone, sizeof(clea_conf.locationPhone)))
if (parse_bcd(argv[10], clea_conf.locationPhone, sizeof(clea_conf.locationPhone)))
{
USAGE("Too many digits in locationPhone");
}
clea_conf.locationRegion = atoi(argv[12]);
clea_conf.locationRegion = atoi(argv[11]);
if (parse_bcd(argv[13], clea_conf.locationPin, sizeof(clea_conf.locationPin)))
if (parse_bcd(argv[12], clea_conf.locationPin, sizeof(clea_conf.locationPin)))
{
USAGE("Too many digits in locationPin");
}
......
......@@ -37,7 +37,6 @@ public class LocationSpecificPart {
public static final short LOCATION_TEMPORARY_SECRET_KEY_SIZE = 32; // 256 bits
public static final String VERSION_VALIDATION_MESSAGE = "Version should have a value between 0 and 8 (included)";
public static final String TYPE_VALIDATION_MESSAGE = "Type should have a value between 0 and 8 (included)";
public static final String COUNTRY_CODE_VALIDATION_MESSAGE = "Country code should have a value between 0 and 4096 (included)";
public static final String LOCATION_TEMPORARY_PUBLIC_ID_VALIDATION_MESSAGE = "Location temporary public Id must not be null";
public static final String QRCODE_RENEWAL_INTERVAL_VALIDATION_MESSAGE = "QR-code renewal interval exponent compact should have a value between 0 and 32 (included)";
public static final String VENUE_TYPE_VALIDATION_MESSAGE = "Venue type should have a value between 0 and 32 (included)";
......@@ -64,15 +63,6 @@ public class LocationSpecificPart {
@Max(value = 8, message = TYPE_VALIDATION_MESSAGE)
protected int type = 0;
/*
* Country code, coded as the ISO 3166-1 country code, for instance 0x250 for
* France
*/
@Builder.Default
@Min(value = 0, message = COUNTRY_CODE_VALIDATION_MESSAGE)
@Max(value = 4096, message = COUNTRY_CODE_VALIDATION_MESSAGE)
protected int countryCode = 250;
/* regular users or staff member of the location */
protected boolean staff;
......
......@@ -129,7 +129,7 @@ public class LocationSpecificPartDecoder {
/**
* Unpack the data message (binary format) :
* | Staff | pad2 |CRIexp | vType |
* vCat1 | vCat2 | countryCode | | periodDuration | ct_periodStart | t_qrStart |
* vCat1 | vCat2 | reserved | | periodDuration | ct_periodStart | t_qrStart |
* LTKey | to extract parameters
*/
public LocationSpecificPart decodeMessage(byte[] binaryLocationSpecificPart, LocationSpecificPartBuilder locationSpecificPartbuilder) {
......@@ -145,8 +145,8 @@ public class LocationSpecificPartDecoder {
locationSpecificPartbuilder
.staff(message.getNextInteger(1) == 1);
message.getNextInteger(1); // skip locationContactMessagePresent
message.getNextInteger(12); // skip reserved
locationSpecificPartbuilder
.countryCode(message.getNextInteger(12))
.qrCodeRenewalIntervalExponentCompact(message.getNextInteger(5))
.venueType(message.getNextInteger(5))
.venueCategory1(message.getNextInteger(4))
......
......@@ -87,8 +87,8 @@ public class LocationSpecificPartEncoder {
}
/**
* Encode the data message in binary format: | Staff | pad2 |CRIexp | vType |
* vCat1 | vCat2 | countryCode | | periodDuration | ct_periodStart | t_qrStart |
* Encode the data message in binary format: | Staff | locContactMsgPresent | reserved | CRIexp | vType |
* vCat1 | vCat2 | periodDuration | ct_periodStart | t_qrStart |
* LTKey |
*
* @return data message in binary format
......@@ -102,8 +102,8 @@ public class LocationSpecificPartEncoder {
message.setNextInteger(locationSpecificPart.isStaff() ? 1 : 0, 1);
/* locContactMsgPresent (1 bit) */
message.setNextInteger(locationSpecificPart.isLocationContactMessagePresent() ? 1 : 0, 1);
/* countryCode (12 bits) */
message.setNextInteger(locationSpecificPart.getCountryCode(), 12);
/* reserved (12 bits) */
message.setNextInteger(0x0, 12);
/* CRIexp (5 bits) */
message.setNextInteger(locationSpecificPart.getQrCodeRenewalIntervalExponentCompact(), 5);
/* venueType (5 bits) */
......
......@@ -15,14 +15,14 @@ public class LspEncoderDecoder {
* @see README.md
*/
public static void main(String[] args) throws Exception {
final String help = "Usage: LspEncoderDecoder [decode lsp64 privKey] [encode staff countryCode CRIexp venueType venueCategory1 venueCategory2 periodDuration locationPhone locationPin pubkey]";
final String help = "Usage: LspEncoderDecoder [decode lsp64 SK_SA SK_MCTA] [encode staff CRIexp venueType venueCategory1 venueCategory2 periodDuration locationPhone locationPin pubkey]";
if (args.length == 0) {
System.out.println(help);
System.exit(0);
}
if ("encode".equals(args[0]) && ((args.length == 14) || (args.length == 11))) {
if ("encode".equals(args[0]) && ((args.length == 13) || (args.length == 10))) {
encodeLsp(args);
} else if ("decode".equals(args[0]) && args.length == 4) {
decodeLsp(args);
......@@ -38,7 +38,7 @@ public class LspEncoderDecoder {
LocationSpecificPartDecoder lspDecoder = new LocationSpecificPartDecoder(serverAuthoritySecretKey);
LocationSpecificPart lsp = lspDecoder.decrypt(lspBase64);
String valuesToreturn = "=VALUES="+ (lsp.isStaff()? 1 : 0) + " " + lsp.getCountryCode() + " " + lsp.getQrCodeRenewalIntervalExponentCompact() + " " + lsp.getVenueType();
String valuesToreturn = "=VALUES="+ (lsp.isStaff()? 1 : 0) + " " + lsp.getQrCodeRenewalIntervalExponentCompact() + " " + lsp.getVenueType();
valuesToreturn += " " + lsp.getVenueCategory1() + " " + lsp.getVenueCategory2() + " " + lsp.getPeriodDuration() + " " + lsp.getLocationTemporaryPublicId();
valuesToreturn += " " + Integer.toUnsignedString(lsp.getCompressedPeriodStartTime()) + " " + TimeUtils.ntpTimestampFromInstant(lsp.getQrCodeValidityStartTime());
......@@ -52,21 +52,19 @@ public class LspEncoderDecoder {
protected static void encodeLsp(String[] args) throws CleaCryptoException {
int staff = Integer.parseInt(args[1]);
int countryCode = Integer.parseInt(args[2]);
int qrCodeRenewalIntervalExponentCompact = Integer.parseInt(args[3]);
int venueType = Integer.parseInt(args[4]);
int venueCategory1 = Integer.parseInt(args[5]);
int venueCategory2 = Integer.parseInt(args[6]);
int periodDuration = Integer.parseInt(args[7]);
final String serverAuthorityPublicKey = args[8];
final String manualContactTracingAuthorityPublicKey = args[9];
final String permanentLocationSecretKey = args[10];
int qrCodeRenewalIntervalExponentCompact = Integer.parseInt(args[2]);
int venueType = Integer.parseInt(args[3]);
int venueCategory1 = Integer.parseInt(args[4]);
int venueCategory2 = Integer.parseInt(args[5]);
int periodDuration = Integer.parseInt(args[6]);
final String serverAuthorityPublicKey = args[7];
final String manualContactTracingAuthorityPublicKey = args[8];
final String permanentLocationSecretKey = args[9];
Instant periodStartTime = Instant.now().truncatedTo(ChronoUnit.HOURS);
/* Encode a LSP with location */
LocationSpecificPart lsp = LocationSpecificPart.builder()
.staff(staff == 1)
.countryCode(countryCode)
.qrCodeRenewalIntervalExponentCompact(qrCodeRenewalIntervalExponentCompact)
.venueType(venueType)
.venueCategory1(venueCategory1)
......@@ -79,10 +77,10 @@ public class LspEncoderDecoder {
.serverAuthorityPublicKey(serverAuthorityPublicKey)
.permanentLocationSecretKey(permanentLocationSecretKey);
if (args.length == 14) {
final String locationPhone = args[11];
final int locationRegion = Integer.parseInt(args[12]);
final String locationPin = args[13];
if (args.length == 13) {
final String locationPhone = args[10];
final int locationRegion = Integer.parseInt(args[11]);
final String locationPin = args[12];
locationBuilder.contact( new LocationContact(locationPhone, locationRegion, locationPin, periodStartTime));
}
......
......@@ -101,7 +101,7 @@ class LocationSpecificPartTest {
Instant periodStartTime = Instant.now().truncatedTo(ChronoUnit.HOURS);
LocationContact locationContact = new LocationContact("33800130000", 12, "012345", periodStartTime);
/* Encode a LSP with location */
LocationSpecificPart lsp = LocationSpecificPart.builder().staff(true).countryCode(33)
LocationSpecificPart lsp = LocationSpecificPart.builder().staff(true)
.qrCodeRenewalIntervalExponentCompact(2).venueType(4).venueCategory1(0).venueCategory2(0)
.periodDuration(3).build();
Location location = Location.builder().contact(locationContact).locationSpecificPart(lsp)
......@@ -127,7 +127,7 @@ class LocationSpecificPartTest {
throws CleaCryptoException {
Instant periodStartTime = Instant.now().truncatedTo(ChronoUnit.HOURS);
/* Encode a LSP with location */
LocationSpecificPart lsp = LocationSpecificPart.builder().staff(true).countryCode(33)
LocationSpecificPart lsp = LocationSpecificPart.builder().staff(true)
.qrCodeRenewalIntervalExponentCompact(2).venueType(4).venueCategory1(0).venueCategory2(0)
.periodDuration(3).build();
Location location = Location.builder().locationSpecificPart(lsp)
......@@ -172,7 +172,7 @@ class LocationSpecificPartTest {
public void testQrCodeGeneration() throws Exception {
Instant periodStartTime = Instant.now().truncatedTo(ChronoUnit.HOURS);
/* Encode the LSP */
LocationSpecificPart lsp = LocationSpecificPart.builder().staff(true).countryCode(33)
LocationSpecificPart lsp = LocationSpecificPart.builder().staff(true)
.qrCodeRenewalIntervalExponentCompact(2).venueType(4).venueCategory1(0).venueCategory2(0)
.periodDuration(3).build();
Location location = Location.builder().locationSpecificPart(lsp)
......@@ -201,7 +201,7 @@ class LocationSpecificPartTest {
*/
@ParameterizedTest
@CsvFileSource(resources = "/testLSPDecoding.csv", numLinesToSkip = 1)
public void testDecodingOfLocationSpecificPartInBase64(int staff, int countryCode, String locationTemporaryPublicID,
public void testDecodingOfLocationSpecificPartInBase64(int staff, String locationTemporaryPublicID,
int qrCodeRenewalIntervalExponentCompact, int venueType, int venueCat1, int venueCat2, int periodDuration,
int periodStartTime, long qrStartTime, String serverAuthoritySecretKey, String serverAuthorityPublicKey,
String lspbase64) throws CleaEncryptionException, CleaEncodingException {
......@@ -209,7 +209,6 @@ class LocationSpecificPartTest {
LocationSpecificPart lsp = decoder.decrypt(lspbase64);
assertThat(lsp.isStaff()).isEqualTo(staff == 1);
assertThat(lsp.getCountryCode()).isEqualTo(countryCode);
assertThat(lsp.getQrCodeRenewalIntervalExponentCompact()).isEqualTo(qrCodeRenewalIntervalExponentCompact);
assertThat(lsp.getLocationTemporaryPublicId()).isEqualTo(UUID.fromString(locationTemporaryPublicID));
assertThat(lsp.getPeriodDuration()).isEqualTo(periodDuration);
......@@ -227,7 +226,7 @@ class LocationSpecificPartTest {
*/
@ParameterizedTest
@CsvFileSource(resources = "/testLSPDecoding.csv", numLinesToSkip = 1)
public void testEncodingDecodingOfLSPSpecificPartInBase64(int staff, int countryCode,
public void testEncodingDecodingOfLSPSpecificPartInBase64(int staff,
String locationTemporaryPublicID, int qrCodeRenewalIntervalExponentCompact, int venueType, int venueCat1,
int venueCat2, int periodDuration, int periodStartTime, long qrStartTime, String serverAuthoritySecretKey,
String serverAuthorityPublicKey, String lspbase64) throws CleaCryptoException {
......@@ -243,7 +242,6 @@ class LocationSpecificPartTest {
/* Encode a LSP with location */
LocationSpecificPart lsp = LocationSpecificPart.builder()
.staff(staff == 1)
.countryCode(countryCode)
.qrCodeRenewalIntervalExponentCompact(qrCodeRenewalIntervalExponentCompact)
.venueType(venueType)
.venueCategory1(venueCat1)
......
......@@ -30,7 +30,6 @@ public class LocationSpecificPartValidationTest {
locationSpecificPartBuilder = LocationSpecificPart.builder()
.version(0)
.type(0)
.countryCode(250)
.staff(false)
.locationTemporaryPublicId(UUID.randomUUID())
.qrCodeRenewalIntervalExponentCompact(0)
......@@ -97,29 +96,6 @@ public class LocationSpecificPartValidationTest {
assertThat(exception.getViolations()).anyMatch(violation -> violation.getMessage().equals(LocationSpecificPart.TYPE_VALIDATION_MESSAGE));
}
@Test
public void testWhenCountryCodeHasnegativeValueThenValidationFails() {
LocationSpecificPart lsp = locationSpecificPartBuilder.countryCode(-1).build();
CleaInvalidLocationMessageException exception = assertThrows(CleaInvalidLocationMessageException.class, () -> {
this.validator.validateMessage(lsp);
});
assertThat(exception.getViolations().size()).isEqualTo(1);
assertThat(exception.getViolations()).anyMatch(violation -> violation.getMessage().equals(LocationSpecificPart.COUNTRY_CODE_VALIDATION_MESSAGE));
}
@Test
public void testWhenCountryCodeGreaterThan4096ThenValidationFails() {
LocationSpecificPart lsp = locationSpecificPartBuilder.countryCode(4097).build();
CleaInvalidLocationMessageException exception = assertThrows(CleaInvalidLocationMessageException.class, () -> {
this.validator.validateMessage(lsp);
});
assertThat(exception.getViolations().size()).isEqualTo(1);
assertThat(exception.getViolations()).anyMatch(violation -> violation.getMessage().equals(LocationSpecificPart.COUNTRY_CODE_VALIDATION_MESSAGE));
}
@Test
public void testWhenLocationTemporaryPublicIdIsIsNullThenValidationFails() {
......
......@@ -108,7 +108,7 @@ public class LocationTest {
protected LocationSpecificPart newLocationSpecificPart(int qrCodeRenewalIntervalExponentCompact,
int periodDuration) {
return LocationSpecificPart.builder().staff(true).countryCode(33)
return LocationSpecificPart.builder().staff(true)
.qrCodeRenewalIntervalExponentCompact(qrCodeRenewalIntervalExponentCompact).venueType(4)
.venueCategory1(0).venueCategory2(0).periodDuration(periodDuration).build();
}
......
staff, countryCode, LTId, CRIexp, venueType, venueCat1, venueCat2, periodDuration, ct_periodStart, t_qrStart, SK_SA, PK_SA, lsp_base64
0, 492, c5f2d008-5665-83cb-c96f-4ae18aad1dfd, 5, 12, 0, 0, 3, 1062909, 3826472280, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, AMXy0AhWZYPLyW9K4YqtHf12w-Q5VvP2R6ZtCT4WlfLAWeVFSBadzFeGINFc4NNWSX7E6boxRNMeDotD7LBahTSfMhULz9GhGhTyV-uMIcB9nW0VRaWNgzbw4kvWXw-sOl3fZpLOmNwDADaznmr89IK5IOq0vKJlczwnYxb3ZBqWPqKC5bnw5kbLh-7cagJbAszeSxi-P0YcqK9hzEK9WYj2CJJzjWdmZOor61j5Rw==
1, 4095, c5f2d008-5665-83cb-c96f-4ae18aad1dfd, 31, 31, 15, 15, 255, 1062909, 3826472280, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, AMXy0AhWZYPLyW9K4YqtHf0p_Gysu2EU0qEyzx-nrs5_vbp9FGCpNRhOrrzW_aXwKL8AQlgJBeZLQBGZ2hr0N2xNnljVBLBSgJw8wGyuIptqlWejsFtKMQwq4RpcuS7xybb6nQx0KuAssACnjrNRhQl3J_t7LBt4sqjtEK1LDOc222qPEZtnXmkqfNTWPgOTqZUuojJvfeTmTtrQDKDO5TJOJSB-4iGgn2gWLP6NjA==
1, 592, c5f2d008-5665-83cb-c96f-4ae18aad1dfd, 31, 31, 15, 15, 255, 1062909, 3826472280, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMXy0AhWZYPLyW9K4YqtHf1tPTudQD5y3C1ivD2grKgU5aX9ua7P3PH_ep3_WspttoYv50zGNao3FLrOvPKCCzwpaL6Xhm0NqQ5271kDqqtYaXzOT0EluITXgwafaRaCtRrUJdIEHDbR8ETX-PQ=
0, 492, c5f2d008-5665-83cb-c96f-4ae18aad1dfd, 5, 10, 3, 3, 5, 1062909, 3826472280, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, AMXy0AhWZYPLyW9K4YqtHf2tCYHJavT2eNYgBdmsbbqZAdysmcMhNZGnZA7pqCccjjRKSgK4sHwIMDGkJuWgGIhVf3ez1nJTJddyYrFJKPIci9_7cOGko0K1kOKj7ga7cWmuPcDqNy48xLItaG3N5KS8Mz10wdgRPT0ZEpDZd_0OdTUDoCYngBoCTVVBxQNa_B1wNgCVUYJBCjjN2gSedl2WjaoFy1MuDtUBWiAnsQ==
1, 202, c5f2d008-5665-83cb-c96f-4ae18aad1dfd, 5, 31, 3, 1, 10, 1062909, 3826472280, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, AMXy0AhWZYPLyW9K4YqtHf1wwQvjxqmRyYKBxus-eO__jQ58vPCngxSOLNibRMUi1plMNvgAVTaTaemtfDXOvz2V6TJfDfki7NjljX7ZK8LXUTppZahXTaUF864IiFwWPhmPtF1Hs3sf8Kz_qh-Ihs63RcYZwnuQ6rY--_yjZ8F0GiCwA02nZeNHdYyuZAOOqVTFXnFfMauT1896iglj0CV8-JsmbGN_dEDeJaCDAw==
0, 492, 236f860c-7a25-36f7-8fae-f0fbc81fbeae, 5, 12, 0, 0, 3, 1062908, 3826468800, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, ACNvhgx6JTb3j67w-8gfvq669YklPkwn65PWlv8rmvD4U-w99c5CC4cfUl7sXMk3MX7UYLXI1S_zR4PY3n0BQNe67f-YXnrLjqUw7MHHOSqewlvwR0FeIGBxLGkeTpBr0KAKDBLPgP5P6VV4SKnVmv-A7GoJCk_vB5Rm44FhklTX2Z0NRfP25zjIndtCYgK4UquFC-gRD2bmgESkNCrm1V6g7o64fdjpX8kULwSK0A==
1, 4095, 236f860c-7a25-36f7-8fae-f0fbc81fbeae, 31, 31, 15, 15, 255, 1062908, 3826468800, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, ACNvhgx6JTb3j67w-8gfvq7Neda9SHsIggs7FlrhvBf26kDkGwdcbTtcPbyvLejUjFhR2giEeokPPOM8_-j9F8p4FnZndNo5Lsytm-YDc7eU_t3dQwK9bU6tsmjbFEPLA2XNP2bT2vgDzeYYMVVjRRirGEb4JN6WFwlF7JmkpNvY66RUfMNOoEcdN_J28wK8KjU5bmEX3ajdE6zEo0yiw6PTUlTpqV2Csd4H1Pd7uw==
1, 592, 236f860c-7a25-36f7-8fae-f0fbc81fbeae, 31, 31, 15, 15, 255, 1062908, 3826468800, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ACNvhgx6JTb3j67w-8gfvq6Um04rhVunQBLoiF1yOYjSEDw0_tV6cW8Azke9LB4TMUHXrufg1hwGkaoWr9o9XFr6agQxJDO6IW5WUAMCtePZzuLlFQlV6GMKhhtwBDaITmBNQZ25KKH9TWKo2lQ=
0, 492, 236f860c-7a25-36f7-8fae-f0fbc81fbeae, 5, 10, 3, 3, 5, 1062908, 3826468800, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, ACNvhgx6JTb3j67w-8gfvq4e7MYZwNZLmW94RbzrcNJxipSBsoL1GcUl0bb4Asm4trtXHRAQUaq8T0m1yQDvM_FmWa0UW1-fRLwQQrWJjNb7fpg2NcZ5a-QL3iyrFFmhDgwxBJsxcNwf5RUVYphUa-y8Tf_0fXn6T37BPJjTW-4w4MVQQJ9m_ELWjAwjEgPWyv1VUmrTdg-4QKWiU_vdrmz9__XXWz1WWuaV8aIKLg==
1, 202, 236f860c-7a25-36f7-8fae-f0fbc81fbeae, 5, 31, 3, 1, 10, 1062908, 3826468800, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, ACNvhgx6JTb3j67w-8gfvq60HlOOZWvwbluQ5BsbkQdTsP-EfjkwR1lY7q6yaVoqeVUHkoUIPm0EAq8JvQHKlidB1h5Nrd55eAIopIWnrpHazjDC3IlOR2OkT88g5cQDosFeX3PBNMdVLYLpyP9bbNN1ivWzNgK4WD3oEv3PrE8ZdMYQyPyjsOXDt3AfpgIEiVoDZ4zpeYlib5z6exCV56NxI4JSxvUp9wPlhSFSVg==
staff, LTId, CRIexp, venueType, venueCat1, venueCat2, periodDuration, ct_periodStart, t_qrStart, SK_SA, PK_SA, lsp_base64
0, c793a189-bb16-312b-8142-b023ddc0af17, 5, 12, 0, 0, 3, 1063102, 3827167734, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, AMeToYm7FjErgUKwI93ArxfjH9TKDsTE_Xc9Yb68IMcYw1pSGTGRawj4u2wFRS9biYOC7_oOdevJCNK0UsDlkmUlFv5azDeHl5Qxy9a0C0Zo7-AAnandO74jXm_JUfeU8lSYosCSOSrm3cOtXzx3d_E-pmVNOkSuurc-P50pvuTeu3k17BAeSqO5YrhTqwL-AFMKdKjadwQrdLY_NTBl54WwFfkqNFol4haLNQtORA==
1, c793a189-bb16-312b-8142-b023ddc0af17, 31, 31, 15, 15, 255, 1063102, 3827167734, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, AMeToYm7FjErgUKwI93ArxdXNAHI0NLHUQNejUy7w2vXLrdlgVnO9D9wMs9WIfFG1jYAmfjs3ywzFdLugnmycuxF72TPipxTmPngknkbQy2rMNEgJT6a3-QXT98yUeDReLCnTgkdgK-UXBD4dtnSh-H2eILIM01_cqJtokaKOQzNFl0CDu50wZIsH3ufmgOr8-yE7zn-1BmCKiS9i_sISeCefYVGaoEyhRjedp0orA==
1, c793a189-bb16-312b-8142-b023ddc0af17, 31, 31, 15, 15, 255, 1063102, 3827167734, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMeToYm7FjErgUKwI93Arxdml1y0xhCFK0drHc9178cijVF--8i3pHmRkHcxVcjVnHHTbCsifrp8h3fKJEE5neHf_HYDyWBHzIJTBEoCcRSIe0j2VYKbh_yuV17Grx9VyMteV9YInu_rO7Tf9lU=
0, c793a189-bb16-312b-8142-b023ddc0af17, 5, 10, 3, 3, 5, 1063102, 3827167734, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, AMeToYm7FjErgUKwI93Arxf1v4Wrs-OfKKZh6BHvSGCkqtvHQHFE04Tj5C0h0_wvoU9LAD6zuN3SjGLf6a_tNgXwFB4GH_81-ehBjd5CbHZlBnBH_oW81G7YDhqCSOEVk6H97yh1icUCZY-qvNiOD0e6TPryhS6hzmN1sYgykbTilF3thEtCMQLM6WS8BgK7zJFrx9tvu224l5HDpBfOGIoM_tKBFIRPor9Tidhe5A==
1, c793a189-bb16-312b-8142-b023ddc0af17, 5, 31, 3, 1, 10, 1063102, 3827167734, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, AMeToYm7FjErgUKwI93ArxeKaGHjtn2U1ZFdVjrgu4PTL82y-7D8Ca6YILjHg18h-ZgUDeuWfuFZKfOP_QYhEZ-qstcJxKq1Vt04JwZslU4T0ehgLmrPRdgF26UCGj9_m3WPkDA8rh2AJ5AJddJdvA3HzABTJeRppYQWz8ln1uDW5d2tYCeeh0U98XHm9gJfv43BpwyVB3DL1TdfVa_pOofzvEIKbAH21UxzLrjJug==
0, ba8f72b7-5a29-3ab9-8495-5b8e1bda1305, 5, 12, 0, 0, 3, 1063102, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, ALqPcrdaKTq5hJVbjhvaEwVxopAtlZRCzrInCOaH_tvMEdJnfNpy0AmTFTp5Ru-_LycV6pv0QpBeadNr2_H6jt2d7rEfTs9eR08mDHRKjR6DV53Pt5u0qLGaFmcaYLCHArp2C_ubqJgNpyb4zPjTp5rXV5PDTksO4PeYhJME28JhAJfyHkDQ853fUCtTzQJVGmCMuJWaLJWg82jko5QBoa89Y5ELGX32kp-Yxg4iCg==
1, ba8f72b7-5a29-3ab9-8495-5b8e1bda1305, 31, 31, 15, 15, 255, 1063102, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, ALqPcrdaKTq5hJVbjhvaEwXfFShvv-__d6h0S1d4bbMTtM93uLl7yNoD0E9Qci8TavfH-CrLVePyuO6iyHkDW79EhUxhr88WeJLdrVc_qxOChSnka3rocbOlXlIFEqfkGmy8wK4fmZVZpKhxcychLZgHYaS0pglKUtIQCfKFOrq2CPjGA5d8DxIIoWO-rAJ3ikleknl9meF4G909DPMKhtkcisb20477LEGGOb8PuQ==
1, ba8f72b7-5a29-3ab9-8495-5b8e1bda1305, 31, 31, 15, 15, 255, 1063102, 3827167200, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ALqPcrdaKTq5hJVbjhvaEwXyiPQa2-D97Dr3ux9NtWT5QKANkxZhhYbLwfG00luexeT87cwO-sAMwwFC7DEyfMYlpYB4ybZ7FcWPlPkDsXNQ6_Uxe31CokVi3uKvj8DQr0nkTnk0Sra9hZiSuHQ=
0, ba8f72b7-5a29-3ab9-8495-5b8e1bda1305, 5, 10, 3, 3, 5, 1063102, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, ALqPcrdaKTq5hJVbjhvaEwXIXyF3EuKebILEGjBaAzG6EKHZk-njurm_arYDm9EgaR7t8jY1H-mimWM_nFDL6Ya-usARu-AK2BqF8iBlqY-pb_Yw0bSdjmBfBx9onIwYxVVeoHG6vAvrLzy1cUNmaqEkgITx3OKyTktmRR69RB-7NWnwjtGylIqQYKmkmwIAcvLAvG4mx8HiqbwugxjKljX3Wjix535I6gdfdOgJIQ==
1, ba8f72b7-5a29-3ab9-8495-5b8e1bda1305, 5, 31, 3, 1, 10, 1063102, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, ALqPcrdaKTq5hJVbjhvaEwUqe2zRSlvTOddqoGAWkUplVwyZbfNK-TkwjSSOE-bMJdm8D35WNujEE6BTc_Q3N65h1qo32PeZ8IeLLyCbNEjF8DOyXah4H0JYv9OfEJZZgK-WcPqg2fasUG-AYFmrC3XGaEqZLHmTHdWBjaxvnEMwMnruoCZBrc6jUxhRnQNWoQS8SMIcquL__k_gljBOXURP-YD34n5bXw-p6EZZOg==
locationPhone, locationRegion, locationPin, t_periodStart, SK_SA, PK_SA, SK_MCTA, PK_MCTA, lsp_base64
3380013000, 1, 012345, 3826472400, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMXy0AhWZYPLyW9K4YqtHf12w-Q5VvP2R6ZtCT4WlfLAWeVFSBadzFeGINFc4NNWSX7E6boxRNMeDotD7LBahTSfMhULz9GhGhTyV-uMIcB9nW0VRaWNgzbw4kvWXw-sOl3fZpLOmNwDADaznmr89IK5IOq0vKJlczwnYxb3ZBqWPqKC5bnw5kbLh-7cagJbAszeSxi-P0YcqK9hzEK9WYj2CJJzjWdmZOor61j5Rw==
001122334455667, 255, 012345, 3826472400, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMXy0AhWZYPLyW9K4YqtHf0p_Gysu2EU0qEyzx-nrs5_vbp9FGCpNRhOrrzW_aXwKL8AQlgJBeZLQBGZ2hr0N2xNnljVBLBSgJw8wGyuIptqlWejsFtKMQwq4RpcuS7xybb6nQx0KuAssACnjrNRhQl3J_t7LBt4sqjtEK1LDOc222qPEZtnXmkqfNTWPgOTqZUuojJvfeTmTtrQDKDO5TJOJSB-4iGgn2gWLP6NjA==
33800130000, 21, 012345, 3826472400, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMXy0AhWZYPLyW9K4YqtHf2tCYHJavT2eNYgBdmsbbqZAdysmcMhNZGnZA7pqCccjjRKSgK4sHwIMDGkJuWgGIhVf3ez1nJTJddyYrFJKPIci9_7cOGko0K1kOKj7ga7cWmuPcDqNy48xLItaG3N5KS8Mz10wdgRPT0ZEpDZd_0OdTUDoCYngBoCTVVBxQNa_B1wNgCVUYJBCjjN2gSedl2WjaoFy1MuDtUBWiAnsQ==
33800130000, 12, 543210, 3826472400, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMXy0AhWZYPLyW9K4YqtHf1wwQvjxqmRyYKBxus-eO__jQ58vPCngxSOLNibRMUi1plMNvgAVTaTaemtfDXOvz2V6TJfDfki7NjljX7ZK8LXUTppZahXTaUF864IiFwWPhmPtF1Hs3sf8Kz_qh-Ihs63RcYZwnuQ6rY--_yjZ8F0GiCwA02nZeNHdYyuZAOOqVTFXnFfMauT1896iglj0CV8-JsmbGN_dEDeJaCDAw==
3380013000, 1, 012345, 3826468800, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ACNvhgx6JTb3j67w-8gfvq669YklPkwn65PWlv8rmvD4U-w99c5CC4cfUl7sXMk3MX7UYLXI1S_zR4PY3n0BQNe67f-YXnrLjqUw7MHHOSqewlvwR0FeIGBxLGkeTpBr0KAKDBLPgP5P6VV4SKnVmv-A7GoJCk_vB5Rm44FhklTX2Z0NRfP25zjIndtCYgK4UquFC-gRD2bmgESkNCrm1V6g7o64fdjpX8kULwSK0A==
001122334455667, 255, 012345, 3826468800, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ACNvhgx6JTb3j67w-8gfvq7Neda9SHsIggs7FlrhvBf26kDkGwdcbTtcPbyvLejUjFhR2giEeokPPOM8_-j9F8p4FnZndNo5Lsytm-YDc7eU_t3dQwK9bU6tsmjbFEPLA2XNP2bT2vgDzeYYMVVjRRirGEb4JN6WFwlF7JmkpNvY66RUfMNOoEcdN_J28wK8KjU5bmEX3ajdE6zEo0yiw6PTUlTpqV2Csd4H1Pd7uw==
33800130000, 21, 012345, 3826468800, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ACNvhgx6JTb3j67w-8gfvq4e7MYZwNZLmW94RbzrcNJxipSBsoL1GcUl0bb4Asm4trtXHRAQUaq8T0m1yQDvM_FmWa0UW1-fRLwQQrWJjNb7fpg2NcZ5a-QL3iyrFFmhDgwxBJsxcNwf5RUVYphUa-y8Tf_0fXn6T37BPJjTW-4w4MVQQJ9m_ELWjAwjEgPWyv1VUmrTdg-4QKWiU_vdrmz9__XXWz1WWuaV8aIKLg==
33800130000, 12, 543210, 3826468800, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ACNvhgx6JTb3j67w-8gfvq60HlOOZWvwbluQ5BsbkQdTsP-EfjkwR1lY7q6yaVoqeVUHkoUIPm0EAq8JvQHKlidB1h5Nrd55eAIopIWnrpHazjDC3IlOR2OkT88g5cQDosFeX3PBNMdVLYLpyP9bbNN1ivWzNgK4WD3oEv3PrE8ZdMYQyPyjsOXDt3AfpgIEiVoDZ4zpeYlib5z6exCV56NxI4JSxvUp9wPlhSFSVg==
3380013000, 1, 012345, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMeToYm7FjErgUKwI93ArxfjH9TKDsTE_Xc9Yb68IMcYw1pSGTGRawj4u2wFRS9biYOC7_oOdevJCNK0UsDlkmUlFv5azDeHl5Qxy9a0C0Zo7-AAnandO74jXm_JUfeU8lSYosCSOSrm3cOtXzx3d_E-pmVNOkSuurc-P50pvuTeu3k17BAeSqO5YrhTqwL-AFMKdKjadwQrdLY_NTBl54WwFfkqNFol4haLNQtORA==
001122334455667, 255, 012345, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMeToYm7FjErgUKwI93ArxdXNAHI0NLHUQNejUy7w2vXLrdlgVnO9D9wMs9WIfFG1jYAmfjs3ywzFdLugnmycuxF72TPipxTmPngknkbQy2rMNEgJT6a3-QXT98yUeDReLCnTgkdgK-UXBD4dtnSh-H2eILIM01_cqJtokaKOQzNFl0CDu50wZIsH3ufmgOr8-yE7zn-1BmCKiS9i_sISeCefYVGaoEyhRjedp0orA==
33800130000, 21, 012345, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMeToYm7FjErgUKwI93Arxf1v4Wrs-OfKKZh6BHvSGCkqtvHQHFE04Tj5C0h0_wvoU9LAD6zuN3SjGLf6a_tNgXwFB4GH_81-ehBjd5CbHZlBnBH_oW81G7YDhqCSOEVk6H97yh1icUCZY-qvNiOD0e6TPryhS6hzmN1sYgykbTilF3thEtCMQLM6WS8BgK7zJFrx9tvu224l5HDpBfOGIoM_tKBFIRPor9Tidhe5A==
33800130000, 12, 543210, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, AMeToYm7FjErgUKwI93ArxeKaGHjtn2U1ZFdVjrgu4PTL82y-7D8Ca6YILjHg18h-ZgUDeuWfuFZKfOP_QYhEZ-qstcJxKq1Vt04JwZslU4T0ehgLmrPRdgF26UCGj9_m3WPkDA8rh2AJ5AJddJdvA3HzABTJeRppYQWz8ln1uDW5d2tYCeeh0U98XHm9gJfv43BpwyVB3DL1TdfVa_pOofzvEIKbAH21UxzLrjJug==
3380013000, 1, 012345, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ALqPcrdaKTq5hJVbjhvaEwVxopAtlZRCzrInCOaH_tvMEdJnfNpy0AmTFTp5Ru-_LycV6pv0QpBeadNr2_H6jt2d7rEfTs9eR08mDHRKjR6DV53Pt5u0qLGaFmcaYLCHArp2C_ubqJgNpyb4zPjTp5rXV5PDTksO4PeYhJME28JhAJfyHkDQ853fUCtTzQJVGmCMuJWaLJWg82jko5QBoa89Y5ELGX32kp-Yxg4iCg==
001122334455667, 255, 012345, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ALqPcrdaKTq5hJVbjhvaEwXfFShvv-__d6h0S1d4bbMTtM93uLl7yNoD0E9Qci8TavfH-CrLVePyuO6iyHkDW79EhUxhr88WeJLdrVc_qxOChSnka3rocbOlXlIFEqfkGmy8wK4fmZVZpKhxcychLZgHYaS0pglKUtIQCfKFOrq2CPjGA5d8DxIIoWO-rAJ3ikleknl9meF4G909DPMKhtkcisb20477LEGGOb8PuQ==
33800130000, 21, 012345, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ALqPcrdaKTq5hJVbjhvaEwXIXyF3EuKebILEGjBaAzG6EKHZk-njurm_arYDm9EgaR7t8jY1H-mimWM_nFDL6Ya-usARu-AK2BqF8iBlqY-pb_Yw0bSdjmBfBx9onIwYxVVeoHG6vAvrLzy1cUNmaqEkgITx3OKyTktmRR69RB-7NWnwjtGylIqQYKmkmwIAcvLAvG4mx8HiqbwugxjKljX3Wjix535I6gdfdOgJIQ==
33800130000, 12, 543210, 3827167200, 34af7f978c5a17772867d929e0b800dd2db74608322d73f2f0cfd19cdcaeccc8, 04c14d9db89a3dd8da8a366cf26cd67f1de468fb5dc15f240b0d2b96dbdb5f39af962cb0bdc0bafcc9e523bf5cd4eba420c51758f987457954d32f1003bbaaf1c5, 3108f08b1485adb6f72cfba1b55c7484c906a2a3a0a027c78dcd991ca64c97bd, 045f802c016b2d14ef4d7ef01617c67c7506c0cd08aed3e4bcaf34ef5ffaddebb70a073d82c37bc874ce6705cec8b1c4a03b2ccd8f28b0c5034fb8774f2e97b1a4, ALqPcrdaKTq5hJVbjhvaEwUqe2zRSlvTOddqoGAWkUplVwyZbfNK-TkwjSSOE-bMJdm8D35WNujEE6BTc_Q3N65h1qo32PeZ8IeLLyCbNEjF8DOyXah4H0JYv9OfEJZZgK-WcPqg2fasUG-AYFmrC3XGaEqZLHmTHdWBjaxvnEMwMnruoCZBrc6jUxhRnQNWoQS8SMIcquL__k_gljBOXURP-YD34n5bXw-p6EZZOg==
[{
"staff": 0,
"countryCode": 492,
"CRIexp": 5,
"venueType": 12,
"venueCategory1": 0,
......@@ -17,7 +16,6 @@
},
{
"staff": 1,
"countryCode": 4095,
"CRIexp": 31,
"venueType": 31,
"venueCategory1": 15,
......@@ -35,7 +33,6 @@
{
"staff": 1,
"countryCode": 592,
"CRIexp": 31,
"venueType": 31,
"venueCategory1": 15,
......@@ -49,7 +46,6 @@
},
{
"staff": 0,
"countryCode": 492,
"CRIexp": 5,
"venueType": 10,
"venueCategory1": 3,
......@@ -66,7 +62,6 @@
},
{
"staff": 1,
"countryCode": 202,
"CRIexp": 5,
"venueType": 31,
"venueCategory1": 3,
......
......@@ -96,7 +96,6 @@ def lsp_encode(cfg, java=False):
else:
cmd.extend(CMD_C)
cmd.append(str(cfg['staff']))
cmd.append(str(cfg['countryCode']))
cmd.append(str(cfg['CRIexp']))
cmd.append(str(cfg['venueType']))
cmd.append(str(cfg['venueCategory1']))
......@@ -145,23 +144,22 @@ def lsp_decode(cfg):
cmd.append(cfg['SK_SA'])
cmd.append(cfg['SK_MCTA'])
vals = run_cmd(cmd)
if len(vals) == 10 or len(vals) == 13:
if len(vals) == 9 or len(vals) == 12:
lsp_dict = {"staff": int(vals[0]),
"countryCode": int(vals[1]),
"CRIexp": int(vals[2]),
"venueType": int(vals[3]),
"venueCategory1": int(vals[4]),
"venueCategory2": int(vals[5]),
"periodDuration": int(vals[6]),
"LTId": vals[7],
"ct_periodStart": int(vals[8]),
"t_qrStart": int(vals[9]),
"CRIexp": int(vals[1]),
"venueType": int(vals[2]),
"venueCategory1": int(vals[3]),
"venueCategory2": int(vals[4]),
"periodDuration": int(vals[5]),
"LTId": vals[6],
"ct_periodStart": int(vals[7]),
"t_qrStart": int(vals[8]),
"SK_SA": cfg['SK_SA'],
"SK_MCTA": cfg['SK_MCTA']}
if len(vals) == 13:
lsp_dict["locationPhone"] = vals[10]
lsp_dict["locationRegion"] = int(vals[11])
lsp_dict["locationPIN"] = vals[12]
if len(vals) == 12:
lsp_dict["locationPhone"] = vals[9]
lsp_dict["locationRegion"] = int(vals[10])
lsp_dict["locationPIN"] = vals[11]
else:
lsp_dict = {"Error": "lsp_decode failed"}
return lsp_dict
......@@ -236,7 +234,6 @@ def lsp_cmp(enc_in, enc_out, dec_out):
assert enc_in['venueType'] == dec_out['venueType']
assert enc_in['venueCategory1'] == dec_out['venueCategory1']
assert enc_in['venueCategory2'] == dec_out['venueCategory2']
assert enc_in['countryCode'] == dec_out['countryCode']
assert enc_in['periodDuration'] == dec_out['periodDuration']
assert enc_out['LTId'] == dec_out['LTId']
assert enc_out['ct_periodStart'] == dec_out['ct_periodStart']
......@@ -282,7 +279,7 @@ def lsps_cmp(enc_in_file, enc_out_file, dec_out_file, csv_lsp_file, csv_loc_file
def save_lsp_encoding_decoding_results(enc_in, enc_out, csv_lsp_file, csv_loc_file):
sep = ', '
if csv_lsp_file is not None:
row = str(enc_in['staff']) + sep + str(enc_in['countryCode']) + sep
row = str(enc_in['staff']) + sep
row += str(enc_out['LTId']) + sep + str(enc_in['CRIexp']) + sep
row += str(enc_in['venueType']) + sep + str(enc_in['venueCategory1']) + sep
row += str(enc_in['venueCategory2']) + sep + str(enc_in['periodDuration']) + sep
......@@ -311,7 +308,7 @@ if __name__ == "__main__":
if args.csvtest:
CSV_TEST_FILES_GENERATION = True
with open(CSV_LSP_TST, "w") as outFile:
HEADER = 'staff, countryCode, LTId, CRIexp, venueType, venueCat1, venueCat2, periodDuration, ct_periodStart, t_qrStart, SK_SA, PK_SA, lsp_base64\n'
HEADER = 'staff, LTId, CRIexp, venueType, venueCat1, venueCat2, periodDuration, ct_periodStart, t_qrStart, SK_SA, PK_SA, lsp_base64\n'
outFile.write(HEADER)
with open(CSV_LOC_TST, "w") as outFile:
HEADER = 'locationPhone, locationRegion, locationPin, t_periodStart, SK_SA, PK_SA, SK_MCTA, PK_MCTA, lsp_base64\n'
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment