From 3c54f1d289e18d145966c7f18725add91e512d1d Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 16 Feb 2023 15:18:18 +0100 Subject: [PATCH 01/75] Fixed use of deprecated os_ prefixed functions --- src/gpg_challenge.c | 2 +- src/gpg_data.c | 12 ++++++------ src/gpg_gen.c | 4 ++-- src/gpg_init.c | 36 ++++++++++++++++++------------------ src/gpg_io.c | 16 ++++++++-------- src/gpg_pin.c | 2 +- src/gpg_pso.c | 4 ++-- src/gpg_select.c | 4 ++-- src/gpg_ux_nanos.c | 24 ++++++++++++------------ src/gpg_ux_nanox.c | 20 ++++++++++---------- 10 files changed, 62 insertions(+), 62 deletions(-) diff --git a/src/gpg_challenge.c b/src/gpg_challenge.c index 04d2648..bb53e2b 100644 --- a/src/gpg_challenge.c +++ b/src/gpg_challenge.c @@ -37,7 +37,7 @@ int gpg_apdu_get_challenge() { unsigned char chain[32]; unsigned char Sr[32]; - os_memset(chain, 0, 32); + memset(chain, 0, 32); path[0] = 0x80475047; path[1] = 0x0F0F0F0F; os_perso_derive_node_bip32(CX_CURVE_SECP256K1, path, 2, Sr, chain); diff --git a/src/gpg_data.c b/src/gpg_data.c index d47b790..cd9f461 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -103,7 +103,7 @@ int gpg_apdu_get_data(unsigned int ref) { /* ----------------- aid, histo, ext_length, ... ----------------- */ case 0x6E: gpg_io_insert_tlv(0x4F, 16, N_gpg_pstate->AID); - os_memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset - 6, G_gpg_vstate.kslot->serial, 4); + memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset - 6, G_gpg_vstate.kslot->serial, 4); gpg_io_insert_tlv(0x5F52, 15, N_gpg_pstate->histo); gpg_io_insert_tlv(0x7F66, sizeof(C_ext_length), C_ext_length); @@ -414,10 +414,10 @@ int gpg_apdu_put_data(unsigned int ref) { } p = G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset; q = p + len_p; - os_memmove(pq + ksz - len_p, p, len_p); - os_memset(pq, 0, ksz - len_p); - os_memmove(pq + 2 * ksz - len_q, q, len_q); - os_memset(pq + ksz, 0, ksz - len_q); + memmove(pq + ksz - len_p, p, len_p); + memset(pq, 0, ksz - len_p); + memmove(pq + 2 * ksz - len_q, q, len_q); + memset(pq + ksz, 0, ksz - len_q); // regenerate RSA private key unsigned char _e[4]; @@ -450,7 +450,7 @@ int gpg_apdu_put_data(unsigned int ref) { if (ksz == len_p) { G_gpg_vstate.work.ecfp.private.curve = curve; G_gpg_vstate.work.ecfp.private.d_len = ksz; - os_memmove(G_gpg_vstate.work.ecfp.private.d, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, ksz); + memmove(G_gpg_vstate.work.ecfp.private.d, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, ksz); cx_ecfp_generate_pair(curve, &G_gpg_vstate.work.ecfp.public, &G_gpg_vstate.work.ecfp.private, 1); nvm_write(&keygpg->pub_key.ecfp, &G_gpg_vstate.work.ecfp.public, sizeof(cx_ecfp_public_key_t)); nvm_write(&keygpg->priv_key.ecfp, &G_gpg_vstate.work.ecfp.private, sizeof(cx_ecfp_private_key_t)); diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 9c323fe..163e32b 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -26,7 +26,7 @@ void gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { unsigned int path[2]; unsigned char chain[32]; - os_memset(chain, 0, 32); + memset(chain, 0, 32); path[0] = 0x80475047; path[1] = slot + 1; os_perso_derive_node_bip32(CX_CURVE_SECP256K1, path, 2, seed, chain); @@ -257,7 +257,7 @@ int gpg_apdu_gen() { gpg_io_mark(); curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); if (curve == CX_CURVE_Ed25519) { - os_memmove(G_gpg_vstate.work.io_buffer + 128, keygpg->pub_key.ecfp256.W, keygpg->pub_key.ecfp256.W_len); + memmove(G_gpg_vstate.work.io_buffer + 128, keygpg->pub_key.ecfp256.W, keygpg->pub_key.ecfp256.W_len); cx_edward_compress_point(CX_CURVE_Ed25519, G_gpg_vstate.work.io_buffer + 128, 65); gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 129); // 129: discard 02 } else if (curve == CX_CURVE_Curve25519) { diff --git a/src/gpg_init.c b/src/gpg_init.c index d98da0a..a75b80d 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -78,46 +78,46 @@ const unsigned char C_OID_cv25519[10] = { }; unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len) { - if ((len == sizeof(C_OID_SECP256R1)) && (os_memcmp(oid, C_OID_SECP256R1, len) == 0)) { + if ((len == sizeof(C_OID_SECP256R1)) && (memcmp(oid, C_OID_SECP256R1, len) == 0)) { return CX_CURVE_SECP256R1; } /* - if ( (len == sizeof(C_OID_SECP256K1)) && (os_memcmp(oid, C_OID_SECP256K1, len)==0) ) { + if ( (len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len)==0) ) { return CX_CURVE_SECP256K1; } - if ( (len == sizeof(C_OID_SECP384R1)) && (os_memcmp(oid, C_OID_SECP384R1, len)==0) ) { + if ( (len == sizeof(C_OID_SECP384R1)) && (memcmp(oid, C_OID_SECP384R1, len)==0) ) { return CX_CURVE_SECP384R1; } - if ( (len == sizeof(C_OID_SECP521R1)) && (os_memcmp(oid, C_OID_SECP521R1, len)==0) ) { + if ( (len == sizeof(C_OID_SECP521R1)) && (memcmp(oid, C_OID_SECP521R1, len)==0) ) { return CX_CURVE_SECP521R1; } */ /* - if ( (len == sizeof(C_OID_BRAINPOOL256R1)) && (os_memcmp(oid, C_OID_BRAINPOOL256R1, len)==0) ) { + if ( (len == sizeof(C_OID_BRAINPOOL256R1)) && (memcmp(oid, C_OID_BRAINPOOL256R1, len)==0) ) { return CX_CURVE_BrainPoolP256R1; } - if ( (len == sizeof(C_OID_BRAINPOOL384R1)) && (os_memcmp(oid, C_OID_BRAINPOOL384R1, len)==0) ) { + if ( (len == sizeof(C_OID_BRAINPOOL384R1)) && (memcmp(oid, C_OID_BRAINPOOL384R1, len)==0) ) { return CX_CURVE_BrainPoolP384R1; } - if ( (len == sizeof(C_OID_BRAINPOOL512R1)) && (os_memcmp(oid, C_OID_BRAINPOOL512R1, len)==0) ) { + if ( (len == sizeof(C_OID_BRAINPOOL512R1)) && (memcmp(oid, C_OID_BRAINPOOL512R1, len)==0) ) { return CX_CURVE_BrainPoolP512R1; } */ - if ((len == sizeof(C_OID_Ed25519)) && (os_memcmp(oid, C_OID_Ed25519, len) == 0)) { + if ((len == sizeof(C_OID_Ed25519)) && (memcmp(oid, C_OID_Ed25519, len) == 0)) { return CX_CURVE_Ed25519; } - if ((len == sizeof(C_OID_cv25519)) && (os_memcmp(oid, C_OID_cv25519, len) == 0)) { + if ((len == sizeof(C_OID_cv25519)) && (memcmp(oid, C_OID_cv25519, len) == 0)) { return CX_CURVE_Curve25519; } /* - if ( (len == sizeof(C_OID_SECP256K1)) && (os_memcmp(oid, C_OID_SECP256K1, len)==0) ) { + if ( (len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len)==0) ) { return CX_CURVE_256K1; } - if ( (len == sizeof(C_OID_BRAINPOOL256T1)) && (os_memcmp(oid, C_OID_BRAINPOOL256T1, len)==0) ) { + if ( (len == sizeof(C_OID_BRAINPOOL256T1)) && (memcmp(oid, C_OID_BRAINPOOL256T1, len)==0) ) { return CX_CURVE_BrainPoolP256T1; } */ @@ -297,12 +297,12 @@ const unsigned char C_sha256_PW2[] = { /* ----------------------------------------------------------------------- */ void gpg_init() { - os_memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); + memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); // first init ? - if (os_memcmp((void *)(N_gpg_pstate->magic), (void *)C_MAGIC, sizeof(C_MAGIC)) != 0) { + if (memcmp((void *)(N_gpg_pstate->magic), (void *)C_MAGIC, sizeof(C_MAGIC)) != 0) { gpg_install(STATE_ACTIVATE); gpg_nvm_write((void *)(N_gpg_pstate->magic), (void *)C_MAGIC, sizeof(C_MAGIC)); - os_memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); + memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); } // key conf @@ -356,12 +356,12 @@ void gpg_install(unsigned char app_state) { gpg_nvm_write((void *)(N_gpg_pstate), NULL, sizeof(gpg_nv_state_t)); // historical bytes - os_memmove(G_gpg_vstate.work.io_buffer, C_default_Histo, sizeof(C_default_Histo)); + memmove(G_gpg_vstate.work.io_buffer, C_default_Histo, sizeof(C_default_Histo)); G_gpg_vstate.work.io_buffer[7] = app_state; gpg_nvm_write((void *)(N_gpg_pstate->histo), G_gpg_vstate.work.io_buffer, sizeof(C_default_Histo)); // AID - os_memmove(G_gpg_vstate.work.io_buffer, C_default_AID, sizeof(C_default_AID)); + memmove(G_gpg_vstate.work.io_buffer, C_default_AID, sizeof(C_default_AID)); gpg_nvm_write((void *)(N_gpg_pstate->AID), &G_gpg_vstate.work.io_buffer, sizeof(C_default_AID)); @@ -371,14 +371,14 @@ void gpg_install(unsigned char app_state) { gpg_nvm_write((void *)(&N_gpg_pstate->sex), G_gpg_vstate.work.io_buffer, 1); // default PW1/PW2: 1 2 3 4 5 6 - os_memmove(pin.value, C_sha256_PW1, sizeof(C_sha256_PW1)); + memmove(pin.value, C_sha256_PW1, sizeof(C_sha256_PW1)); pin.length = 6; pin.counter = 3; pin.ref = PIN_ID_PW1; gpg_nvm_write((void *)(&N_gpg_pstate->PW1), &pin, sizeof(gpg_pin_t)); // default PW3: 1 2 3 4 5 6 7 8 - os_memmove(pin.value, C_sha256_PW2, sizeof(C_sha256_PW2)); + memmove(pin.value, C_sha256_PW2, sizeof(C_sha256_PW2)); pin.length = 8; pin.counter = 3; pin.ref = PIN_ID_PW3; diff --git a/src/gpg_io.c b/src/gpg_io.c index e6e4258..728c8c2 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -61,7 +61,7 @@ void gpg_io_discard(int clear) { } void gpg_io_clear() { - os_memset(G_gpg_vstate.work.io_buffer, 0, GPG_IO_BUFFER_LENGTH); + memset(G_gpg_vstate.work.io_buffer, 0, GPG_IO_BUFFER_LENGTH); } /* ----------------------------------------------------------------------- */ @@ -73,14 +73,14 @@ void gpg_io_hole(unsigned int sz) { THROW(ERROR_IO_FULL); return; } - os_memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + sz, + memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + sz, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, G_gpg_vstate.io_length - G_gpg_vstate.io_offset); G_gpg_vstate.io_length += sz; } void gpg_io_insert(unsigned char const *buff, unsigned int len) { gpg_io_hole(len); - os_memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, buff, len); + memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, buff, len); G_gpg_vstate.io_offset += len; } @@ -219,7 +219,7 @@ int gpg_io_fetch_nv(unsigned char *buffer, int len) { } int gpg_io_fetch(unsigned char *buffer, int len) { if (buffer) { - os_memmove(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); + memmove(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); } G_gpg_vstate.io_offset += len; return len; @@ -250,7 +250,7 @@ int gpg_io_do(unsigned int io_flags) { unsigned int tx, xx; // send chunk tx = MAX_OUT - 2; - os_memmove(G_io_apdu_buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, tx); + memmove(G_io_apdu_buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, tx); G_gpg_vstate.io_length -= tx; G_gpg_vstate.io_offset += tx; G_io_apdu_buffer[tx] = 0x61; @@ -268,7 +268,7 @@ int gpg_io_do(unsigned int io_flags) { return 0; } } - os_memmove(G_io_apdu_buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, G_gpg_vstate.io_length); + memmove(G_io_apdu_buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, G_gpg_vstate.io_length); if (io_flags & IO_RETURN_AFTER_TX) { rx = gpg_io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, G_gpg_vstate.io_length); @@ -320,7 +320,7 @@ int gpg_io_do(unsigned int io_flags) { default: _default: G_gpg_vstate.io_lc = G_io_apdu_buffer[4]; - os_memmove(G_gpg_vstate.work.io_buffer, G_io_apdu_buffer + 5, G_gpg_vstate.io_lc); + memmove(G_gpg_vstate.work.io_buffer, G_io_apdu_buffer + 5, G_gpg_vstate.io_lc); G_gpg_vstate.io_length = G_gpg_vstate.io_lc; break; } @@ -345,7 +345,7 @@ int gpg_io_do(unsigned int io_flags) { if ((G_gpg_vstate.io_length + G_gpg_vstate.io_lc) > GPG_IO_BUFFER_LENGTH) { return 1; } - os_memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_length, G_io_apdu_buffer + 5, G_gpg_vstate.io_lc); + memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_length, G_io_apdu_buffer + 5, G_gpg_vstate.io_lc); G_gpg_vstate.io_length += G_gpg_vstate.io_lc; } diff --git a/src/gpg_pin.c b/src/gpg_pin.c index fdfe903..40154f8 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -60,7 +60,7 @@ static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pi cx_sha256_init(&G_gpg_vstate.work.md.sha256); cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha256, CX_LAST, pin_val, pin_len, G_gpg_vstate.work.md.H, sizeof(G_gpg_vstate.work.md.H)); - if (os_memcmp(G_gpg_vstate.work.md.H, pin->value, 32)) { + if (memcmp(G_gpg_vstate.work.md.H, pin->value, 32)) { return SW_SECURITY_STATUS_NOT_SATISFIED; } diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 3ee1f68..25f0146 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -62,8 +62,8 @@ static int gpg_sign(gpg_key_t *sigkey) { THROW(SW_WRONG_LENGTH); } l = ksz - G_gpg_vstate.io_length; - os_memmove(G_gpg_vstate.work.io_buffer + l, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - os_memset(G_gpg_vstate.work.io_buffer, 0xFF, l); + memmove(G_gpg_vstate.work.io_buffer + l, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + memset(G_gpg_vstate.work.io_buffer, 0xFF, l); G_gpg_vstate.work.io_buffer[0] = 0; G_gpg_vstate.work.io_buffer[1] = 1; G_gpg_vstate.work.io_buffer[l - 1] = 0; diff --git a/src/gpg_select.c b/src/gpg_select.c index be9ce51..4d9ffd5 100644 --- a/src/gpg_select.c +++ b/src/gpg_select.c @@ -24,13 +24,13 @@ int gpg_apdu_select() { int sw; // MF - if ((G_gpg_vstate.io_length == 2) && (os_memcmp(G_gpg_vstate.work.io_buffer, C_MF, G_gpg_vstate.io_length) == 0)) { + if ((G_gpg_vstate.io_length == 2) && (memcmp(G_gpg_vstate.work.io_buffer, C_MF, G_gpg_vstate.io_length) == 0)) { gpg_io_discard(0); sw = SW_OK; } // AID APP else if ((G_gpg_vstate.io_length == 6) && - (os_memcmp(G_gpg_vstate.work.io_buffer, N_gpg_pstate->AID, G_gpg_vstate.io_length) == 0)) { + (memcmp(G_gpg_vstate.work.io_buffer, N_gpg_pstate->AID, G_gpg_vstate.io_length) == 0)) { G_gpg_vstate.DO_current = 0; G_gpg_vstate.DO_reccord = 0; G_gpg_vstate.DO_offset = 0; diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index cf6f022..50be277 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -80,13 +80,13 @@ void ui_CCID_reset(void) { } void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { - os_memset(&G_gpg_vstate.ui_dogsays[0], 0, sizeof(ux_menu_entry_t)); + memset(&G_gpg_vstate.ui_dogsays[0], 0, sizeof(ux_menu_entry_t)); G_gpg_vstate.ui_dogsays[0].callback = menu_display; G_gpg_vstate.ui_dogsays[0].userid = value; G_gpg_vstate.ui_dogsays[0].line1 = msg1; G_gpg_vstate.ui_dogsays[0].line2 = msg2; - os_memset(&G_gpg_vstate.ui_dogsays[1], 0, sizeof(ux_menu_entry_t)); + memset(&G_gpg_vstate.ui_dogsays[1], 0, sizeof(ux_menu_entry_t)); UX_MENU_DISPLAY(0, G_gpg_vstate.ui_dogsays, NULL); }; @@ -283,7 +283,7 @@ static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', void ui_menu_pinentry_display(unsigned int value) { if (value == 0) { - os_memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); G_gpg_vstate.ux_pinentry[0] = 1; G_gpg_vstate.ux_pinentry[1] = 5; } @@ -442,7 +442,7 @@ static unsigned int validate_pin() { offset = 1 + G_gpg_vstate.work.io_buffer[0]; len = G_gpg_vstate.work.io_buffer[offset]; if ((len != G_gpg_vstate.work.io_buffer[offset + 1 + len]) || - (os_memcmp(G_gpg_vstate.work.io_buffer + offset + 1, G_gpg_vstate.work.io_buffer + offset + 1 + len + 1, + (memcmp(G_gpg_vstate.work.io_buffer + offset + 1, G_gpg_vstate.work.io_buffer + offset + 1 + len + 1, len) != 0)) { gpg_io_discard(1); gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); @@ -569,7 +569,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { unsigned int oid_len; err = NULL; - os_memset(&attributes, 0, sizeof(attributes)); + memset(&attributes, 0, sizeof(attributes)); switch (G_gpg_vstate.ux_type) { case 2048: case 3072: @@ -596,18 +596,18 @@ void ui_menu_tmpl_set_action(unsigned int value) { attributes.value[0] = 19; // ecdsa } oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); - os_memmove(attributes.value + 1, oid, sizeof(oid_len)); + memmove(attributes.value + 1, oid, sizeof(oid_len)); attributes.length = 1 + oid_len; break; case CX_CURVE_Ed25519: if (G_gpg_vstate.ux_key == 2) { attributes.value[0] = 18; // ecdh - os_memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); + memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); attributes.length = 1 + sizeof(C_OID_cv25519); } else { attributes.value[0] = 22; // eddsa - os_memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); + memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); attributes.length = 1 + sizeof(C_OID_Ed25519); } break; @@ -983,10 +983,10 @@ extern const uint8_t N_USBD_CfgDesc[]; const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element) { if (entry == &ui_menu_main[0]) { if (element->component.userid == 0x21) { - os_memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); - os_memmove(G_gpg_vstate.menu, N_gpg_pstate->name.value, 12); + memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + memmove(G_gpg_vstate.menu, N_gpg_pstate->name.value, 12); if (G_gpg_vstate.menu[0] == 0) { - os_memmove(G_gpg_vstate.menu, "", 9); + memmove(G_gpg_vstate.menu, "", 9); } else { for (int i = 0; i < 12; i++) { if (G_gpg_vstate.menu[i] == 0x3c) { @@ -999,7 +999,7 @@ const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, ba unsigned int serial; serial = (G_gpg_vstate.kslot->serial[0] << 24) | (G_gpg_vstate.kslot->serial[1] << 16) | (G_gpg_vstate.kslot->serial[2] << 8) | (G_gpg_vstate.kslot->serial[3]); - os_memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); #if GPG_MULTISLOT snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "ID: %x / %d", serial, G_gpg_vstate.slot + 1); #else diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index ab0429e..c1dcef3 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -278,7 +278,7 @@ static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', void ui_menu_pinentry_display(unsigned int value) { if (value == 0) { - os_memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); G_gpg_vstate.ux_pinentry[0] = 1; G_gpg_vstate.ux_pinentry[1] = 5; } @@ -437,7 +437,7 @@ static unsigned int validate_pin() { offset = 1 + G_gpg_vstate.work.io_buffer[0]; len = G_gpg_vstate.work.io_buffer[offset]; if ((len != G_gpg_vstate.work.io_buffer[offset + 1 + len]) || - (os_memcmp(G_gpg_vstate.work.io_buffer + offset + 1, G_gpg_vstate.work.io_buffer + offset + 1 + len + 1, + (memcmp(G_gpg_vstate.work.io_buffer + offset + 1, G_gpg_vstate.work.io_buffer + offset + 1 + len + 1, len) != 0)) { gpg_io_discard(1); gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); @@ -603,7 +603,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { unsigned int oid_len; err = NULL; - os_memset(&attributes, 0, sizeof(attributes)); + memset(&attributes, 0, sizeof(attributes)); switch (G_gpg_vstate.ux_type) { case 2048: case 3072: @@ -624,18 +624,18 @@ void ui_menu_tmpl_set_action(unsigned int value) { attributes.value[0] = 19; // ecdsa } oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); - os_memmove(attributes.value + 1, oid, sizeof(oid_len)); + memmove(attributes.value + 1, oid, sizeof(oid_len)); attributes.length = 1 + oid_len; break; case CX_CURVE_Ed25519: if (G_gpg_vstate.ux_key == 2) { attributes.value[0] = 18; // ecdh - os_memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); + memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); attributes.length = 1 + sizeof(C_OID_cv25519); } else { attributes.value[0] = 22; // eddsa - os_memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); + memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); attributes.length = 1 + sizeof(C_OID_Ed25519); } break; @@ -1172,10 +1172,10 @@ UX_FLOW(ux_flow_main, &ux_menu_main_5_step); void ui_menu_main_predisplay() { - os_memset(G_gpg_vstate.ux_buff1, 0, sizeof(G_gpg_vstate.ux_buff1)); - os_memmove(G_gpg_vstate.ux_buff1, (void *)(N_gpg_pstate->name.value), 20); + memset(G_gpg_vstate.ux_buff1, 0, sizeof(G_gpg_vstate.ux_buff1)); + memmove(G_gpg_vstate.ux_buff1, (void *)(N_gpg_pstate->name.value), 20); if (G_gpg_vstate.ux_buff1[0] == 0) { - os_memmove(G_gpg_vstate.ux_buff1, "", 9); + memmove(G_gpg_vstate.ux_buff1, "", 9); } else { for (int i = 0; i < 12; i++) { if (G_gpg_vstate.ux_buff1[i] == 0x3c) { @@ -1187,7 +1187,7 @@ void ui_menu_main_predisplay() { unsigned int serial; serial = (G_gpg_vstate.kslot->serial[0] << 24) | (G_gpg_vstate.kslot->serial[1] << 16) | (G_gpg_vstate.kslot->serial[2] << 8) | (G_gpg_vstate.kslot->serial[3]); - os_memset(G_gpg_vstate.ux_buff2, 0, sizeof(G_gpg_vstate.ux_buff2)); + memset(G_gpg_vstate.ux_buff2, 0, sizeof(G_gpg_vstate.ux_buff2)); #if GPG_MULTISLOT snprintf(G_gpg_vstate.ux_buff2, sizeof(G_gpg_vstate.ux_buff2), "ID: %x / %d", serial, G_gpg_vstate.slot + 1); #else From ee371daaefe4c66168e96a483608353c2b42d384 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 8 Feb 2023 13:54:23 +0100 Subject: [PATCH 02/75] Fix implicit cast warnings --- src/gpg_data.c | 84 +++++++++++++++++++++++----------------------- src/gpg_gen.c | 2 +- src/gpg_init.c | 4 +-- src/gpg_pin.c | 6 ++-- src/gpg_pso.c | 2 +- src/gpg_select.c | 2 +- src/gpg_ux_nanox.c | 4 +-- 7 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index cd9f461..6222335 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -40,44 +40,44 @@ int gpg_apdu_get_data(unsigned int ref) { switch (ref) { /* ----------------- Optional DO for private use ----------------- */ case 0x0101: - gpg_io_insert(N_gpg_pstate->private_DO1.value, N_gpg_pstate->private_DO1.length); + gpg_io_insert((const unsigned char *)N_gpg_pstate->private_DO1.value, N_gpg_pstate->private_DO1.length); break; case 0x0102: - gpg_io_insert(N_gpg_pstate->private_DO2.value, N_gpg_pstate->private_DO2.length); + gpg_io_insert((const unsigned char *)N_gpg_pstate->private_DO2.value, N_gpg_pstate->private_DO2.length); break; case 0x0103: - gpg_io_insert(N_gpg_pstate->private_DO3.value, N_gpg_pstate->private_DO3.length); + gpg_io_insert((const unsigned char *)N_gpg_pstate->private_DO3.value, N_gpg_pstate->private_DO3.length); break; case 0x0104: - gpg_io_insert(N_gpg_pstate->private_DO4.value, N_gpg_pstate->private_DO4.length); + gpg_io_insert((const unsigned char *)N_gpg_pstate->private_DO4.value, N_gpg_pstate->private_DO4.length); break; /* ----------------- Config key slot ----------------- */ case 0x01F0: - gpg_io_insert(N_gpg_pstate->config_slot, 3); + gpg_io_insert((const unsigned char *)N_gpg_pstate->config_slot, 3); gpg_io_insert_u8(G_gpg_vstate.slot); break; case 0x01F1: - gpg_io_insert(N_gpg_pstate->config_slot, 3); + gpg_io_insert((const unsigned char *)N_gpg_pstate->config_slot, 3); break; case 0x01F2: gpg_io_insert_u8(G_gpg_vstate.slot); break; /* ----------------- Config RSA exponent ----------------- */ case 0x01F8: - gpg_io_insert(N_gpg_pstate->default_RSA_exponent, 4); + gpg_io_insert((const unsigned char *)N_gpg_pstate->default_RSA_exponent, 4); break; /* ----------------- Application ----------------- */ /* Full Application identifier */ case 0x004F: - gpg_io_insert(N_gpg_pstate->AID, 10); + gpg_io_insert((const unsigned char *)N_gpg_pstate->AID, 10); gpg_io_insert(G_gpg_vstate.kslot->serial, 4); gpg_io_insert_u16(0x0000); break; /* Historical bytes, */ case 0x5F52: - gpg_io_insert(N_gpg_pstate->histo, 15); + gpg_io_insert((const unsigned char *)N_gpg_pstate->histo, 15); break; /* Extended length information */ case 0x7F66: @@ -87,24 +87,24 @@ int gpg_apdu_get_data(unsigned int ref) { /* ----------------- User -----------------*/ /* Login data */ case 0x005E: - gpg_io_insert(N_gpg_pstate->login.value, N_gpg_pstate->login.length); + gpg_io_insert((const unsigned char *)N_gpg_pstate->login.value, N_gpg_pstate->login.length); break; /* Uniform resource locator */ case 0x5F50: - gpg_io_insert(N_gpg_pstate->url.value, N_gpg_pstate->url.length); + gpg_io_insert((const unsigned char *)N_gpg_pstate->url.value, N_gpg_pstate->url.length); break; /* Name, Language, Sex */ case 0x65: - gpg_io_insert_tlv(0x5B, N_gpg_pstate->name.length, N_gpg_pstate->name.value); - gpg_io_insert_tlv(0x5F2D, N_gpg_pstate->lang.length, N_gpg_pstate->lang.value); - gpg_io_insert_tlv(0x5F35, 1, N_gpg_pstate->sex); + gpg_io_insert_tlv(0x5B, N_gpg_pstate->name.length, (const unsigned char *)N_gpg_pstate->name.value); + gpg_io_insert_tlv(0x5F2D, N_gpg_pstate->lang.length, (const unsigned char *)N_gpg_pstate->lang.value); + gpg_io_insert_tlv(0x5F35, 1, (const unsigned char *)N_gpg_pstate->sex); break; /* ----------------- aid, histo, ext_length, ... ----------------- */ case 0x6E: - gpg_io_insert_tlv(0x4F, 16, N_gpg_pstate->AID); + gpg_io_insert_tlv(0x4F, 16, (const unsigned char *)N_gpg_pstate->AID); memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset - 6, G_gpg_vstate.kslot->serial, 4); - gpg_io_insert_tlv(0x5F52, 15, N_gpg_pstate->histo); + gpg_io_insert_tlv(0x5F52, 15, (const unsigned char *)N_gpg_pstate->histo); gpg_io_insert_tlv(0x7F66, sizeof(C_ext_length), C_ext_length); gpg_io_mark(); @@ -114,7 +114,7 @@ int gpg_apdu_get_data(unsigned int ref) { gpg_io_insert_tlv(0xC2, G_gpg_vstate.kslot->dec.attributes.length, G_gpg_vstate.kslot->dec.attributes.value); gpg_io_insert_tlv(0xC3, G_gpg_vstate.kslot->aut.attributes.length, G_gpg_vstate.kslot->aut.attributes.value); gpg_io_insert_tl(0xC4, 7); - gpg_io_insert(N_gpg_pstate->PW_status, 4); + gpg_io_insert((const unsigned char *)N_gpg_pstate->PW_status, 4); gpg_io_insert_u8(N_gpg_pstate->PW1.counter); gpg_io_insert_u8(N_gpg_pstate->RC.counter); gpg_io_insert_u8(N_gpg_pstate->PW3.counter); @@ -171,7 +171,7 @@ int gpg_apdu_get_data(unsigned int ref) { /* ----------------- PW Status Bytes ----------------- */ case 0x00C4: - gpg_io_insert(N_gpg_pstate->PW_status, 4); + gpg_io_insert((const unsigned char *)N_gpg_pstate->PW_status, 4); gpg_io_insert_u8(N_gpg_pstate->PW1.counter); gpg_io_insert_u8(N_gpg_pstate->RC.counter); gpg_io_insert_u8(N_gpg_pstate->PW3.counter); @@ -210,20 +210,20 @@ int gpg_apdu_put_data(unsigned int ref) { switch (ref) { /* ----------------- Optional DO for private use ----------------- */ case 0x0101: - ptr_l = &N_gpg_pstate->private_DO1.length; - ptr_v = N_gpg_pstate->private_DO1.value; + ptr_l = (unsigned int *)&N_gpg_pstate->private_DO1.length; + ptr_v = (unsigned char *)N_gpg_pstate->private_DO1.value; goto WRITE_PRIVATE_DO; case 0x0102: - ptr_l = &N_gpg_pstate->private_DO2.length; - ptr_v = N_gpg_pstate->private_DO2.value; + ptr_l = (unsigned int *)&N_gpg_pstate->private_DO2.length; + ptr_v = (unsigned char *)N_gpg_pstate->private_DO2.value; goto WRITE_PRIVATE_DO; case 0x0103: - ptr_l = &N_gpg_pstate->private_DO3.length; - ptr_v = N_gpg_pstate->private_DO3.value; + ptr_l = (unsigned int *)&N_gpg_pstate->private_DO3.length; + ptr_v = (unsigned char *)N_gpg_pstate->private_DO3.value; goto WRITE_PRIVATE_DO; case 0x0104: - ptr_l = &N_gpg_pstate->private_DO4.length; - ptr_v = N_gpg_pstate->private_DO4.value; + ptr_l = (unsigned int *)&N_gpg_pstate->private_DO4.length; + ptr_v = (unsigned char *)N_gpg_pstate->private_DO4.value; goto WRITE_PRIVATE_DO; WRITE_PRIVATE_DO: if (G_gpg_vstate.io_length > GPG_EXT_PRIVATE_DO_LENGTH) { @@ -246,7 +246,7 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_DATA); return 0; } - gpg_nvm_write(N_gpg_pstate->config_slot, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, 3); + gpg_nvm_write((void *)N_gpg_pstate->config_slot, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, 3); break; case 0x01F2: @@ -269,7 +269,7 @@ int gpg_apdu_put_data(unsigned int ref) { return 0; } e = gpg_io_fetch_u32(); - nvm_write(&N_gpg_pstate->default_RSA_exponent, &e, sizeof(unsigned int)); + nvm_write((void *)&N_gpg_pstate->default_RSA_exponent, &e, sizeof(unsigned int)); break; } @@ -476,8 +476,8 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(N_gpg_pstate->name.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write(&N_gpg_pstate->name.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); + gpg_nvm_write((void *)N_gpg_pstate->name.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + gpg_nvm_write((void *)&N_gpg_pstate->name.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); break; /* Login data */ case 0x5E: @@ -485,8 +485,8 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(N_gpg_pstate->login.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write(&N_gpg_pstate->login.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); + gpg_nvm_write((void *)N_gpg_pstate->login.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + gpg_nvm_write((void *)&N_gpg_pstate->login.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); break; /* Language preferences */ case 0x5F2D: @@ -494,8 +494,8 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(N_gpg_pstate->lang.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write(&N_gpg_pstate->lang.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); + gpg_nvm_write((void *)N_gpg_pstate->lang.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + gpg_nvm_write((void *)&N_gpg_pstate->lang.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); break; /* Sex */ case 0x5F35: @@ -503,7 +503,7 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(N_gpg_pstate->sex, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + gpg_nvm_write((void *)N_gpg_pstate->sex, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); break; /* Uniform resource locator */ case 0x5F50: @@ -511,8 +511,8 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(N_gpg_pstate->url.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write(&N_gpg_pstate->url.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); + gpg_nvm_write((void *)N_gpg_pstate->url.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + gpg_nvm_write((void *)&N_gpg_pstate->url.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); break; /* ----------------- Cardholder certificate ----------------- */ @@ -567,7 +567,7 @@ int gpg_apdu_put_data(unsigned int ref) { /* ----------------- PWS status ----------------- */ case 0xC4: - gpg_io_fetch_nv(N_gpg_pstate->PW_status, 1); + gpg_io_fetch_nv((unsigned char *)N_gpg_pstate->PW_status, 1); break; /* ----------------- Fingerprints ----------------- */ @@ -620,10 +620,10 @@ int gpg_apdu_put_data(unsigned int ref) { void * pkey; cx_aes_key_t aes_key; case 0xD1: - pkey = &N_gpg_pstate->SM_enc; + pkey = (void *)&N_gpg_pstate->SM_enc; goto init_aes_key; case 0xD2: - pkey = &N_gpg_pstate->SM_mac; + pkey = (void *)&N_gpg_pstate->SM_mac; goto init_aes_key; case 0xD5: pkey = &G_gpg_vstate.kslot->AES_dec; @@ -636,9 +636,9 @@ int gpg_apdu_put_data(unsigned int ref) { /* AES key: one shot */ case 0xF4: cx_aes_init_key(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key); - gpg_nvm_write(&N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); + gpg_nvm_write((void *)&N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); cx_aes_init_key(G_gpg_vstate.work.io_buffer + 16, G_gpg_vstate.io_length, &aes_key); - gpg_nvm_write(&N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); + gpg_nvm_write((void *)&N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); break; } diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 163e32b..8f99db4 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -151,7 +151,7 @@ int gpg_apdu_gen() { cx_math_next_prime(pq + size, size); } - cx_rsa_generate_pair(ksz, rsa_pub, rsa_priv, N_gpg_pstate->default_RSA_exponent, 4, pq); + cx_rsa_generate_pair(ksz, rsa_pub, rsa_priv, (const unsigned char *)N_gpg_pstate->default_RSA_exponent, 4, pq); nvm_write(pkey, rsa_priv, pkey_size); nvm_write(&keygpg->pub_key.rsa[0], rsa_pub->e, 4); diff --git a/src/gpg_init.c b/src/gpg_init.c index a75b80d..d3c9a3e 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -307,7 +307,7 @@ void gpg_init() { // key conf G_gpg_vstate.slot = N_gpg_pstate->config_slot[1]; - G_gpg_vstate.kslot = &N_gpg_pstate->keys[G_gpg_vstate.slot]; + G_gpg_vstate.kslot = (gpg_key_slot_t *)&N_gpg_pstate->keys[G_gpg_vstate.slot]; gpg_mse_reset(); // pin conf G_gpg_vstate.pinmode = N_gpg_pstate->config_pin[0]; @@ -411,7 +411,7 @@ void gpg_install(unsigned char app_state) { // default key template: RSA 2048) for (int s = 0; s < GPG_KEYS_SLOTS; s++) { - gpg_install_slot(&N_gpg_pstate->keys[s]); + gpg_install_slot((gpg_key_slot_t *)&N_gpg_pstate->keys[s]); } } } diff --git a/src/gpg_pin.c b/src/gpg_pin.c index 40154f8..8deecfb 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -25,11 +25,11 @@ gpg_pin_t *gpg_pin_get_pin(int pinref) { switch (pinref) { case PIN_ID_PW1: case PIN_ID_PW2: - return &N_gpg_pstate->PW1; + return (gpg_pin_t *)&N_gpg_pstate->PW1; case PIN_ID_PW3: - return &N_gpg_pstate->PW3; + return (gpg_pin_t *)&N_gpg_pstate->PW3; case PIN_ID_RC: - return &N_gpg_pstate->RC; + return (gpg_pin_t *)&N_gpg_pstate->RC; } return NULL; } diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 25f0146..d5e71de 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -85,7 +85,7 @@ static int gpg_sign(gpg_key_t *sigkey) { // sign #define RS (G_gpg_vstate.work.io_buffer + (GPG_IO_BUFFER_LENGTH - 256)) if (sigkey->attributes.value[0] == 19) { - sz = gpg_curve2domainlen(key->curve); + sz = (unsigned int) gpg_curve2domainlen(key->curve); if ((sz == 0) || (key->d_len != sz)) { THROW(SW_CONDITIONS_NOT_SATISFIED); return SW_CONDITIONS_NOT_SATISFIED; diff --git a/src/gpg_select.c b/src/gpg_select.c index 4d9ffd5..ff6de5a 100644 --- a/src/gpg_select.c +++ b/src/gpg_select.c @@ -30,7 +30,7 @@ int gpg_apdu_select() { } // AID APP else if ((G_gpg_vstate.io_length == 6) && - (memcmp(G_gpg_vstate.work.io_buffer, N_gpg_pstate->AID, G_gpg_vstate.io_length) == 0)) { + (memcmp(G_gpg_vstate.work.io_buffer, (const void *)N_gpg_pstate->AID, G_gpg_vstate.io_length) == 0)) { G_gpg_vstate.DO_current = 0; G_gpg_vstate.DO_reccord = 0; G_gpg_vstate.DO_offset = 0; diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index c1dcef3..ff5c4f7 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -1095,12 +1095,12 @@ void ui_menu_slot_action(unsigned int value) { if (value == 128) { s = G_gpg_vstate.slot; - gpg_nvm_write(&N_gpg_pstate->config_slot[1], &s, 1); + gpg_nvm_write((void *) &N_gpg_pstate->config_slot[1], &s, 1); } else { s = (unsigned char)(value - 1); if (s != G_gpg_vstate.slot) { G_gpg_vstate.slot = s; - G_gpg_vstate.kslot = &N_gpg_pstate->keys[G_gpg_vstate.slot]; + G_gpg_vstate.kslot = (gpg_key_slot_t *) &N_gpg_pstate->keys[G_gpg_vstate.slot]; gpg_mse_reset(); ui_CCID_reset(); } From eaaaa04aae1f08581ffb7ef2f8c367c504a715e1 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 8 Feb 2023 15:29:11 +0100 Subject: [PATCH 03/75] Fix excess elements in struct initializer warnings --- src/gpg_ux_nanox.c | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index ff5c4f7..4125149 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -231,48 +231,24 @@ unsigned int ui_pinconfirm_action(unsigned int value) { const bagl_element_t ui_pinentry_nanos[] = { // type userid x y w h str rad fill fg bg font_id icon_id - // clrar screen - {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 64, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL, 0, 0, 0, NULL, NULL, NULL}, + // clear screen + {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 64, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, // left/rights icons {{BAGL_ICON, 0x00, 0, 30, 7, 4, 0, 0, 0, 0xFFFFFF, 0x000000, 0, 0}, - (const char *)&C_icon_down, - 0, - 0, - 0, - NULL, - NULL, - NULL}, + (const char *)&C_icon_down}, {{BAGL_ICON, 0x00, 120, 30, 7, 4, 0, 0, 0, 0xFFFFFF, 0x000000, 0, 0}, - (const char *)&C_icon_up, - 0, - 0, - 0, - NULL, - NULL, - NULL}, + (const char *)&C_icon_up}, // PIN text identifier {{BAGL_LABELINE, 0x01, 10, 25, 117, 15, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, - G_gpg_vstate.menu, - 0, - 0, - 0, - NULL, - NULL, - NULL}, + G_gpg_vstate.menu}, // PIN Value {{BAGL_LABELINE, 0x02, 10, 45, 117, 15, 0, 0, 0, 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_LIGHT_16px | BAGL_FONT_ALIGNMENT_CENTER, 0}, - G_gpg_vstate.menu, - 0, - 0, - 0, - NULL, - NULL, - NULL}, + G_gpg_vstate.menu} }; static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '<', 'A', 'V'}; From 9ec1fb2bc0f0e88cc5eea43c21ffc7aec606691f Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 16 Feb 2023 15:47:51 +0100 Subject: [PATCH 04/75] Simplify LNS-specific checks --- src/gpg_nvram.c | 2 +- src/gpg_ram.c | 4 ++-- src/gpg_vars.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gpg_nvram.c b/src/gpg_nvram.c index 040e04a..a7af005 100644 --- a/src/gpg_nvram.c +++ b/src/gpg_nvram.c @@ -19,7 +19,7 @@ #include "gpg_api.h" #include "gpg_vars.h" -#if defined(TARGET_NANOX) || defined(TARGET_NANOS2) +#ifndef TARGET_NANOS const gpg_nv_state_t N_state_pic; #else gpg_nv_state_t N_state_pic; diff --git a/src/gpg_ram.c b/src/gpg_ram.c index 6a7b16b..5b58016 100644 --- a/src/gpg_ram.c +++ b/src/gpg_ram.c @@ -20,7 +20,7 @@ #include "gpg_vars.h" #include "os_io_seproxyhal.h" -#if defined(TARGET_NANOX) || defined(TARGET_NANOS2) +#ifndef TARGET_NANOS #include "ux.h" ux_state_t G_ux; bolos_ux_params_t G_ux_params; @@ -39,4 +39,4 @@ gpg_v_state_t G_gpg_vstate; #ifdef HAVE_RSA union cx_u G_cx; -#endif // HAVE_RSA \ No newline at end of file +#endif // HAVE_RSA diff --git a/src/gpg_vars.h b/src/gpg_vars.h index 4b0e33c..282d8dd 100644 --- a/src/gpg_vars.h +++ b/src/gpg_vars.h @@ -34,7 +34,7 @@ extern const unsigned char C_OID_cv25519[10]; extern gpg_v_state_t G_gpg_vstate; -#if defined(TARGET_NANOX) || defined(TARGET_NANOS2) +#ifndef TARGET_NANOS extern const gpg_nv_state_t N_state_pic; #define N_gpg_pstate ((volatile gpg_nv_state_t *)PIC(&N_state_pic)) #else From 7f6abae5295abd9f09018f64569e5654d65696cc Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 16 Feb 2023 17:51:00 +0100 Subject: [PATCH 05/75] Removed Blue specific code --- Makefile | 8 +-- src/gpg_ux_blue.c | 151 ---------------------------------------------- 2 files changed, 2 insertions(+), 157 deletions(-) delete mode 100644 src/gpg_ux_blue.c diff --git a/Makefile b/Makefile index af240bb..58d43d4 100644 --- a/Makefile +++ b/Makefile @@ -35,9 +35,7 @@ else $(error APPNAME ($(APPNAME)) is not set or unknown) endif -ifeq ($(TARGET_NAME),TARGET_BLUE) -ICONNAME = images/icon_monero_blue.gif -else ifeq ($(TARGET_NAME),TARGET_NANOS) +ifeq ($(TARGET_NAME),TARGET_NANOS) ICONNAME = images/icon_pgp.gif else ICONNAME = images/icon_pgp_nanox.gif @@ -57,9 +55,7 @@ DEFINES += SPEC_VERSION=$(SPECVERSION) DEFINES += GPG_MULTISLOT=$(GPG_MULTISLOT) #DEFINES += GPG_LOG -ifeq ($(TARGET_NAME),TARGET_BLUE) -DEFINES += UI_BLUE -else ifeq ($(TARGET_NAME),TARGET_NANOS) +ifeq ($(TARGET_NAME),TARGET_NANOS) DEFINES += UI_NANO_S else DEFINES += UI_NANO_X diff --git a/src/gpg_ux_blue.c b/src/gpg_ux_blue.c deleted file mode 100644 index 56e741d..0000000 --- a/src/gpg_ux_blue.c +++ /dev/null @@ -1,151 +0,0 @@ - -/* Copyright 2017 Cedric Mesnil , Ledger SAS - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" -#include "gpg_vars.h" - -#include "os_io_seproxyhal.h" -#include "string.h" -#include "glyphs.h" - -/* ----------------------------------------------------------------------- */ -/* --- Blue UI layout --- */ -/* ----------------------------------------------------------------------- */ -/* screeen size: - blue; 320x480 - nanoS: 128x32 -*/ -#if 0 -static const bagl_element_t const ui_idle_blue[] = { - {{BAGL_RECTANGLE, 0x00, 0, 60, 320, 420, 0, 0, - BAGL_FILL, 0xf9f9f9, 0xf9f9f9, - 0, 0}, - NULL, - 0, - 0, - 0, - NULL, - NULL, - NULL}, - - {{BAGL_RECTANGLE, 0x00, 0, 0, 320, 60, 0, 0, - BAGL_FILL, 0x1d2028, 0x1d2028, - 0, 0}, - NULL, - 0, - 0, - 0, - NULL, - NULL, - NULL}, - - {{BAGL_LABEL, 0x00, 20, 0, 320, 60, 0, 0, - BAGL_FILL, 0xFFFFFF, 0x1d2028, - BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_MIDDLE, 0}, - "GPG Card", - 0, - 0, - 0, - NULL, - NULL, - NULL}, - - {{BAGL_BUTTON | BAGL_FLAG_TOUCHABLE, 0x00, 190, 215, 120, 40, 0, 6, - BAGL_FILL, 0x41ccb4, 0xF9F9F9, - BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER | BAGL_FONT_ALIGNMENT_MIDDLE, - 0}, - "Exit", - 0, - 0x37ae99, - 0xF9F9F9, - gpg_io_seproxyhal_touch_exit, - NULL, - NULL}, - -#ifdef GPG_DEBUG - {{BAGL_BUTTON | BAGL_FLAG_TOUCHABLE, 0x00, 20, 215, 120, 40, 0, 6, - BAGL_FILL, 0x41ccb4, 0xF9F9F9, - BAGL_FONT_OPEN_SANS_LIGHT_14px | BAGL_FONT_ALIGNMENT_CENTER | BAGL_FONT_ALIGNMENT_MIDDLE, - 0}, - "Init", - 0, - 0x37ae99, - 0xF9F9F9, - gpg_io_seproxyhal_touch_debug, - NULL, - NULL} -#endif - -}; - - -const bagl_element_t ui_idle_nanos[] = { - // type - {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, - BAGL_FILL, 0x000000, 0xFFFFFF, - 0, - 0}, - NULL, - 0, - 0, - 0, - NULL, - NULL, - NULL}, - - {{BAGL_LABELINE, 0x00, 0, 12, 128, 32, 0, 0, - 0 , 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_EXTRABOLD_11px|BAGL_FONT_ALIGNMENT_CENTER, - 0 }, - "GPGCard", - 0, - 0, - 0, - NULL, - NULL, - NULL }, - //{{BAGL_LABELINE , 0x02, 0, 26, 128, 32, 0, 0, 0 , 0xFFFFFF, 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px|BAGL_FONT_ALIGNMENT_CENTER, 0 }, "Waiting for requests...", 0, 0, 0, NULL, NULL, NULL }, - - {{BAGL_ICON , 0x00, 3, 12, 7, - 7, 0, 0, - 0 , 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CROSS }, - NULL, - 0, - 0, - 0, - NULL, - NULL, - NULL }, -}; - -unsigned int gpg_io_seproxyhal_touch_exit(const bagl_element_t *e) { - // Go back to the dashboard - os_sched_exit(0); - return 0; // do not redraw the widget -} - - - - -unsigned int ui_idle_blue_button(unsigned int button_mask, - unsigned int button_mask_counter) { - return 0; -} - -#endif \ No newline at end of file From 719d5d2a629f18c4e70c532725a97218ca399fb9 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 16 Feb 2023 18:21:01 +0100 Subject: [PATCH 06/75] Now non-LNS devices only have one full OpenPGP app --- Makefile | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 58d43d4..0dfa15d 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,13 @@ APP_LOAD_PARAMS=--appFlags 0x240 --path "2152157255'" --curve secp256k1 $(COMMON ifeq ($(APPNAME),) APPNAME = OpenPGP endif + ifeq ($(APPNAME),OpenPGP) +ifeq ($(TARGET_NAME),TARGET_NANOS) GPG_MULTISLOT:=0 +else +GPG_MULTISLOT:=1 +endif else ifeq ($(APPNAME),OpenPGP.XL) GPG_MULTISLOT:=1 APPNAME:=OpenPGP.XL @@ -78,8 +83,14 @@ all: default cp -a debug/app.map release/$(APPNAME).map +ifeq ($(TARGET_NAME),TARGET_NANOS) +VARIANTS = OpenPGP OpenPGP.XL +else +VARIANTS = OpenPGP +endif + listvariants: - @echo VARIANTS APPNAME OpenPGP OpenPGP.XL + @echo VARIANTS APPNAME $(VARIANTS) allvariants: make MULTISLOT=0 clean all From 8f03f2378fffaa08bd5af27771dd463aa52d1894 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 16 Feb 2023 15:18:45 +0100 Subject: [PATCH 07/75] Fixed unused variable warnings --- Makefile | 4 +--- src/gpg_data.c | 3 --- src/gpg_dispatch.c | 3 --- src/gpg_init.c | 4 ++-- src/gpg_io.c | 1 + src/gpg_main.c | 1 + src/gpg_pin.c | 2 -- src/gpg_pso.c | 5 +---- src/gpg_ux_nanos.c | 12 ++++++++---- src/gpg_ux_nanox.c | 11 +++++++++-- 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index 0dfa15d..b1e005d 100644 --- a/Makefile +++ b/Makefile @@ -115,7 +115,7 @@ DEFINES += USB_SEGMENT_SIZE=64 DEFINES += U2F_PROXY_MAGIC=\"MOON\" #DEFINES += HAVE_IO_U2F HAVE_U2F -DEFINES += UNUSED\(x\)=\(void\)x +#DEFINES += UNUSED\(x\)=\(void\)x DEFINES += APPVERSION=\"$(APPVERSION)\" DEFINES += HAVE_USB_CLASS_CCID @@ -235,5 +235,3 @@ delete: #add dependency on custom makefile filename dep/%.d: %.c Makefile - - diff --git a/src/gpg_data.c b/src/gpg_data.c index 6222335..2409244 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -286,7 +286,6 @@ int gpg_apdu_put_data(unsigned int ref) { unsigned int len_e, len_p, len_q; unsigned int endof, ksz, reset_cnt; gpg_key_t * keygpg; - unsigned int dh; // fecth 4D gpg_io_fetch_tl(&t, &l); if (t != 0x4D) { @@ -295,7 +294,6 @@ int gpg_apdu_put_data(unsigned int ref) { } // fecth B8/B6/A4 gpg_io_fetch_tl(&t, &l); - dh = 0; reset_cnt = 0; switch (t) { case 0xB6: @@ -307,7 +305,6 @@ int gpg_apdu_put_data(unsigned int ref) { break; case 0xB8: keygpg = &G_gpg_vstate.kslot->dec; - dh = 0x11; break; default: THROW(SW_REFERENCED_DATA_NOT_FOUND); diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index 61ff626..5e27263 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -183,10 +183,7 @@ char debugbuff[5]; void gpg_check_access_write_DO() { unsigned int ref; - gpg_pin_t * pin_pw2, *pin_pw3; - pin_pw2 = gpg_pin_get_pin(PIN_ID_PW2); - pin_pw3 = gpg_pin_get_pin(PIN_ID_PW3); ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; switch (ref) { diff --git a/src/gpg_init.c b/src/gpg_init.c index d3c9a3e..5599161 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -18,7 +18,6 @@ #include "gpg_types.h" #include "gpg_api.h" #include "gpg_vars.h" -#include "usbd_impl.h" #define SHORT(x) ((x) >> 8) & 0xFF, (x)&0xFF /* ----------------------*/ @@ -416,7 +415,6 @@ void gpg_install(unsigned char app_state) { } } -#define USBD_OFFSET_CfgDesc_bPINSupport (sizeof(USBD_CfgDesc) - 16) void USBD_CCID_activate_pinpad(int enabled) { #ifdef HAVE_USB_CLASS_CCID unsigned short length; @@ -426,5 +424,7 @@ void USBD_CCID_activate_pinpad(int enabled) { length = 0; cfgDesc = USBD_GetCfgDesc_impl(&length); nvm_write(cfgDesc + (length - 16), &e, 1); +#else + UNUSED(enabled); #endif } diff --git a/src/gpg_io.c b/src/gpg_io.c index 728c8c2..198dbab 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -310,6 +310,7 @@ int gpg_io_do(unsigned int io_flags) { break; } + __attribute__((fallthrough)); case INS_VERIFY: case INS_CHANGE_REFERENCE_DATA: if (G_io_apdu_buffer[4] == 0) { diff --git a/src/gpg_main.c b/src/gpg_main.c index cd3ee69..088bb58 100644 --- a/src/gpg_main.c +++ b/src/gpg_main.c @@ -65,6 +65,7 @@ void gpg_main(void) { } unsigned char io_event(unsigned char channel) { + UNUSED(channel); // nothing done with the event, throw an error on the transport layer if // needed // can't have more than one tag in the reply, not supported yet. diff --git a/src/gpg_pin.c b/src/gpg_pin.c index 8deecfb..534c212 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -244,12 +244,10 @@ int gpg_apdu_change_ref_data() { int gpg_apdu_reset_retry_counter() { gpg_pin_t *pin_pw1; - gpg_pin_t *pin_pw3; gpg_pin_t *pin_rc; int rc_len, pw1_len; pin_pw1 = gpg_pin_get_pin(PIN_ID_PW1); - pin_pw3 = gpg_pin_get_pin(PIN_ID_PW3); pin_rc = gpg_pin_get_pin(PIN_ID_RC); if (G_gpg_vstate.io_p1 == 2) { diff --git a/src/gpg_pso.c b/src/gpg_pso.c index d5e71de..2e1834b 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -129,6 +129,7 @@ int gpg_apdu_pso() { unsigned int t, l, ksz; unsigned int pso; + unsigned int sz; pso = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; @@ -172,7 +173,6 @@ int gpg_apdu_pso() { case 0x8680: { unsigned int msg_len; cx_aes_key_t *key; - unsigned int sz; key = &G_gpg_vstate.kslot->AES_dec; if (!(key->size != 16)) { THROW(SW_CONDITIONS_NOT_SATISFIED + 5); @@ -192,7 +192,6 @@ int gpg_apdu_pso() { case 0x8086: { unsigned int msg_len; unsigned int pad_byte; - unsigned int sz; pad_byte = gpg_io_fetch_u8(); switch (pad_byte) { @@ -237,7 +236,6 @@ int gpg_apdu_pso() { // --- PSO:DEC:AES case 0x02: { cx_aes_key_t *key; - unsigned int sz; key = &G_gpg_vstate.kslot->AES_dec; if (!(key->size != 16)) { THROW(SW_CONDITIONS_NOT_SATISFIED + 5); @@ -255,7 +253,6 @@ int gpg_apdu_pso() { // --- PSO:DEC:ECDH case 0xA6: { cx_ecfp_private_key_t *key; - unsigned int sz; unsigned int curve; if (G_gpg_vstate.mse_dec->attributes.value[0] != 0x12) { THROW(SW_CONDITIONS_NOT_SATISFIED); diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 50be277..fcee0d5 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -114,6 +114,7 @@ const bagl_element_t ui_uifconfirm_nanos[] = { }; void ui_menu_uifconfirm_display(unsigned int value) { + UNUSED(value); UX_DISPLAY(ui_uifconfirm_nanos, (void *)ui_uifconfirm_prepro); } @@ -144,6 +145,7 @@ unsigned int ui_uifconfirm_prepro(const bagl_element_t *element) { } unsigned int ui_uifconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { + UNUSED(button_mask_counter); unsigned int sw; sw = 0x6985; @@ -213,6 +215,7 @@ const bagl_element_t ui_pinconfirm_nanos[] = { }; void ui_menu_pinconfirm_display(unsigned int value) { + UNUSED(value); UX_DISPLAY(ui_pinconfirm_nanos, (void *)ui_pinconfirm_prepro); } @@ -235,6 +238,7 @@ unsigned int ui_pinconfirm_prepro(const bagl_element_t *element) { } unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { + UNUSED(button_mask_counter); unsigned int sw; sw = 0x6985; @@ -338,12 +342,10 @@ unsigned int ui_pinentry_prepro(const bagl_element_t *element) { } unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { + UNUSED(button_mask_counter); unsigned int offset = G_gpg_vstate.ux_pinentry[0]; - unsigned m_pinentry; char digit; - m_pinentry = 1; - switch (button_mask) { case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down if (G_gpg_vstate.ux_pinentry[offset]) { @@ -562,6 +564,7 @@ const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry } void ui_menu_tmpl_set_action(unsigned int value) { + UNUSED(value); LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); gpg_key_t * dest; const char * err; @@ -862,6 +865,7 @@ const ux_menu_entry_t ui_menu_reset[] = {{NULL, NULL, 0, NULL, "Really Reset ?", UX_MENU_END}; void ui_menu_reset_action(unsigned int value) { + UNUSED(value); unsigned char magic[4]; magic[0] = 0; magic[1] = 0; @@ -882,6 +886,7 @@ const ux_menu_entry_t ui_menu_reset_slot[] = {{NULL, NULL, 0, NULL, "Really Rese UX_MENU_END}; void ui_menu_reset_slot_action(unsigned int value) { + UNUSED(value); gpg_install_slot(G_gpg_vstate.kslot); ui_menu_main_display(0); } @@ -979,7 +984,6 @@ const ux_menu_entry_t ui_menu_main[] = {{NULL, NULL, 0, NULL, "", "", 0, 0}, {ui_menu_info, NULL, 0, NULL, "About", NULL, 0, 0}, {NULL, (void*)os_sched_exit, 0, &C_icon_dashboard, "Quit app", NULL, 50, 29}, UX_MENU_END}; -extern const uint8_t N_USBD_CfgDesc[]; const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element) { if (entry == &ui_menu_main[0]) { if (element->component.userid == 0x21) { diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 4125149..db085a2 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -79,6 +79,8 @@ UX_STEP_CB(ux_menu_popup_1_step, bnnn_paging, ui_menu_main_display(0), {.title = UX_FLOW(ux_flow_popup, &ux_menu_popup_1_step); void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { + UNUSED(menu_display); + UNUSED(value); snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s. %s", msg1, msg2); ux_flow_init(0, ux_flow_popup, NULL); }; @@ -205,6 +207,7 @@ void ui_menu_pinconfirm_predisplay() { } void ui_menu_pinconfirm_display(unsigned int value) { + UNUSED(value); ux_flow_init(0, ux_flow_pinconfirm, NULL); } @@ -310,10 +313,9 @@ unsigned int ui_pinentry_prepro(const bagl_element_t *element) { unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { unsigned int offset = G_gpg_vstate.ux_pinentry[0]; - unsigned m_pinentry; char digit; - m_pinentry = 1; + UNUSED(button_mask_counter); switch (button_mask) { case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down @@ -579,6 +581,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { unsigned int oid_len; err = NULL; + UNUSED(value); memset(&attributes, 0, sizeof(attributes)); switch (G_gpg_vstate.ux_type) { case 2048: @@ -692,6 +695,7 @@ void ui_menu_seedmode_display(unsigned int value) { } void ui_menu_seed_action(unsigned int value) { + UNUSED(value); if (G_gpg_vstate.seed_mode) { G_gpg_vstate.seed_mode = 0; } else { @@ -945,6 +949,7 @@ void ui_menu_reset_display(unsigned int value) { } void ui_menu_reset_action(unsigned int value) { + UNUSED(value); unsigned char magic[4]; magic[0] = 0; magic[1] = 0; @@ -971,6 +976,7 @@ void ui_menu_reset_slot_display(unsigned int value) { } void ui_menu_reset_slot_action(unsigned int value) { + UNUSED(value); gpg_install_slot(G_gpg_vstate.kslot); ui_menu_main_display(0); } @@ -1110,6 +1116,7 @@ UX_STEP_CB(ux_menu_info_2_step, UX_FLOW(ux_flow_info, &ux_menu_info_1_step, &ux_menu_info_2_step); void ui_menu_info_display(unsigned int value) { + UNUSED(value); ux_flow_init(0, ux_flow_info, NULL); } From 91714aac94144f6f0ef026eaac7730244d69dcbc Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 17 Oct 2023 15:57:22 +0200 Subject: [PATCH 08/75] Fix linter output and formatting --- .clang-format | 125 +- .gitignore | 42 +- README.md | 44 +- .../gpgcard3.0-addon.rst | 40 +- doc/{developper => developer}/quick-test.txt | 32 +- doc/user/blue-app-openpgp-card.rst | 178 +- doc/user/blue-app-openpgp-card.template | 2 +- images/LICENSE | 1 - pytools/gpgcard/__init__.py | 7 +- pytools/gpgcard/backup.py | 6 +- pytools/gpgcard/gpgcard.py | 1 - pytools/gpgcard/gpgcli.py | 4 +- pytools/gpgcard/restore.py | 6 +- src/gpg_api.h | 44 +- src/gpg_challenge.c | 84 +- src/gpg_data.c | 1693 +++++++++-------- src/gpg_dispatch.c | 749 ++++---- src/gpg_gen.c | 462 ++--- src/gpg_init.c | 493 ++--- src/gpg_io.c | 460 ++--- src/gpg_main.c | 259 ++- src/gpg_mse.c | 75 +- src/gpg_pin.c | 403 ++-- src/gpg_pso.c | 625 +++--- src/gpg_ram.c | 8 +- src/gpg_select.c | 60 +- src/gpg_types.h | 511 ++--- src/gpg_ux_msg.c | 20 +- src/gpg_ux_msg.h | 36 +- src/gpg_ux_nanos.c | 1633 ++++++++-------- src/gpg_ux_nanos.h | 2 +- src/gpg_ux_nanox.c | 1322 +++++++------ src/gpg_vars.h | 6 +- 33 files changed, 4934 insertions(+), 4499 deletions(-) rename doc/{developper => developer}/gpgcard3.0-addon.rst (90%) rename doc/{developper => developer}/quick-test.txt (88%) diff --git a/.clang-format b/.clang-format index 95b750c..d65f1ce 100644 --- a/.clang-format +++ b/.clang-format @@ -1,119 +1,18 @@ --- -Language: Cpp -# BasedOnStyle: LLVM -AccessModifierOffset: -2 +BasedOnStyle: Google +IndentWidth: 4 +Language: Cpp +ColumnLimit: 100 +PointerAlignment: Right AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: true -AlignConsecutiveDeclarations: true -#AlignConsecutiveMacros: true -AlignEscapedNewlines: Right -AlignOperands: true -AlignTrailingComments: true -#AllowAllArgumentsOnNextLine: false -#AllowAllConstructorInitializersOnNextLine: false +AlignConsecutiveMacros: true AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: false +SortIncludes: false +SpaceAfterCStyleCast: true AllowShortCaseLabelsOnASingleLine: false +AllowAllArgumentsOnNextLine: false +AllowShortBlocksOnASingleLine: Never AllowShortFunctionsOnASingleLine: None -AllowShortIfStatementsOnASingleLine: false -#AllowShortLambdasOnASingleLine: None -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: false -BinPackArguments: true +BinPackArguments: false BinPackParameters: false -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: false - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - AfterExternBlock: false - BeforeCatch: false - BeforeElse: false - IndentBraces: false - SplitEmptyFunction: true - SplitEmptyRecord: true - SplitEmptyNamespace: true -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Custom -BreakBeforeInheritanceComma: false -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeColon -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: true -ColumnLimit: 120 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: false -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: true -DerivePointerAlignment: false -DisableFormat: false -ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: true -ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IncludeBlocks: Preserve -IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - - Regex: '^(<|"(gtest|gmock|isl|json)/)' - Priority: 3 - - Regex: '.*' - Priority: 1 -IncludeIsMainRegex: '(Test)?$' -IndentCaseLabels: false -#IndentPPDirectives: BeforeHash -IndentWidth: 2 -IndentWrappedFunctionNames: true -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLinesAtTheStartOfBlocks: false -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: All -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: true -PenaltyBreakAssignment: 2 -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 60 -PointerAlignment: Right -RawStringFormats: - - Delimiter: pb - Language: TextProto - BasedOnStyle: google -ReflowComments: true -SortIncludes: false -SortUsingDeclarations: false -SpaceAfterCStyleCast: false -SpaceAfterTemplateKeyword: true -SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: ControlStatements -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInContainerLiterals: false -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Cpp11 -TabWidth: 8 -UseTab: Never -... - +--- diff --git a/.gitignore b/.gitignore index 1b26681..6850c09 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,32 @@ -# Glyphs auto-generated -src/glyphs.* - -# Build files -dep -obj -release -bin -debug -build +# Compilation files of the application +build/ + +# Legacy compilation output +bin/ +debug/ + +# Temporary directory with snapshots taken during test runs +tests/snapshots-tmp/ + +# Unit tests and code coverage +unit-tests/build/ +unit-tests/coverage/ +unit-tests/coverage.info + +# Fuzzing +fuzzing/build/ + +# Python +*.pyc[cod] +*.egg +__pycache__/ +*.egg-info/ +.eggs/ +.python-version + +# Doxygen +doc/html +doc/latex + +# Virtual env for sideload (macOS and Windows) +ledger/ diff --git a/README.md b/README.md index 782962c..8b293cd 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,48 @@ -## GnuPG application: blue-app-gnupg +# GnuPG application GnuPG application for Nano S and Nano X -This application implements "The OpenPGP card" specification revision 3.0. This specification is available in *doc* directory and at https://g10code.com/p-card.html . +This application implements "The OpenPGP card" specification revision 3.3. +This specification is available in *doc* directory and at . The application supports: - - RSA with key up to 4096 bits - - ECDSA with secp256k1 - - EDDSA with Ed25519 curve - - ECDH with secp256k1 and curve25519 curves +- RSA with key up to 4096 bits +- ECDSA with secp256k1 +- EDDSA with Ed25519 curve +- ECDH with secp256k1 and curve25519 curves This release has known missing parts (see also Add-on) : - * Ledger Blue support - * Seed mode ON/OFF via apdu - +- Ledger Blue support +- Seed mode ON/OFF via apdu ## Installation and Usage -See the full doc at https://github.com/LedgerHQ/blue-app-openpgp-card/blob/master/doc/user/blue-app-openpgp-card.pdf - +See the full doc at ## Add-on The GnuPG application implements the following addon: - - serial modification - - on screen reset - - 3 independent key slots - - seeded key generation -Technical specification is available at https://github.com/LedgerHQ/blue-app-openpgp-card/blob/master/doc/developper/gpgcard3.0-addon.rst +- serial modification +- on screen reset +- 3 independent key slots +- seeded key generation + +Technical specification is available at - ### Key slot "The OpenPGP card" specification specifies: - - 3 asymmetric keys : Signature, Decryption, Authentication - - 1 symmetric key -The blue application allow you to store 3 different key sets, named slot. Each slot contains the above 4 keys. +- 3 asymmetric keys : Signature, Decryption, Authentication +- 1 symmetric key + +The application allows you to store 3 different key sets, named slot. Each slot contains the above 4 keys. You can choose the active slot on the main screen. When installed the default slot is "1". You can change it in settings. - ### seeded key generation A seeded mode is implemented in order to restore private keys on a new token. @@ -51,9 +50,8 @@ In this mode key material is generated from the global token seeded. Please consider SEED mode as experimental. -More details to come... +More details to come... ### On screen reset The application can be reset as if it was fresh installed. In settings, choose reset and confirm. - diff --git a/doc/developper/gpgcard3.0-addon.rst b/doc/developer/gpgcard3.0-addon.rst similarity index 90% rename from doc/developper/gpgcard3.0-addon.rst rename to doc/developer/gpgcard3.0-addon.rst index 9ffa82c..71f0ac3 100644 --- a/doc/developper/gpgcard3.0-addon.rst +++ b/doc/developer/gpgcard3.0-addon.rst @@ -35,7 +35,7 @@ OpenPGP Application manage four keys for cryptographic operation (PSO) plus two for secure channel. The first four keys are defined as follow: - - One asymmetric signature private key (RSA or EC), named 'sig'; + - One asymmetric signature private key (RSA or EC), named 'sig' - One asymmetric decryption private key (RSA or EC), named 'dec' - One asymmetric authentication private key (RSA or EC), named 'aut' - One symmetric decryption private key (AES), named 'sym0' @@ -49,7 +49,7 @@ It's never possible to retrieve private key from the card. This add-on specification propose a solution to derive those keys from the master seed managed by the Ledger Token. -This allow owner to restore a broken token without the needs to keep track of keys +This allows owner to restore a broken token without the needs to keep track of keys outside the card. Moreover this add-on specification propose to manage multiple set of the @@ -69,7 +69,7 @@ This add-on specification propose new type of random generation: Key Backup ~~~~~~~~~~ -A full keybackup mecanism is provided. +A full keybackup mechanism is provided. GPG-ledger @@ -79,7 +79,7 @@ Definitions ----------- - The application is named GPG-ledger - - A keys set is named 'keys slot' + - A keys set is named 'keys slot' How --- @@ -95,7 +95,7 @@ Deterministic key derivation maybe activated in: This activation remains effective until *set off* is selected or the application ends. -The key management remains the same if seed mode is on or off, i.e. key are stored in memory key containers. So their is no perfomance inpact when using seeded keys. +The key management remains the same if seed mode is on or off, i.e. key are stored in memory key containers. So there is no performance impact when using seeded keys. Seeded keys are generated as follow: @@ -133,7 +133,7 @@ Generate RSA key pair as usual. - n = p*q - d = inv(e) mod (p-1)(q-1) -*ECC key genration* : +*ECC key generation* : Generate one seed Sd in step2 with : - i = 1 @@ -188,16 +188,18 @@ For a given length *L* and seed *S*: Key Backup & Restore ~~~~~~~~~~~~~~~~~~~~ -In order to backup/restore private key the commands `put_data` and -`get_data` accept the tag `B6` (signature key), `B8`(encryption key), -`A4` (authentication). +In order to backup/restore private key the commands `put_data` and +`get_data` accept the tags: + - `B6` (signature key) + - `B8`(encryption key) + - `A4` (authentication). -put_data command accept the exact output of get_data. The get_data command +`put_data` command accept the exact output of `get_data`. The `get_data` command return both the public and private key. -For security and confidentiality private key is returned encryped in AES. -The key used is derived according to previously described AES key derivation -with name 'key '. +For security and confidentiality, private key is returned encrypted in AES. +The key used is derived according to previously described AES key derivation +with name 'key'. The data payload is formatted as follow: @@ -227,7 +229,7 @@ APDU Modification Key Slot management ~~~~~~~~~~~~~~~~~~~~ -Key slots are managed by data object 01F1 and 01F2 witch are +Key slots are managed by data object *01F1* and *01F2* witch are manageable by PUT/GET DATA command as for others DO and organized as follow. On application reset, the *01F2* content is set to *Default Slot* value @@ -255,8 +257,6 @@ Byte 3 is endoced as follow: | \- | \- | \- | \- | \- | \- | x | \- | selection by screen | +----+----+----+----+----+----+----+----+-------------------------+ - - *01F2:* @@ -302,7 +302,7 @@ P2 parameter of GENERATE ASYMMETRIC KEY PAIR is set to (hex value): Deterministic random number ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -P1 parameter of GET CHALLENGE is a bits field encoded as follow: +P1 parameter of GET CHALLENGE is a bit-field encoded as follow: +----+-----+----+----+----+----+----+----+-------------------------+ | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | Meaning | @@ -320,7 +320,7 @@ the length of random bytes to generate. Other minor add-on ------------------ -GnuPG use both fingerprints and serial number to identfy key on card. -So, the put data command is able to modify the AID file with '4F' tag. -In that case the data field shall be four bytes length and shall contain +GnuPG use both fingerprints and serial number to identify key on card. +So, the `put_data` command is able to modify the AID file with '4F' tag. +In that case the data field shall be four bytes length and shall contain the new serial number. '4F' is protected by PW3 (admin) PIN. diff --git a/doc/developper/quick-test.txt b/doc/developer/quick-test.txt similarity index 88% rename from doc/developper/quick-test.txt rename to doc/developer/quick-test.txt index 5558ce7..4a7f189 100644 --- a/doc/developper/quick-test.txt +++ b/doc/developer/quick-test.txt @@ -1,20 +1,30 @@ Step1: ... ----- -Jump into any temp dir +Jump into any temp dir Step2: install nanos ------ +----- Do a fresh install of gpg application 1.1.0 from google app manager Step3: setup conf ----- -Create a 'manual-test' directory - $ mkdir manual-test +Install needed tools if needed (some are optional) + $ sudo apt install scdaemon opensc-pkcs11 pcscd sssd libpam-sss gnutls-bin opensc pcsc-tools + +Check the tools are operational + $ p11-kit list-modules + $ p11tool --list-tokens + $ pkcs15-tool --list-certificates + +Check installation of CCID driver and more particularly its device config: + Edit the file /etc/libccid_Info.plist, and check the Ledger devices. + Please take care, the lists are ordered in the same way. Do not insert elements anywhere! + To add a new Ledger device, check file in doc/developer/user/blue-app-openpgp-card.rst Create a 'manual-test/gnupg' - $ mkdir manual-test/gnupg + $ mkdir -p manual-test/gnupg Create a 'manual-test/gnupg/scdaemon.conf' file with content: reader-port "Ledger Token [Nano S] (0001) 01 00" @@ -76,7 +86,7 @@ Launch gpg NanoS application and: Authentication key: [none] General key info..: [none] - gpg/card> + gpg/card> Then on nanos, goto settings->PIN mode, and select 'Host' Then on nanos, goto settings->PIN mode, and select 'Set as default' @@ -144,8 +154,8 @@ In 'manual-test' directory, ask key generation. Nota that during this phase PIN GnuPG needs to construct a user ID to identify your key. Real name: testkey - Email address: - Comment: + Email address: + Comment: You selected this USER-ID: "testkey" @@ -180,17 +190,17 @@ encrypt Force pin to asked - $ killall gpg-agent scdaemon + $ killall gpg-agent scdaemon decrypt - $ gpg2 --homedir `pwd`/gnupg foo.txt.gpg + $ gpg2 --homedir `pwd`/gnupg foo.txt.gpg gpg: WARNING: unsafe permissions on homedir '/home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg' gpg: encrypted with 2047-bit RSA key, ID 602FE5EB7BFA4B00, created 2017-10-03 "testkey" File 'foo.txt' exists. Overwrite? (y/N) y -Step7: pin on screen +Step7: pin on screen ------ Restart from Step1, but skip step4 diff --git a/doc/user/blue-app-openpgp-card.rst b/doc/user/blue-app-openpgp-card.rst index 7e350c9..b1ceb0b 100644 --- a/doc/user/blue-app-openpgp-card.rst +++ b/doc/user/blue-app-openpgp-card.rst @@ -3,7 +3,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -53,9 +53,9 @@ The application supports: - RSA with key up to 4096 bits - ECDSA with secp256k1, secp256r1, brainpool 256r1 and brainpool 256t1 curves - EDDSA with Ed25519 curve - - ECDH with secp256k1, secp256r1, brainpool 256r1, brainpool 256t1 and + - ECDH with secp256k1, secp256r1, brainpool 256r1, brainpool 256t1 and curve25519 curves - + This release has known missing parts (see also [GPGADD]) : - Ledger Blue support @@ -78,14 +78,14 @@ Use the "Ledger Manager" Chrome App. See https://www.ledgerwallet.com/apps/manag As the "OpenPGP card" application is not fully compliant with UI and documentation guidelines, the application is in developer section: click on "Show developers items" on the bottom right corner to see it. - - Launch the Ledger Manager. See `Ledger Manager `_ - and ` `_ + - Launch the Ledger Manager. See `Ledger Manager `_ + and ` `_ for details about installing and using the manager; - - Connect your Nano S or your Blue, enter your PIN, and stay on the + - Connect your Nano S or your Blue, enter your PIN, and stay on the dashboard; - Click on *show developer items* on the bottom right corner; - Click on the green bottom arrow icon near the Ledger *Open PGP* logo; - - Confirm the installation when required on your device by pressing the + - Confirm the installation when required on your device by pressing the right button above the check mark; - Quit the Ledger Manager @@ -118,7 +118,7 @@ If you are using an old version of CCID, you have to have to add the NanoS to /e - In ifdVendorID add the entry 0x2C97 - In ifdProductID add the entry 0x0001 - In ifdFriendlyName add the entry Ledger Token - + These 3 entries must be added at the end of each list. For the NanoX : @@ -138,7 +138,7 @@ MAC - In ifdVendorID add the entry 0x2C97 - In ifdProductID add the entry 0x0001 - In ifdFriendlyName add the entry Ledger Token - + This 3 entries must be added at the end of each list. 3. [Enable SIP](https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html) @@ -191,13 +191,13 @@ The full menu layout is : | Confirm only #+ | Trust | Reset -| About +| About | \ *OpenPGP Card* | \ *(c) Ledger SAS* | \ *Spec 3.0* | \ *App 1.0.1* -| Emphasis entries are not selectable and just provide information. +| Emphasis entries are not selectable and just provide information. | A "**#**" after the entry label means default value on reset. | A "**+**" after the entry label means current value. @@ -224,13 +224,13 @@ Select Slot This menu is only available on ``XL`` version A Slot is a set of -three key pairs *Signature, Decryption, Authentication* as defined by gnupg +three key pairs *Signature, Decryption, Authentication* as defined by gnupg specification. Usually a GPG card application only manages a single set. Ledger version enhances -this and allows you to manage three key sets. +this and allows you to manage three key sets. -The *Select Slot* menu allows you to select the slot you want to play with, and +The *Select Slot* menu allows you to select the slot you want to play with, and to set the default slot when the application start. To change the current slot, display the slot you want and select it @@ -245,8 +245,8 @@ Settings Key Template ~~~~~~~~~~~~ -A key template is defined by the OpenGPG card application specification. It -describes the key to be generated with the ``generate`` command in +A key template is defined by the OpenGPG card application specification. It +describes the key to be generated with the ``generate`` command in ``gpg --card-edit`` To set up a new ECC template you have three choices: the ``gpg --edit-card`` @@ -303,10 +303,10 @@ To show the current template use the ``gpg --card-status`` command. **gpg-connect-agent** -This method suppose you have correctly configured your GnuPG tool. +This method suppose you have correctly configured your GnuPG tool. See the dedicated section for that. -In a terminal launch : +In a terminal launch : | ``gpg-connect-agent "SCD SETATTR KEY-ATTR --force 1 " /bye`` | ``gpg-connect-agent "SCD SETATTR KEY-ATTR --force 2 18 " /bye`` @@ -327,7 +327,7 @@ To show the current template use the ``gpg --card-status`` command. **NanoS menu** First under *Choose Key* menu, select the one of three keys for which you want to modify -the template. Then under "Choose Type", select the desired key template. +the template. Then under "Choose Type", select the desired key template. Finally select "Set Template" entry to set it. To show the current template use the ``gpg --card-status`` command. @@ -349,13 +349,13 @@ When the application starts, the seeded mode is always set to *OFF* PIN mode ~~~~~~~~ -Some operations require the user to enter his PIN code. +Some operations require the user to enter his PIN code. The default PIN values are: - user: ``123456`` - admin: ``12345678`` -The PIN entry can be done using four methods, named +The PIN entry can be done using four methods, named "*Host*", "*On Screen*", "*Confirm only*", "*Trust*". After each mode a *+* or *#* symbol may appear to tell which mode is the current one @@ -363,14 +363,14 @@ and which one is the default when the application starts. The default mode can be changed by first selecting the desired mode and then selecting the *Set default" menu. Note that *Trust* can not be set as default mode. -Before you can change the PIN mode, you need to verify the PIN on the client. To do this, +Before you can change the PIN mode, you need to verify the PIN on the client. To do this, run ``gpg --card-edit``, then ``admin`` and finally ``verify`` on you PC. You will then be asked to enter the current PIN. After doing so, you can change the PIN mode on your device. -Note that *On Screen*", "*Confirm only*" and "*Trust*" may not work if the -client application does not support it. In that case the "*Host*" should be +Note that *On Screen*", "*Confirm only*" and "*Trust*" may not work if the +client application does not support it. In that case the "*Host*" should be automatically used by the client in a transparent way. **Host** @@ -393,36 +393,36 @@ letter .. image:: pin_validate.png :align: middle - + If you want to change the previous digit select the **'C'** (Cancel) letter. .. image:: pin_cancel.png :align: middle - + Finally if you want to abort the PIN entry, select the **'A'** (Abort) letter. .. image:: pin_abort.png :align: middle - + **Confirm only** -The user is requested, on the NanoS or Blue screen, to confirm +The user is requested, on the NanoS or Blue screen, to confirm the PIN validation. The PIN value is not required, the user just has -to push the *REJECT* or *OK* button on the device. +to push the *REJECT* or *OK* button on the device. -This is the default mode after application installation. +This is the default mode after application installation. .. image:: pin_confirm.png :align: middle - + **Trust** Act as if the PIN is always validated. This is a dangerous mode which should only be -used in a highly secure environment. +used in a highly secure environment. UIF mode ~~~~~~~~ @@ -438,9 +438,9 @@ When activated, a '+' symbol appears after the operation name. Reset ~~~~~ -Selecting the menu will erase all OpenPGP Card Application data and will +Selecting the menu will erase all OpenPGP Card Application data and will reset the application in its '*just installed*' state. - + Nano S OpenPGP Card application usage @@ -460,8 +460,8 @@ keyring before starting, except if your are sure about what you do. Configuration ~~~~~~~~~~~~~ -In order to use a Ledger device with gpg it is needed to explicitly setup -the reader and the delegated PIN support. +In order to use a Ledger device with gpg it is needed to explicitly setup +the reader and the delegated PIN support. Edit the file ~/.gnupg/scdaemon.conf and add the following lines: | ``reader-port "Ledger Token [Nano S] (0001) 01 00"`` @@ -519,7 +519,7 @@ installation it should look like this: | ``Authentication key: [none]`` | ``General key info..: [none]`` -You can set the user information with the ``gpg --card-edit`` command and +You can set the user information with the ``gpg --card-edit`` command and ``name``, ``url``, ``login``, ``lang``, ``sex`` subcommands. For example if you want to set up your name: @@ -558,9 +558,9 @@ want to set up your name: Notes: - + * Modifying the user information will prompt you to enter ``User PIN``. - * Setting user information is not required for using gpg client. + * Setting user information is not required for using gpg client. Generate new key pair @@ -570,7 +570,7 @@ For generating a new key pair follow those steps: - Select the desired NanoS OpenPGP Card application slot - Setup the desired key template for this slot - - Generate the new key set + - Generate the new key set **Step 1** @@ -586,23 +586,23 @@ Starting from main menu: **Step 2** -The default template for each three keys (*signature*, *decryption*, +The default template for each three keys (*signature*, *decryption*, *authentication*) is ``RSA 2048``. If you want another kind of key you have to set the template before generating keys. -!WARNING!: changing the current template of a key automatically erases +!WARNING!: changing the current template of a key automatically erases the associated key. Starting from main menu: - Select *Settings* menu - - Select *Key template* menu + - Select *Key template* menu - Select *Choose Key...* menu (a) - Scroll and select which key you want to set the new template for - Select *Choose type...* menu - Scroll and select among the supported key types and sizes - Select *Set template* - - Repeat this process from (a) if you want to modify another key + - Repeat this process from (a) if you want to modify another key template - Select *Back* to return to main menu. @@ -610,7 +610,7 @@ Starting from main menu: **Step 3** Once the template has been set, it's possible to generate new key pairs -with ``gpg``. +with ``gpg``. !WARNING!: gpg will generate the three key pairs and will overwrite any key already present in the selected slot. @@ -650,18 +650,18 @@ the three key templates are ``NIST P256``. **Request new key generation without backup** | ``gpg/card>`` *generate* - | ``Make off-card backup of encryption key? (Y/n)`` **n** + | ``Make off-card backup of encryption key? (Y/n)`` **n** **Unlock user level ``81``** - | ``Please unlock the card`` + | ``Please unlock the card`` | ```` | ``Number: 2C97 AFB1142B`` | ``Holder: Cedric Mesnil`` | ```` | ``Use the reader's pinpad for input.`` | `` OK`` - | ``Press any key to continue. `` + | ``Press any key to continue. `` **Set key validity** @@ -676,12 +676,12 @@ the three key templates are ``NIST P256``. | ``Is this correct? (y/N)``*y* **Set user ID** - + | ``GnuPG needs to construct a user ID to identify your key.`` | ```` | ``Real name: Cedric Mesnil`` | ``Email address: cedric@ledger.fr`` - | ``Comment: `` + | ``Comment: `` | ``You selected this USER-ID:`` | `` "Cedric Mesnil "`` | ```` @@ -692,7 +692,7 @@ the three key templates are ``NIST P256``. **Unlock admin level ``83``** - | ``Please enter the Admin PIN `` + | ``Please enter the Admin PIN `` | ```` | ``Number: 2C97 AFB1142B`` | ``Holder: Cedric Mesnil`` @@ -748,9 +748,9 @@ the three key templates are ``NIST P256``. | ``General key info..: pub nistp256/F8A4A3533CBFCAA5 2017-08-22 cedric mesnilCedric Mesnil `` | ``sec> nistp256/F8A4A3533CBFCAA5 created: 2017-08-22 expires: never `` | `` card-no: 2C97 AFB1142B`` - | ``ssb> nistp256/2345A677CE9D8223 created: 2017-08-22 expires: never `` + | ``ssb> nistp256/2345A677CE9D8223 created: 2017-08-22 expires: never `` | `` card-no: 2C97 AFB1142B`` - | ``ssb> nistp256/E13728E913B877E1 created: 2017-08-22 expires: never `` + | ``ssb> nistp256/E13728E913B877E1 created: 2017-08-22 expires: never `` | `` card-no: 2C97 AFB1142B`` **Say goodbye @@ -789,7 +789,7 @@ The key to transfer here is a RSA 4096 bits key: In case of transfer it is not necessary to previously set the template. It will be automatically changed. -When generating a new key, the three keys (*signature*, *decryption*, +When generating a new key, the three keys (*signature*, *decryption*, *authentication*)) are automatically generated. When transferring existing ones, it is possible to choose which one will be moved. @@ -804,7 +804,7 @@ moved. | ``Secret key is available.`` | ```` | ``sec rsa4096/9B93CB47F954FB53`` - | `` created: 2017-04-26 expires: never usage: SC `` + | `` created: 2017-04-26 expires: never usage: SC `` | `` trust: ultimate validity: ultimate`` | ``ssb rsa4096/49EE12B0F5CBDF26`` | `` created: 2017-04-26 expires: never usage: E `` @@ -821,7 +821,7 @@ moved. | `` created: 2017-04-26 expires: never usage: E `` | ``[ultimate] (1). RSA 4096`` -**Move** +**Move** | ``gpg> `` **keytocard** | ``Please select where to store the key:`` @@ -890,8 +890,8 @@ Decrypting and Signing Decrypting and Signing will act exactly the same way as if keys were not on -the card. The only difference is ``gpg`` will request the PIN code instead -of the passphrase. +the card. The only difference is ``gpg`` will request the PIN code instead +of the passphrase. SSH @@ -902,7 +902,7 @@ Overview ~~~~~~~~ In order to use gpg for SSH authentication, an "authentication" is needed. -There are two solutions for that, either generate one on the device +There are two solutions for that, either generate one on the device or add an authentication sub-key to your existing master gpg key. Once done, it is necessary to configure ssh to point to the right key and @@ -914,7 +914,7 @@ Generate new key on device The important thing to keep in mind here is there is no way to tell gpg to only generate the authentication key. So generating this key will also -generate the two other under a new identity and will erase existing keys +generate the two other under a new identity and will erase existing keys on the current slot on the device. Nevertheless, if you want to use a different identity for ssh login, you can use @@ -1021,7 +1021,7 @@ Add sub-key | ``generator a better chance to gain enough entropy.`` | ``sec rsa2048/831415DA94A9A15C`` - | `` created: 2017-08-25 expires: never usage: SC `` + | `` created: 2017-08-25 expires: never usage: SC `` | `` trust: ultimate validity: ultimate`` | ``ssb rsa2048/8E95F2999EEC38C4`` | `` created: 2017-08-25 expires: never usage: E `` @@ -1053,7 +1053,7 @@ Add sub-key | ``ssb rsa2048/8E95F2999EEC38C4`` | `` created: 2017-08-25 expires: never usage: E `` | ``ssb* rsa2048/C20B90E12F68F035`` - | `` created: 2017-08-28 expires: never usage: A `` + | `` created: 2017-08-28 expires: never usage: A `` | ``[ultimate] (1). cedric`` @@ -1074,7 +1074,7 @@ to your .gpg-agent.conf: ``enable-ssh-support`` -Starting with gpg2 it necessary to add some configuration options to make the *pinentry* +Starting with gpg2 it necessary to add some configuration options to make the *pinentry* work properly. Add the following line to ~/.bashrc file: | ``export SSH_AUTH_SOCK=`gpgconf --list-dirs agent-ssh-socket` `` @@ -1093,7 +1093,7 @@ And add the following line to your ~/.gnupg/gpg.conf: ``pinentry-mode loopback`` -Then export your authentication public key. First execute the +Then export your authentication public key. First execute the ``gpg -k --with-subkey-fingerprint --with-keygrip cedric`` command. @@ -1113,7 +1113,7 @@ to .gnupg/sshcontrol file: | ``$ echo 6D60CB58D9D66EE09804E7FE460E865A91F5E41A > .gnupg/sshcontrol`` -Export your authentication key, identifier by its fingerprint, in a SSH compliant format. +Export your authentication key, identifier by its fingerprint, in a SSH compliant format. | ``$ gpg --export-ssh-key 2D0E4FFFAA448AA2770C7F02C20B90E12F68F035`` | ``ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCIARKh0IZTHld+I6oA8nwrgnCUQE8f`` @@ -1122,8 +1122,8 @@ Export your authentication key, identifier by its fingerprint, in a SSH complian | ``3uEBsaY5PR1Tuko/GwywLyZu0SwfEobl/RPjL7P8rUSc7DTHpQMw8fjJFb4BNvIHAlaVC`` | ``5FwZwkuogygaJdN/44MayHFmOZmzx9CAgYgLpTzen35+CcyhlqCqi+HjNlnHL2DDWd4iR`` | ``d3Y6pY8LjS3xQkECc3Bhedptp17D+H9AVJt openpgp:0x2F68F035`` - -Finally copy the above export (``ssh-rsa AAAAB...Jt openpgp:0x2F68F035``) into the + +Finally copy the above export (``ssh-rsa AAAAB...Jt openpgp:0x2F68F035``) into the ~/.ssh/authorized_keys file on your remote server. @@ -1143,11 +1143,11 @@ Backup and Restore Introduction ~~~~~~~~~~~~ -"The OpenPGP card" specification does not provide any mechanism for backuping you key. +"The OpenPGP card" specification does not provide any mechanism for backuping you key. Thus if you generate your keys on device and loose it, you definitively loose you private key. In order to avoid such extreme panic situation, a backup/restore mechanism is provided. -At any time you can backup a snapshot of your device data, including your private keys. +At any time you can backup a snapshot of your device data, including your private keys. All public data are retrieve in clear form. The private key are stored encrypted with a key derived from your seed, i.e. from your 24 BIP words. @@ -1161,13 +1161,13 @@ The backup/restore tool is located in ``pytools`` directory: | ``optional arguments:`` | `` -h, --help show this help message and exit`` | `` --adm-pin PIN Administrative PIN, if pinpad not used`` - | `` --backup Perfom a full backup except the key`` - | `` --backup-keys Perfom keys encrypted backup`` + | `` --backup Perform a full backup except the key`` + | `` --backup-keys Perform keys encrypted backup`` | `` --file FILE basckup/restore file`` | `` --pinpad PIN validation will be deledated to pinpad`` | `` --reader READER PCSC reader`` | `` --reset Reset the application. All data are erased`` - | `` --restore Perfom a full restore except the key`` + | `` --restore Perform a full restore except the key`` | `` --set-serial SERIAL set the four serial bytes`` | `` --set-fp SIG:DEC:AUT sig:dec:aut fingerprints, 20 bytes each in hexa`` | `` --seed-key Regenerate all keys, based on seed mode`` @@ -1175,20 +1175,20 @@ The backup/restore tool is located in ``pytools`` directory: | `` --user-pin PIN User PIN, if pinpad not used`` -First you must either provide your pin codes or use the pinpad (onscreen pin). This is +First you must either provide your pin codes or use the pinpad (onscreen pin). This is done by giving either ``--adm-pin`` AND ``--user-pin`` or ``--pinpad``. Note that using ``--xx-pin`` may compromise your pin codes. Then you must precise if you want a backup or a restore with ``--backup`` or ``--restore`` By default backup is performed without saving keys, assuming you use the seed mode. -If you also want to backup keys you have to pass the ``--backup-keys`` option. +If you also want to backup keys you have to pass the ``--backup-keys`` option. In a general manner it is better to also save your keys with ``--backup-keys`` option. Note that backup and restore works on current slot, so you have to perform a backup per slot even if some data are shared. You can precise the slot/backup to restore with ``--slot`` -If you encounter an error when performing the backup/restore, reload your scdaemon with +If you encounter an error when performing the backup/restore, reload your scdaemon with ``gpgconf --reload scdaemon`` @@ -1198,7 +1198,7 @@ Backup and Restore example First you must have the path of the `ledger-app-openpgp-card/pytools` in your PYTHONPATH. full backup command: - + | ``python3 -m gpgcard.gpgcli --backup --pinpad --backup-keys --file my_bck_file_name.pickle`` backup command without private keys: @@ -1207,20 +1207,20 @@ backup command without private keys: full restore command: - + | ``python3 -m gpgcard.gpgcli --restore --pinpad --file my_bck_file_name.pickle`` full restore command with seed key generation: - + | ``python3 -m gpgcard.gpgcli --restore --pinpad --seed-key --file my_bck_file_name.pickle`` Restore without backup ~~~~~~~~~~~~~~~~~~~~~~ -If you have seeded key but do not have done a backup and still have your keyring, there is a -solution to restore at least the key and their related information: serial and fingerprints. +If you have seeded key but do not have done a backup and still have your keyring, there is a +solution to restore at least the key and their related information: serial and fingerprints. All other information such as name, url, ... shall be set manually with ``gpg --card-edit``. @@ -1251,7 +1251,7 @@ Run the command ``gpg --edit-key John``, replace John by your own key id. | | ``gpg> `` | - + The ``usage`` field tells you each key purpose: ``SC`` or ``S`` for signature, ``A`` for authentication, ``E`` for encryption. @@ -1261,7 +1261,7 @@ You should have three or less keys with the same serial. These are the keys we w For each key you also have the key template (rsa2048, rsa3072, rsa4096, ed2559, cv25519) followed by the short fingerprint, e.g. ``ed25519/8451AAF7D43D1095`` -Note the serial and the three key template names: ``FD6C11BE`` , ``ed25519:cv25519:ed25519``. +Note the serial and the three key template names: ``FD6C11BE`` , ``ed25519:cv25519:ed25519``. Take care of the order: ``SC:E:A``. Now type the ``quit`` command. @@ -1281,8 +1281,8 @@ To get the full fingerprint of each key, run (yes twice ``--fingerprint``): | ``sub cv25519 2018-10-10 [E]`` | `` DF15 7BD4 AC3B D1EE 9910 99C8 0953 D871 FC4B 9EA4`` -Assemble the three full fingerprint, corresponding to the one identified previously, -in the the following order ``SC:E:A`` : +Assemble the three full fingerprint, corresponding to the one identified previously, +in the the following order ``SC:E:A`` : ``2C688345BDDA0EDFB24DB4FB8451AAF7D43D1095:DF157BD4AC3BD1EE991099C80953D871FC4B9EA4: CEC59AE6A76614BC3C6D37D9C5A8FB078520ABBB``. @@ -1294,7 +1294,7 @@ If you only have one key to restore you can omit the others, for example to only **Step 1: restore** -Plug you Nano S and run the OpenPGP application. +Plug you Nano S and run the OpenPGP application. Finally run the following command : @@ -1323,19 +1323,19 @@ logout/login **Q:** It does not work at all, HELP ME!!! -**R** Please keep calm and do not cry. +**R** Please keep calm and do not cry. Add the following option to ~/.gnupg/gpg-agent.conf - + | ``debug-level guru`` | ``log-file /tmp/gpgagent.log`` Add the following option to ~/.gnupg/scdaemon.conf - + | ``log-file /tmp/scd.log`` | ``debug-level guru`` | ``debug-all`` -Make a nice issue report under github providing log and and command line you run. +Make a nice issue report under github providing log and and command line you run. **!*WARNING*!** : this may reveal confidential information such as key values. Do your log with a test key. diff --git a/doc/user/blue-app-openpgp-card.template b/doc/user/blue-app-openpgp-card.template index 6e2e0f8..5a5138d 100644 --- a/doc/user/blue-app-openpgp-card.template +++ b/doc/user/blue-app-openpgp-card.template @@ -208,7 +208,7 @@ $endfor$ {\scshape\LARGE OpenPGP Card Application \par} {\scshape \LARGE User Guide \par} \vspace{1cm} - + % {\scshape\Large Ledger SAS \par} \vspace{1cm} \begin{figure}[h] diff --git a/images/LICENSE b/images/LICENSE index ef84e83..9d28341 100644 --- a/images/LICENSE +++ b/images/LICENSE @@ -8,4 +8,3 @@ Thanks to gnupg.org for the original images. Others under this directory are covered by Apache License Version 2.0, - diff --git a/pytools/gpgcard/__init__.py b/pytools/gpgcard/__init__.py index 48b1f69..45940a0 100644 --- a/pytools/gpgcard/__init__.py +++ b/pytools/gpgcard/__init__.py @@ -1,15 +1,14 @@ # Copyright 2017 Cedric Mesnil , Ledger SAS -# +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # - diff --git a/pytools/gpgcard/backup.py b/pytools/gpgcard/backup.py index 4abcf4e..2ee62d0 100644 --- a/pytools/gpgcard/backup.py +++ b/pytools/gpgcard/backup.py @@ -1,11 +1,11 @@ # Copyright 2017 Cedric Mesnil , Ledger SAS -# +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. diff --git a/pytools/gpgcard/gpgcard.py b/pytools/gpgcard/gpgcard.py index 59dd999..d6d63db 100644 --- a/pytools/gpgcard/gpgcard.py +++ b/pytools/gpgcard/gpgcard.py @@ -847,4 +847,3 @@ def asymmetric_key(self, op, key) : 'e': tags[0x82], 'd': tags[0x98], } - diff --git a/pytools/gpgcard/gpgcli.py b/pytools/gpgcard/gpgcli.py index 29465bb..cb94d08 100644 --- a/pytools/gpgcard/gpgcli.py +++ b/pytools/gpgcard/gpgcli.py @@ -80,7 +80,7 @@ def error(msg) : gpgcard.connect(args.reader) print("OK") - print("Verfify PINs...", end='', flush=True) + print("Verify PINs...", end='', flush=True) if args.pinpad: if not gpgcard.verify_pin(0x82, "", True) or not gpgcard.verify_pin(0x83, "", True): error("PIN not verified") @@ -122,7 +122,7 @@ def error(msg) : 'rsa3072' : "010C00002001", 'rsa4096' : "011000002001", 'nistp256' : "132A8648CE3D030107", - 'ed255519' : "162B06010401DA470F01", + 'ed25519' : "162B06010401DA470F01", 'cv25519' : "122B060104019755010501" } sig,dec,aut = args.set_templates.split(":") diff --git a/pytools/gpgcard/restore.py b/pytools/gpgcard/restore.py index d75b565..382c4a7 100644 --- a/pytools/gpgcard/restore.py +++ b/pytools/gpgcard/restore.py @@ -1,11 +1,11 @@ # Copyright 2017 Cedric Mesnil , Ledger SAS -# +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. diff --git a/src/gpg_api.h b/src/gpg_api.h index 2622005..27852d5 100644 --- a/src/gpg_api.h +++ b/src/gpg_api.h @@ -18,17 +18,17 @@ void USBD_CCID_activate_pinpad(int enabled); -unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len); +unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len); unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len); -unsigned int gpg_curve2domainlen(unsigned int cv); +unsigned int gpg_curve2domainlen(unsigned int cv); void gpg_init(void); void gpg_init_ux(void); void gpg_install(unsigned char app_state); void gpg_install_slot(gpg_key_slot_t *slot); -int gpg_dispatch(void); +int gpg_dispatch(void); -int gpg_apdu_select_data(unsigned int ref, int reccord); +int gpg_apdu_select_data(unsigned int ref, int record); int gpg_apdu_get_data(unsigned int ref); int gpg_apdu_get_next_data(unsigned int ref); int gpg_apdu_put_data(unsigned int ref); @@ -38,13 +38,13 @@ int gpg_apdu_put_key_data(unsigned int ref); void gpg_pso_derive_slot_seed(int slot, unsigned char *seed); void gpg_pso_derive_key_seed(unsigned char *Sn, unsigned char *key_name, - unsigned int idx, + unsigned int idx, unsigned char *Ski, - unsigned int Ski_len); -int gpg_apdu_pso(void); -int gpg_apdu_internal_authenticate(void); -int gpg_apdu_gen(void); -int gpg_apdu_get_challenge(void); + unsigned int Ski_len); +int gpg_apdu_pso(void); +int gpg_apdu_internal_authenticate(void); +int gpg_apdu_gen(void); +int gpg_apdu_get_challenge(void); int gpg_apdu_select(void); @@ -53,11 +53,11 @@ int gpg_apdu_change_ref_data(void); int gpg_apdu_reset_retry_counter(void); gpg_pin_t *gpg_pin_get_pin(int id); -int gpg_pin_is_blocked(gpg_pin_t *pin); -int gpg_pin_is_verified(int pinID); -int gpg_pin_set_verified(int pinID, int verified); -int gpg_pin_check(gpg_pin_t *pin, int pinID, unsigned char *pin_val, unsigned int pin_len); -void gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len); +int gpg_pin_is_blocked(gpg_pin_t *pin); +int gpg_pin_is_verified(int pinID); +int gpg_pin_set_verified(int pinID, int verified); +int gpg_pin_check(gpg_pin_t *pin, int pinID, unsigned char *pin_val, unsigned int pin_len); +void gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len); int gpg_mse_reset(); int gpg_apdu_mse(); @@ -81,16 +81,16 @@ void gpg_io_insert_t(unsigned int T); void gpg_io_insert_tl(unsigned int T, unsigned int L); void gpg_io_insert_tlv(unsigned int T, unsigned int L, unsigned char const *V); -void gpg_io_fetch_buffer(unsigned char *buffer, unsigned int len); +void gpg_io_fetch_buffer(unsigned char *buffer, unsigned int len); unsigned int gpg_io_fetch_u32(void); unsigned int gpg_io_fetch_u24(void); unsigned int gpg_io_fetch_u16(void); unsigned int gpg_io_fetch_u8(void); -int gpg_io_fetch_t(unsigned int *T); -int gpg_io_fetch_l(unsigned int *L); -int gpg_io_fetch_tl(unsigned int *T, unsigned int *L); -int gpg_io_fetch_nv(unsigned char *buffer, int len); -int gpg_io_fetch(unsigned char *buffer, int len); +int gpg_io_fetch_t(unsigned int *T); +int gpg_io_fetch_l(unsigned int *L); +int gpg_io_fetch_tl(unsigned int *T, unsigned int *L); +int gpg_io_fetch_nv(unsigned char *buffer, int len); +int gpg_io_fetch(unsigned char *buffer, int len); int gpg_io_do(unsigned int io_flags); @@ -108,7 +108,7 @@ void io_usb_ccid_set_card_inserted(unsigned int inserted); #else -#define gpg_nvm_write nvm_write +#define gpg_nvm_write nvm_write #define gpg_io_exchange io_exchange #endif diff --git a/src/gpg_challenge.c b/src/gpg_challenge.c index bb53e2b..b6f61ca 100644 --- a/src/gpg_challenge.c +++ b/src/gpg_challenge.c @@ -20,48 +20,56 @@ #include "gpg_vars.h" int gpg_apdu_get_challenge() { - unsigned int olen, hlen; + unsigned int olen, hlen; - if ((G_gpg_vstate.io_p1 & 0x80) == 0x80) { - olen = G_gpg_vstate.io_p2; - } else { - olen = G_gpg_vstate.io_le; - } - if (olen == 0 || olen > GPG_EXT_CHALLENGE_LENTH) { - THROW(SW_WRONG_LENGTH); - return SW_WRONG_LENGTH; - } + if ((G_gpg_vstate.io_p1 & 0x80) == 0x80) { + olen = G_gpg_vstate.io_p2; + } else { + olen = G_gpg_vstate.io_le; + } + if (olen == 0 || olen > GPG_EXT_CHALLENGE_LENTH) { + THROW(SW_WRONG_LENGTH); + return SW_WRONG_LENGTH; + } - if ((G_gpg_vstate.io_p1 & 0x82) == 0x82) { - unsigned int path[2]; - unsigned char chain[32]; - unsigned char Sr[32]; + if ((G_gpg_vstate.io_p1 & 0x82) == 0x82) { + unsigned int path[2]; + unsigned char chain[32]; + unsigned char Sr[32]; - memset(chain, 0, 32); - path[0] = 0x80475047; - path[1] = 0x0F0F0F0F; - os_perso_derive_node_bip32(CX_CURVE_SECP256K1, path, 2, Sr, chain); - chain[0] = 'r'; - chain[1] = 'n'; - chain[2] = 'd'; + memset(chain, 0, 32); + path[0] = 0x80475047; + path[1] = 0x0F0F0F0F; + os_perso_derive_node_bip32(CX_CURVE_SECP256K1, path, 2, Sr, chain); + chain[0] = 'r'; + chain[1] = 'n'; + chain[2] = 'd'; - cx_sha256_init(&G_gpg_vstate.work.md.sha256); - cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha256, 0, Sr, 32, NULL, 0); - cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha256, 0, chain, 3, NULL, 0); - hlen = cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha256, CX_LAST, G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length, G_gpg_vstate.work.io_buffer, 32); + cx_sha256_init(&G_gpg_vstate.work.md.sha256); + cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, Sr, 32, NULL, 0); + cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, chain, 3, NULL, 0); + hlen = cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, + CX_LAST, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length, + G_gpg_vstate.work.io_buffer, + 32); - cx_sha3_xof_init(&G_gpg_vstate.work.md.sha3, 256, olen); - cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha3, CX_LAST, G_gpg_vstate.work.io_buffer, hlen, - G_gpg_vstate.work.io_buffer, olen); - } else { - cx_rng(G_gpg_vstate.work.io_buffer, olen); - } + cx_sha3_xof_init(&G_gpg_vstate.work.md.sha3, 256, olen); + cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha3, + CX_LAST, + G_gpg_vstate.work.io_buffer, + hlen, + G_gpg_vstate.work.io_buffer, + olen); + } else { + cx_rng(G_gpg_vstate.work.io_buffer, olen); + } - if ((G_gpg_vstate.io_p1 & 0x81) == 0x81) { - cx_math_next_prime(G_gpg_vstate.work.io_buffer, olen); - } - gpg_io_discard(0); - gpg_io_inserted(olen); - return SW_OK; + if ((G_gpg_vstate.io_p1 & 0x81) == 0x81) { + cx_math_next_prime(G_gpg_vstate.work.io_buffer, olen); + } + gpg_io_discard(0); + gpg_io_inserted(olen); + return SW_OK; } diff --git a/src/gpg_data.c b/src/gpg_data.c index 2409244..14bbd5b 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -19,841 +19,920 @@ #include "gpg_api.h" #include "gpg_vars.h" -int gpg_apdu_select_data(unsigned int ref, int reccord) { - G_gpg_vstate.DO_current = ref; - G_gpg_vstate.DO_reccord = reccord; - G_gpg_vstate.DO_offset = 0; - return SW_OK; -} - -int gpg_apdu_get_data(unsigned int ref) { - int sw; - - if (G_gpg_vstate.DO_current != ref) { +int gpg_apdu_select_data(unsigned int ref, int record) { G_gpg_vstate.DO_current = ref; - G_gpg_vstate.DO_reccord = 0; - G_gpg_vstate.DO_offset = 0; - } - sw = SW_OK; - - gpg_io_discard(1); - switch (ref) { - /* ----------------- Optional DO for private use ----------------- */ - case 0x0101: - gpg_io_insert((const unsigned char *)N_gpg_pstate->private_DO1.value, N_gpg_pstate->private_DO1.length); - break; - case 0x0102: - gpg_io_insert((const unsigned char *)N_gpg_pstate->private_DO2.value, N_gpg_pstate->private_DO2.length); - break; - case 0x0103: - gpg_io_insert((const unsigned char *)N_gpg_pstate->private_DO3.value, N_gpg_pstate->private_DO3.length); - break; - case 0x0104: - gpg_io_insert((const unsigned char *)N_gpg_pstate->private_DO4.value, N_gpg_pstate->private_DO4.length); - break; - - /* ----------------- Config key slot ----------------- */ - case 0x01F0: - gpg_io_insert((const unsigned char *)N_gpg_pstate->config_slot, 3); - gpg_io_insert_u8(G_gpg_vstate.slot); - break; - case 0x01F1: - gpg_io_insert((const unsigned char *)N_gpg_pstate->config_slot, 3); - break; - case 0x01F2: - gpg_io_insert_u8(G_gpg_vstate.slot); - break; - /* ----------------- Config RSA exponent ----------------- */ - case 0x01F8: - gpg_io_insert((const unsigned char *)N_gpg_pstate->default_RSA_exponent, 4); - break; - - /* ----------------- Application ----------------- */ - /* Full Application identifier */ - case 0x004F: - gpg_io_insert((const unsigned char *)N_gpg_pstate->AID, 10); - gpg_io_insert(G_gpg_vstate.kslot->serial, 4); - gpg_io_insert_u16(0x0000); - break; - /* Historical bytes, */ - case 0x5F52: - gpg_io_insert((const unsigned char *)N_gpg_pstate->histo, 15); - break; - /* Extended length information */ - case 0x7F66: - gpg_io_insert(C_ext_length, sizeof(C_ext_length)); - break; - - /* ----------------- User -----------------*/ - /* Login data */ - case 0x005E: - gpg_io_insert((const unsigned char *)N_gpg_pstate->login.value, N_gpg_pstate->login.length); - break; - /* Uniform resource locator */ - case 0x5F50: - gpg_io_insert((const unsigned char *)N_gpg_pstate->url.value, N_gpg_pstate->url.length); - break; - /* Name, Language, Sex */ - case 0x65: - gpg_io_insert_tlv(0x5B, N_gpg_pstate->name.length, (const unsigned char *)N_gpg_pstate->name.value); - gpg_io_insert_tlv(0x5F2D, N_gpg_pstate->lang.length, (const unsigned char *)N_gpg_pstate->lang.value); - gpg_io_insert_tlv(0x5F35, 1, (const unsigned char *)N_gpg_pstate->sex); - break; - - /* ----------------- aid, histo, ext_length, ... ----------------- */ - case 0x6E: - gpg_io_insert_tlv(0x4F, 16, (const unsigned char *)N_gpg_pstate->AID); - memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset - 6, G_gpg_vstate.kslot->serial, 4); - gpg_io_insert_tlv(0x5F52, 15, (const unsigned char *)N_gpg_pstate->histo); - gpg_io_insert_tlv(0x7F66, sizeof(C_ext_length), C_ext_length); - - gpg_io_mark(); - - gpg_io_insert_tlv(0xC0, sizeof(C_ext_capabilities), C_ext_capabilities); - gpg_io_insert_tlv(0xC1, G_gpg_vstate.kslot->sig.attributes.length, G_gpg_vstate.kslot->sig.attributes.value); - gpg_io_insert_tlv(0xC2, G_gpg_vstate.kslot->dec.attributes.length, G_gpg_vstate.kslot->dec.attributes.value); - gpg_io_insert_tlv(0xC3, G_gpg_vstate.kslot->aut.attributes.length, G_gpg_vstate.kslot->aut.attributes.value); - gpg_io_insert_tl(0xC4, 7); - gpg_io_insert((const unsigned char *)N_gpg_pstate->PW_status, 4); - gpg_io_insert_u8(N_gpg_pstate->PW1.counter); - gpg_io_insert_u8(N_gpg_pstate->RC.counter); - gpg_io_insert_u8(N_gpg_pstate->PW3.counter); - gpg_io_insert_tl(0xC5, 60); - gpg_io_insert(G_gpg_vstate.kslot->sig.fingerprints, 20); - gpg_io_insert(G_gpg_vstate.kslot->dec.fingerprints, 20); - gpg_io_insert(G_gpg_vstate.kslot->aut.fingerprints, 20); - gpg_io_insert_tl(0xC6, 60); - gpg_io_insert(G_gpg_vstate.kslot->sig.CA_fingerprints, 20); - gpg_io_insert(G_gpg_vstate.kslot->dec.CA_fingerprints, 20); - gpg_io_insert(G_gpg_vstate.kslot->aut.CA_fingerprints, 20); - gpg_io_insert_tl(0xCD, 12); - gpg_io_insert(G_gpg_vstate.kslot->sig.date, 4); - gpg_io_insert(G_gpg_vstate.kslot->dec.date, 4); - gpg_io_insert(G_gpg_vstate.kslot->aut.date, 4); - gpg_io_set_offset(IO_OFFSET_MARK); - gpg_io_insert_tl(0x73, G_gpg_vstate.io_length - G_gpg_vstate.io_offset); - gpg_io_set_offset(IO_OFFSET_END); - break; - - /* ----------------- User Interaction Flag (UIF) for PSO:CDS ----------------- */ - case 0x00D6: - gpg_io_insert(G_gpg_vstate.kslot->sig.UIF, 2); - break; - case 0x00D7: - gpg_io_insert(G_gpg_vstate.kslot->dec.UIF, 2); - break; - case 0x00D8: - gpg_io_insert(G_gpg_vstate.kslot->aut.UIF, 2); - break; - - /* ----------------- Security support template ----------------- */ - case 0x7A: - gpg_io_insert_tl(0x93, 3); - gpg_io_insert_u24(G_gpg_vstate.kslot->sig_count); - break; - - /* ----------------- Cardholder certificate ----------------- */ - case 0x7F21: - switch (G_gpg_vstate.DO_reccord) { - case 0: - gpg_io_insert(G_gpg_vstate.kslot->aut.CA.value, G_gpg_vstate.kslot->aut.CA.length); - break; - case 1: - gpg_io_insert(G_gpg_vstate.kslot->dec.CA.value, G_gpg_vstate.kslot->dec.CA.length); - break; - case 2: - gpg_io_insert(G_gpg_vstate.kslot->sig.CA.value, G_gpg_vstate.kslot->sig.CA.length); - break; - default: - sw = SW_RECORD_NOT_FOUND; - } - break; - - /* ----------------- PW Status Bytes ----------------- */ - case 0x00C4: - gpg_io_insert((const unsigned char *)N_gpg_pstate->PW_status, 4); - gpg_io_insert_u8(N_gpg_pstate->PW1.counter); - gpg_io_insert_u8(N_gpg_pstate->RC.counter); - gpg_io_insert_u8(N_gpg_pstate->PW3.counter); - break; - - /* WAT */ - default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - - return sw; + G_gpg_vstate.DO_reccord = record; + G_gpg_vstate.DO_offset = 0; + return SW_OK; } -int gpg_apdu_get_next_data(unsigned int ref) { - int sw; - - if ((ref != 0x7F21) || (G_gpg_vstate.DO_current != 0x7F21)) { - return SW_CONDITIONS_NOT_SATISFIED; - } - sw = gpg_apdu_get_data(ref); - if (sw == SW_OK) { - G_gpg_vstate.DO_reccord++; - } - return sw; -} +int gpg_apdu_get_data(unsigned int ref) { + int sw; -int gpg_apdu_put_data(unsigned int ref) { - unsigned int t, l, sw; - unsigned int * ptr_l; - unsigned char *ptr_v; - - G_gpg_vstate.DO_current = ref; - sw = SW_OK; - - switch (ref) { - /* ----------------- Optional DO for private use ----------------- */ - case 0x0101: - ptr_l = (unsigned int *)&N_gpg_pstate->private_DO1.length; - ptr_v = (unsigned char *)N_gpg_pstate->private_DO1.value; - goto WRITE_PRIVATE_DO; - case 0x0102: - ptr_l = (unsigned int *)&N_gpg_pstate->private_DO2.length; - ptr_v = (unsigned char *)N_gpg_pstate->private_DO2.value; - goto WRITE_PRIVATE_DO; - case 0x0103: - ptr_l = (unsigned int *)&N_gpg_pstate->private_DO3.length; - ptr_v = (unsigned char *)N_gpg_pstate->private_DO3.value; - goto WRITE_PRIVATE_DO; - case 0x0104: - ptr_l = (unsigned int *)&N_gpg_pstate->private_DO4.length; - ptr_v = (unsigned char *)N_gpg_pstate->private_DO4.value; - goto WRITE_PRIVATE_DO; - WRITE_PRIVATE_DO: - if (G_gpg_vstate.io_length > GPG_EXT_PRIVATE_DO_LENGTH) { - THROW(SW_WRONG_LENGTH); - return 0; + if (G_gpg_vstate.DO_current != ref) { + G_gpg_vstate.DO_current = ref; + G_gpg_vstate.DO_reccord = 0; + G_gpg_vstate.DO_offset = 0; } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, G_gpg_vstate.io_length); - gpg_nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); sw = SW_OK; - break; - /* ----------------- Config key slot ----------------- */ - case 0x01F1: - if (G_gpg_vstate.io_length != 3) { - THROW(SW_WRONG_LENGTH); - return 0; - } - if ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] != GPG_KEYS_SLOTS) || - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] >= GPG_KEYS_SLOTS) || - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] > 3)) { - THROW(SW_WRONG_DATA); - return 0; - } - gpg_nvm_write((void *)N_gpg_pstate->config_slot, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, 3); - break; - case 0x01F2: - if ((N_gpg_pstate->config_slot[2] & 2) == 0) { - THROW(SW_CONDITIONS_NOT_SATISFIED); - return 0; - } - if ((G_gpg_vstate.io_length != 1) || (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset] >= GPG_KEYS_SLOTS)) { - THROW(SW_WRONG_DATA); - return 0; - } - G_gpg_vstate.slot = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; - break; - - /* ----------------- Config RSA exponent ----------------- */ - case 0x01F8: { - unsigned int e; - if (G_gpg_vstate.io_length != 4) { - THROW(SW_WRONG_LENGTH); - return 0; - } - e = gpg_io_fetch_u32(); - nvm_write((void *)&N_gpg_pstate->default_RSA_exponent, &e, sizeof(unsigned int)); - break; - } - - /* ----------------- Serial -----------------*/ - case 0x4f: - if (G_gpg_vstate.io_length != 4) { - THROW(SW_WRONG_LENGTH); - } - nvm_write(G_gpg_vstate.kslot->serial, &G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset], 4); - break; - - /* ----------------- Extended Header list -----------------*/ - case 0x3FFF: { - unsigned int len_e, len_p, len_q; - unsigned int endof, ksz, reset_cnt; - gpg_key_t * keygpg; - // fecth 4D - gpg_io_fetch_tl(&t, &l); - if (t != 0x4D) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - // fecth B8/B6/A4 - gpg_io_fetch_tl(&t, &l); - reset_cnt = 0; - switch (t) { - case 0xB6: - keygpg = &G_gpg_vstate.kslot->sig; - reset_cnt = 0x11111111; - break; - case 0xA4: - keygpg = &G_gpg_vstate.kslot->aut; - break; - case 0xB8: - keygpg = &G_gpg_vstate.kslot->dec; - break; - default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - // fecth 7f78 - gpg_io_fetch_tl(&t, &l); - if (t != 0x7f48) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - len_e = 0; - len_p = 0; - len_q = 0; - endof = G_gpg_vstate.io_offset + l; - while (G_gpg_vstate.io_offset < endof) { - gpg_io_fetch_tl(&t, &l); - switch (t) { - case 0x91: - len_e = l; - break; - case 0x92: - len_p = l; - break; - case 0x93: - len_q = l; - break; - break; - case 0x94: - case 0x95: - case 0x96: - case 0x97: - case 0x99: - break; - default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - } - // fecth 5f78 - gpg_io_fetch_tl(&t, &l); - if (t != 0x5f48) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } + gpg_io_discard(1); + switch (ref) { + /* ----------------- Optional DO for private use ----------------- */ + case 0x0101: + gpg_io_insert((const unsigned char *) N_gpg_pstate->private_DO1.value, + N_gpg_pstate->private_DO1.length); + break; + case 0x0102: + gpg_io_insert((const unsigned char *) N_gpg_pstate->private_DO2.value, + N_gpg_pstate->private_DO2.length); + break; + case 0x0103: + gpg_io_insert((const unsigned char *) N_gpg_pstate->private_DO3.value, + N_gpg_pstate->private_DO3.length); + break; + case 0x0104: + gpg_io_insert((const unsigned char *) N_gpg_pstate->private_DO4.value, + N_gpg_pstate->private_DO4.length); + break; + + /* ----------------- Config key slot ----------------- */ + case 0x01F0: + gpg_io_insert((const unsigned char *) N_gpg_pstate->config_slot, 3); + gpg_io_insert_u8(G_gpg_vstate.slot); + break; + case 0x01F1: + gpg_io_insert((const unsigned char *) N_gpg_pstate->config_slot, 3); + break; + case 0x01F2: + gpg_io_insert_u8(G_gpg_vstate.slot); + break; + /* ----------------- Config RSA exponent ----------------- */ + case 0x01F8: + gpg_io_insert((const unsigned char *) N_gpg_pstate->default_RSA_exponent, 4); + break; + + /* ----------------- Application ----------------- */ + case 0x004F: + /* Full Application identifier */ + gpg_io_insert((const unsigned char *) N_gpg_pstate->AID, 10); + gpg_io_insert(G_gpg_vstate.kslot->serial, 4); + gpg_io_insert_u16(0x0000); + break; + case 0x5F52: + /* Historical bytes */ + gpg_io_insert((const unsigned char *) N_gpg_pstate->histo, 15); + break; + case 0x7F66: + /* Extended length information */ + gpg_io_insert(C_ext_length, sizeof(C_ext_length)); + break; + + /* ----------------- User -----------------*/ + case 0x005E: + /* Login data */ + gpg_io_insert((const unsigned char *) N_gpg_pstate->login.value, + N_gpg_pstate->login.length); + break; + case 0x5F50: + /* Uniform resource locator */ + gpg_io_insert((const unsigned char *) N_gpg_pstate->url.value, + N_gpg_pstate->url.length); + break; + case 0x65: + /* Name, Language, Sex */ + gpg_io_insert_tlv(0x5B, + N_gpg_pstate->name.length, + (const unsigned char *) N_gpg_pstate->name.value); + gpg_io_insert_tlv(0x5F2D, + N_gpg_pstate->lang.length, + (const unsigned char *) N_gpg_pstate->lang.value); + gpg_io_insert_tlv(0x5F35, 1, (const unsigned char *) N_gpg_pstate->sex); + break; + + /* ----------------- aid, histo, ext_length, ... ----------------- */ + case 0x6E: + gpg_io_insert_tlv(0x4F, 16, (const unsigned char *) N_gpg_pstate->AID); + memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset - 6, + G_gpg_vstate.kslot->serial, + 4); + gpg_io_insert_tlv(0x5F52, 15, (const unsigned char *) N_gpg_pstate->histo); + gpg_io_insert_tlv(0x7F66, sizeof(C_ext_length), C_ext_length); + + gpg_io_mark(); + + gpg_io_insert_tlv(0xC0, sizeof(C_ext_capabilities), C_ext_capabilities); + gpg_io_insert_tlv(0xC1, + G_gpg_vstate.kslot->sig.attributes.length, + G_gpg_vstate.kslot->sig.attributes.value); + gpg_io_insert_tlv(0xC2, + G_gpg_vstate.kslot->dec.attributes.length, + G_gpg_vstate.kslot->dec.attributes.value); + gpg_io_insert_tlv(0xC3, + G_gpg_vstate.kslot->aut.attributes.length, + G_gpg_vstate.kslot->aut.attributes.value); + gpg_io_insert_tl(0xC4, 7); + gpg_io_insert((const unsigned char *) N_gpg_pstate->PW_status, 4); + gpg_io_insert_u8(N_gpg_pstate->PW1.counter); + gpg_io_insert_u8(N_gpg_pstate->RC.counter); + gpg_io_insert_u8(N_gpg_pstate->PW3.counter); + gpg_io_insert_tl(0xC5, 60); + gpg_io_insert(G_gpg_vstate.kslot->sig.fingerprints, 20); + gpg_io_insert(G_gpg_vstate.kslot->dec.fingerprints, 20); + gpg_io_insert(G_gpg_vstate.kslot->aut.fingerprints, 20); + gpg_io_insert_tl(0xC6, 60); + gpg_io_insert(G_gpg_vstate.kslot->sig.CA_fingerprints, 20); + gpg_io_insert(G_gpg_vstate.kslot->dec.CA_fingerprints, 20); + gpg_io_insert(G_gpg_vstate.kslot->aut.CA_fingerprints, 20); + gpg_io_insert_tl(0xCD, 12); + gpg_io_insert(G_gpg_vstate.kslot->sig.date, 4); + gpg_io_insert(G_gpg_vstate.kslot->dec.date, 4); + gpg_io_insert(G_gpg_vstate.kslot->aut.date, 4); + gpg_io_set_offset(IO_OFFSET_MARK); + gpg_io_insert_tl(0x73, G_gpg_vstate.io_length - G_gpg_vstate.io_offset); + gpg_io_set_offset(IO_OFFSET_END); + break; + + /* ----------------- User Interaction Flag (UIF) for PSO:CDS ----------------- */ + case 0x00D6: + gpg_io_insert(G_gpg_vstate.kslot->sig.UIF, 2); + break; + case 0x00D7: + gpg_io_insert(G_gpg_vstate.kslot->dec.UIF, 2); + break; + case 0x00D8: + gpg_io_insert(G_gpg_vstate.kslot->aut.UIF, 2); + break; + + /* ----------------- Security support template ----------------- */ + case 0x7A: + gpg_io_insert_tl(0x93, 3); + gpg_io_insert_u24(G_gpg_vstate.kslot->sig_count); + break; + + /* ----------------- Cardholder certificate ----------------- */ + case 0x7F21: + switch (G_gpg_vstate.DO_reccord) { + case 0: + gpg_io_insert(G_gpg_vstate.kslot->aut.CA.value, + G_gpg_vstate.kslot->aut.CA.length); + break; + case 1: + gpg_io_insert(G_gpg_vstate.kslot->dec.CA.value, + G_gpg_vstate.kslot->dec.CA.length); + break; + case 2: + gpg_io_insert(G_gpg_vstate.kslot->sig.CA.value, + G_gpg_vstate.kslot->sig.CA.length); + break; + default: + sw = SW_RECORD_NOT_FOUND; + } + break; + + /* ----------------- PW Status Bytes ----------------- */ + case 0x00C4: + gpg_io_insert((const unsigned char *) N_gpg_pstate->PW_status, 4); + gpg_io_insert_u8(N_gpg_pstate->PW1.counter); + gpg_io_insert_u8(N_gpg_pstate->RC.counter); + gpg_io_insert_u8(N_gpg_pstate->PW3.counter); + break; + + default: + /* WAT */ + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + + return sw; +} - // --- RSA KEY --- - if (keygpg->attributes.value[0] == 0x01) { - unsigned int e; - unsigned char * p, *q, *pq; - cx_rsa_public_key_t * rsa_pub; - cx_rsa_private_key_t *rsa_priv, *pkey; - unsigned int pkey_size; - // check length - ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; - ksz = ksz >> 3; - rsa_pub = (cx_rsa_public_key_t *)&G_gpg_vstate.work.rsa.public; - rsa_priv = (cx_rsa_private_key_t *)&G_gpg_vstate.work.rsa.private; - pkey = &keygpg->priv_key.rsa; - switch (ksz) { - case 1024 / 8: - pkey_size = sizeof(cx_rsa_1024_private_key_t); - pq = G_gpg_vstate.work.rsa.public1024.n; - break; - case 2048 / 8: - pkey_size = sizeof(cx_rsa_2048_private_key_t); - pq = G_gpg_vstate.work.rsa.public2048.n; - break; - case 3072 / 8: - pkey_size = sizeof(cx_rsa_3072_private_key_t); - pq = G_gpg_vstate.work.rsa.public3072.n; - break; - case 4096 / 8: - pkey_size = sizeof(cx_rsa_4096_private_key_t); - pq = G_gpg_vstate.work.rsa.public4096.n; - break; - } - ksz = ksz >> 1; - - // fetch e - e = 0; - switch (len_e) { - case 4: - e = gpg_io_fetch_u32(); - break; - case 3: - e = gpg_io_fetch_u24(); - break; - case 2: - e = gpg_io_fetch_u16(); - break; - case 1: - e = gpg_io_fetch_u8(); - break; - default: - THROW(SW_WRONG_DATA); - return 0; - } - - // move p,q over pub key, this only work because adr < adr

- if ((len_p > ksz) || (len_q > ksz)) { - THROW(SW_WRONG_DATA); - return 0; - } - p = G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset; - q = p + len_p; - memmove(pq + ksz - len_p, p, len_p); - memset(pq, 0, ksz - len_p); - memmove(pq + 2 * ksz - len_q, q, len_q); - memset(pq + ksz, 0, ksz - len_q); - - // regenerate RSA private key - unsigned char _e[4]; - _e[0] = e >> 24; - _e[1] = e >> 16; - _e[2] = e >> 8; - _e[3] = e >> 0; - cx_rsa_generate_pair(ksz << 1, rsa_pub, rsa_priv, _e, 4, pq); - - // write keys - nvm_write(&keygpg->pub_key.rsa, rsa_pub->e, 4); - nvm_write(pkey, rsa_priv, pkey_size); - if (reset_cnt) { - reset_cnt = 0; - nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); - } - } - // --- ECC KEY --- - else if ((keygpg->attributes.value[0] == 19) || (keygpg->attributes.value[0] == 18) || - (keygpg->attributes.value[0] == 22)) { - unsigned int curve; - - ksz = 0; - curve = gpg_oid2curve(&keygpg->attributes.value[1], keygpg->attributes.length - 1); - if (curve == 0) { - THROW(SW_WRONG_DATA); - return 0; - } - ksz = gpg_curve2domainlen(curve); - if (ksz == len_p) { - G_gpg_vstate.work.ecfp.private.curve = curve; - G_gpg_vstate.work.ecfp.private.d_len = ksz; - memmove(G_gpg_vstate.work.ecfp.private.d, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, ksz); - cx_ecfp_generate_pair(curve, &G_gpg_vstate.work.ecfp.public, &G_gpg_vstate.work.ecfp.private, 1); - nvm_write(&keygpg->pub_key.ecfp, &G_gpg_vstate.work.ecfp.public, sizeof(cx_ecfp_public_key_t)); - nvm_write(&keygpg->priv_key.ecfp, &G_gpg_vstate.work.ecfp.private, sizeof(cx_ecfp_private_key_t)); - if (reset_cnt) { - reset_cnt = 0; - nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); - } - } +int gpg_apdu_get_next_data(unsigned int ref) { + int sw; + if ((ref != 0x7F21) || (G_gpg_vstate.DO_current != 0x7F21)) { + return SW_CONDITIONS_NOT_SATISFIED; } - // --- UNSUPPORTED KEY --- - else { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - break; - } // endof of 3fff - - /* ----------------- User -----------------*/ - /* Name */ - case 0x5B: - if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->name.value)) { - THROW(SW_WRONG_LENGTH); - return 0; - } - gpg_nvm_write((void *)N_gpg_pstate->name.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write((void *)&N_gpg_pstate->name.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); - break; - /* Login data */ - case 0x5E: - if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->login.value)) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = gpg_apdu_get_data(ref); + if (sw == SW_OK) { + G_gpg_vstate.DO_reccord++; } - gpg_nvm_write((void *)N_gpg_pstate->login.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write((void *)&N_gpg_pstate->login.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); - break; - /* Language preferences */ - case 0x5F2D: - if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->lang.value)) { - THROW(SW_WRONG_LENGTH); - return 0; - } - gpg_nvm_write((void *)N_gpg_pstate->lang.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write((void *)&N_gpg_pstate->lang.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); - break; - /* Sex */ - case 0x5F35: - if (G_gpg_vstate.io_length != sizeof(N_gpg_pstate->sex)) { - THROW(SW_WRONG_LENGTH); - return 0; - } - gpg_nvm_write((void *)N_gpg_pstate->sex, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - break; - /* Uniform resource locator */ - case 0x5F50: - if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->url.value)) { - THROW(SW_WRONG_LENGTH); - return 0; - } - gpg_nvm_write((void *)N_gpg_pstate->url.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write((void *)&N_gpg_pstate->url.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); - break; - - /* ----------------- Cardholder certificate ----------------- */ - case 0x7F21: - ptr_v = NULL; - switch (G_gpg_vstate.DO_reccord) { - case 0: - ptr_l = &G_gpg_vstate.kslot->aut.CA.length; - ptr_v = G_gpg_vstate.kslot->aut.CA.value; - goto WRITE_CA; - case 1: - ptr_l = &G_gpg_vstate.kslot->sig.CA.length; - ptr_v = G_gpg_vstate.kslot->sig.CA.value; - goto WRITE_CA; - case 2: - ptr_l = &G_gpg_vstate.kslot->dec.CA.length; - ptr_v = G_gpg_vstate.kslot->dec.CA.value; - goto WRITE_CA; - default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - WRITE_CA: - if (G_gpg_vstate.io_length > GPG_EXT_CARD_HOLDER_CERT_LENTH) { - THROW(SW_WRONG_LENGTH); - } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); - break; - - /* ----------------- Algorithm attributes ----------------- */ - case 0xC1: - ptr_l = &G_gpg_vstate.kslot->sig.attributes.length; - ptr_v = G_gpg_vstate.kslot->sig.attributes.value; - goto WRITE_ATTRIBUTES; - case 0xC2: - ptr_l = &G_gpg_vstate.kslot->dec.attributes.length; - ptr_v = G_gpg_vstate.kslot->dec.attributes.value; - goto WRITE_ATTRIBUTES; - case 0xC3: - ptr_l = &G_gpg_vstate.kslot->aut.attributes.length; - ptr_v = G_gpg_vstate.kslot->aut.attributes.value; - goto WRITE_ATTRIBUTES; - WRITE_ATTRIBUTES: - if (G_gpg_vstate.io_length > 12) { - THROW(SW_WRONG_LENGTH); - return 0; - } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); - break; - - /* ----------------- PWS status ----------------- */ - case 0xC4: - gpg_io_fetch_nv((unsigned char *)N_gpg_pstate->PW_status, 1); - break; - - /* ----------------- Fingerprints ----------------- */ - case 0xC7: - ptr_v = G_gpg_vstate.kslot->sig.fingerprints; - goto WRITE_FINGERPRINTS; - case 0xC8: - ptr_v = G_gpg_vstate.kslot->dec.fingerprints; - goto WRITE_FINGERPRINTS; - case 0xC9: - ptr_v = G_gpg_vstate.kslot->aut.fingerprints; - goto WRITE_FINGERPRINTS; - case 0xCA: - ptr_v = G_gpg_vstate.kslot->sig.CA_fingerprints; - goto WRITE_FINGERPRINTS; - case 0xCB: - ptr_v = G_gpg_vstate.kslot->dec.CA_fingerprints; - goto WRITE_FINGERPRINTS; - case 0xCC: - ptr_v = G_gpg_vstate.kslot->aut.CA_fingerprints; - goto WRITE_FINGERPRINTS; - WRITE_FINGERPRINTS: - if (G_gpg_vstate.io_length != 20) { - THROW(SW_WRONG_LENGTH); - return 0; - } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 20); - break; - - /* ----------------- Generation date/time ----------------- */ - case 0xCE: - ptr_v = G_gpg_vstate.kslot->sig.date; - goto WRITE_DATE; - case 0xCF: - ptr_v = G_gpg_vstate.kslot->dec.date; - goto WRITE_DATE; - case 0xD0: - ptr_v = G_gpg_vstate.kslot->aut.date; - goto WRITE_DATE; - WRITE_DATE: - if (G_gpg_vstate.io_length != 4) { - THROW(SW_WRONG_LENGTH); - return 0; - } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 4); - break; - - /* ----------------- AES key ----------------- */ - { - void * pkey; - cx_aes_key_t aes_key; - case 0xD1: - pkey = (void *)&N_gpg_pstate->SM_enc; - goto init_aes_key; - case 0xD2: - pkey = (void *)&N_gpg_pstate->SM_mac; - goto init_aes_key; - case 0xD5: - pkey = &G_gpg_vstate.kslot->AES_dec; - goto init_aes_key; - init_aes_key: - cx_aes_init_key(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key); - gpg_nvm_write(pkey, &aes_key, sizeof(cx_aes_key_t)); - break; - - /* AES key: one shot */ - case 0xF4: - cx_aes_init_key(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key); - gpg_nvm_write((void *)&N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); - cx_aes_init_key(G_gpg_vstate.work.io_buffer + 16, G_gpg_vstate.io_length, &aes_key); - gpg_nvm_write((void *)&N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); - break; - } - - /* ----------------- RC ----------------- */ - case 0xD3: { - gpg_pin_t *pin; + return sw; +} - pin = gpg_pin_get_pin(PIN_ID_RC); - if (G_gpg_vstate.io_length == 0) { - gpg_nvm_write(pin, NULL, sizeof(gpg_pin_t)); +int gpg_apdu_put_data(unsigned int ref) { + unsigned int t, l, sw; + unsigned int *ptr_l; + unsigned char *ptr_v; - } else if ((G_gpg_vstate.io_length > GPG_MAX_PW_LENGTH) || (G_gpg_vstate.io_length < 8)) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } else { - gpg_pin_set(pin, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, G_gpg_vstate.io_length); - } + G_gpg_vstate.DO_current = ref; sw = SW_OK; - break; - } - - /* ----------------- UIF ----------------- */ - case 0xD6: - ptr_v = G_gpg_vstate.kslot->sig.UIF; - goto WRITE_UIF; - case 0xD7: - ptr_v = G_gpg_vstate.kslot->dec.UIF; - goto WRITE_UIF; - case 0xD8: - ptr_v = G_gpg_vstate.kslot->aut.UIF; - goto WRITE_UIF; - WRITE_UIF: - if (G_gpg_vstate.io_length != 2) { - THROW(SW_WRONG_LENGTH); - return 0; - } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 2); - break; - /* ----------------- WAT ----------------- */ - default: - sw = SW_REFERENCED_DATA_NOT_FOUND; - break; - } + switch (ref) { + /* ----------------- Optional DO for private use ----------------- */ + case 0x0101: + ptr_l = (unsigned int *) &N_gpg_pstate->private_DO1.length; + ptr_v = (unsigned char *) N_gpg_pstate->private_DO1.value; + goto WRITE_PRIVATE_DO; + case 0x0102: + ptr_l = (unsigned int *) &N_gpg_pstate->private_DO2.length; + ptr_v = (unsigned char *) N_gpg_pstate->private_DO2.value; + goto WRITE_PRIVATE_DO; + case 0x0103: + ptr_l = (unsigned int *) &N_gpg_pstate->private_DO3.length; + ptr_v = (unsigned char *) N_gpg_pstate->private_DO3.value; + goto WRITE_PRIVATE_DO; + case 0x0104: + ptr_l = (unsigned int *) &N_gpg_pstate->private_DO4.length; + ptr_v = (unsigned char *) N_gpg_pstate->private_DO4.value; + goto WRITE_PRIVATE_DO; + WRITE_PRIVATE_DO: + if (G_gpg_vstate.io_length > GPG_EXT_PRIVATE_DO_LENGTH) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write(ptr_v, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + G_gpg_vstate.io_length); + gpg_nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); + sw = SW_OK; + break; + /* ----------------- Config key slot ----------------- */ + case 0x01F1: + if (G_gpg_vstate.io_length != 3) { + THROW(SW_WRONG_LENGTH); + return 0; + } + if ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] != GPG_KEYS_SLOTS) || + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] >= GPG_KEYS_SLOTS) || + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] > 3)) { + THROW(SW_WRONG_DATA); + return 0; + } + gpg_nvm_write((void *) N_gpg_pstate->config_slot, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + 3); + break; + + case 0x01F2: + if ((N_gpg_pstate->config_slot[2] & 2) == 0) { + THROW(SW_CONDITIONS_NOT_SATISFIED); + return 0; + } + if ((G_gpg_vstate.io_length != 1) || + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset] >= GPG_KEYS_SLOTS)) { + THROW(SW_WRONG_DATA); + return 0; + } + G_gpg_vstate.slot = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; + break; + + /* ----------------- Config RSA exponent ----------------- */ + case 0x01F8: { + unsigned int e; + if (G_gpg_vstate.io_length != 4) { + THROW(SW_WRONG_LENGTH); + return 0; + } + e = gpg_io_fetch_u32(); + nvm_write((void *) &N_gpg_pstate->default_RSA_exponent, &e, sizeof(unsigned int)); + break; + } - gpg_io_discard(1); - return sw; + /* ----------------- Serial -----------------*/ + case 0x4f: + if (G_gpg_vstate.io_length != 4) { + THROW(SW_WRONG_LENGTH); + } + nvm_write(G_gpg_vstate.kslot->serial, + &G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset], + 4); + break; + + /* ----------------- Extended Header list -----------------*/ + case 0x3FFF: { + unsigned int len_e, len_p, len_q; + unsigned int endof, ksz, reset_cnt; + gpg_key_t *keygpg; + // fecth 4D + gpg_io_fetch_tl(&t, &l); + if (t != 0x4D) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + // fecth B8/B6/A4 + gpg_io_fetch_tl(&t, &l); + reset_cnt = 0; + switch (t) { + case 0xB6: + keygpg = &G_gpg_vstate.kslot->sig; + reset_cnt = 0x11111111; + break; + case 0xA4: + keygpg = &G_gpg_vstate.kslot->aut; + break; + case 0xB8: + keygpg = &G_gpg_vstate.kslot->dec; + break; + default: + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + // fecth 7f78 + gpg_io_fetch_tl(&t, &l); + if (t != 0x7f48) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + len_e = 0; + len_p = 0; + len_q = 0; + endof = G_gpg_vstate.io_offset + l; + while (G_gpg_vstate.io_offset < endof) { + gpg_io_fetch_tl(&t, &l); + switch (t) { + case 0x91: + len_e = l; + break; + case 0x92: + len_p = l; + break; + case 0x93: + len_q = l; + break; + break; + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x99: + break; + default: + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + } + // fecth 5f78 + gpg_io_fetch_tl(&t, &l); + if (t != 0x5f48) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + + // --- RSA KEY --- + if (keygpg->attributes.value[0] == 0x01) { + unsigned int e; + unsigned char *p, *q, *pq; + cx_rsa_public_key_t *rsa_pub; + cx_rsa_private_key_t *rsa_priv, *pkey; + unsigned int pkey_size; + // check length + ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; + ksz = ksz >> 3; + rsa_pub = (cx_rsa_public_key_t *) &G_gpg_vstate.work.rsa.public; + rsa_priv = (cx_rsa_private_key_t *) &G_gpg_vstate.work.rsa.private; + pkey = &keygpg->priv_key.rsa; + switch (ksz) { + case 1024 / 8: + pkey_size = sizeof(cx_rsa_1024_private_key_t); + pq = G_gpg_vstate.work.rsa.public1024.n; + break; + case 2048 / 8: + pkey_size = sizeof(cx_rsa_2048_private_key_t); + pq = G_gpg_vstate.work.rsa.public2048.n; + break; + case 3072 / 8: + pkey_size = sizeof(cx_rsa_3072_private_key_t); + pq = G_gpg_vstate.work.rsa.public3072.n; + break; + case 4096 / 8: + pkey_size = sizeof(cx_rsa_4096_private_key_t); + pq = G_gpg_vstate.work.rsa.public4096.n; + break; + } + ksz = ksz >> 1; + + // fetch e + e = 0; + switch (len_e) { + case 4: + e = gpg_io_fetch_u32(); + break; + case 3: + e = gpg_io_fetch_u24(); + break; + case 2: + e = gpg_io_fetch_u16(); + break; + case 1: + e = gpg_io_fetch_u8(); + break; + default: + THROW(SW_WRONG_DATA); + return 0; + } + + // move p,q over pub key, this only work because adr < adr

+ if ((len_p > ksz) || (len_q > ksz)) { + THROW(SW_WRONG_DATA); + return 0; + } + p = G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset; + q = p + len_p; + memmove(pq + ksz - len_p, p, len_p); + memset(pq, 0, ksz - len_p); + memmove(pq + 2 * ksz - len_q, q, len_q); + memset(pq + ksz, 0, ksz - len_q); + + // regenerate RSA private key + unsigned char _e[4]; + _e[0] = e >> 24; + _e[1] = e >> 16; + _e[2] = e >> 8; + _e[3] = e >> 0; + cx_rsa_generate_pair(ksz << 1, rsa_pub, rsa_priv, _e, 4, pq); + + // write keys + nvm_write(&keygpg->pub_key.rsa, rsa_pub->e, 4); + nvm_write(pkey, rsa_priv, pkey_size); + if (reset_cnt) { + reset_cnt = 0; + nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); + } + } + // --- ECC KEY --- + else if ((keygpg->attributes.value[0] == 19) || (keygpg->attributes.value[0] == 18) || + (keygpg->attributes.value[0] == 22)) { + unsigned int curve; + + ksz = 0; + curve = gpg_oid2curve(&keygpg->attributes.value[1], keygpg->attributes.length - 1); + if (curve == 0) { + THROW(SW_WRONG_DATA); + return 0; + } + ksz = gpg_curve2domainlen(curve); + if (ksz == len_p) { + G_gpg_vstate.work.ecfp.private.curve = curve; + G_gpg_vstate.work.ecfp.private.d_len = ksz; + memmove(G_gpg_vstate.work.ecfp.private.d, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + ksz); + cx_ecfp_generate_pair(curve, + &G_gpg_vstate.work.ecfp.public, + &G_gpg_vstate.work.ecfp.private, + 1); + nvm_write(&keygpg->pub_key.ecfp, + &G_gpg_vstate.work.ecfp.public, + sizeof(cx_ecfp_public_key_t)); + nvm_write(&keygpg->priv_key.ecfp, + &G_gpg_vstate.work.ecfp.private, + sizeof(cx_ecfp_private_key_t)); + if (reset_cnt) { + reset_cnt = 0; + nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); + } + } + + } + // --- UNSUPPORTED KEY --- + else { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + break; + } // endof of 3fff + + /* ----------------- User -----------------*/ + /* Name */ + case 0x5B: + if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->name.value)) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write((void *) N_gpg_pstate->name.value, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + gpg_nvm_write((void *) &N_gpg_pstate->name.length, + &G_gpg_vstate.io_length, + sizeof(unsigned int)); + break; + /* Login data */ + case 0x5E: + if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->login.value)) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write((void *) N_gpg_pstate->login.value, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + gpg_nvm_write((void *) &N_gpg_pstate->login.length, + &G_gpg_vstate.io_length, + sizeof(unsigned int)); + break; + /* Language preferences */ + case 0x5F2D: + if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->lang.value)) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write((void *) N_gpg_pstate->lang.value, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + gpg_nvm_write((void *) &N_gpg_pstate->lang.length, + &G_gpg_vstate.io_length, + sizeof(unsigned int)); + break; + /* Sex */ + case 0x5F35: + if (G_gpg_vstate.io_length != sizeof(N_gpg_pstate->sex)) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write((void *) N_gpg_pstate->sex, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + break; + /* Uniform resource locator */ + case 0x5F50: + if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->url.value)) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write((void *) N_gpg_pstate->url.value, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + gpg_nvm_write((void *) &N_gpg_pstate->url.length, + &G_gpg_vstate.io_length, + sizeof(unsigned int)); + break; + + /* ----------------- Cardholder certificate ----------------- */ + case 0x7F21: + ptr_v = NULL; + switch (G_gpg_vstate.DO_reccord) { + case 0: + ptr_l = &G_gpg_vstate.kslot->aut.CA.length; + ptr_v = G_gpg_vstate.kslot->aut.CA.value; + goto WRITE_CA; + case 1: + ptr_l = &G_gpg_vstate.kslot->sig.CA.length; + ptr_v = G_gpg_vstate.kslot->sig.CA.value; + goto WRITE_CA; + case 2: + ptr_l = &G_gpg_vstate.kslot->dec.CA.length; + ptr_v = G_gpg_vstate.kslot->dec.CA.value; + goto WRITE_CA; + default: + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + WRITE_CA: + if (G_gpg_vstate.io_length > GPG_EXT_CARD_HOLDER_CERT_LENTH) { + THROW(SW_WRONG_LENGTH); + } + gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + gpg_nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); + break; + + /* ----------------- Algorithm attributes ----------------- */ + case 0xC1: + ptr_l = &G_gpg_vstate.kslot->sig.attributes.length; + ptr_v = G_gpg_vstate.kslot->sig.attributes.value; + goto WRITE_ATTRIBUTES; + case 0xC2: + ptr_l = &G_gpg_vstate.kslot->dec.attributes.length; + ptr_v = G_gpg_vstate.kslot->dec.attributes.value; + goto WRITE_ATTRIBUTES; + case 0xC3: + ptr_l = &G_gpg_vstate.kslot->aut.attributes.length; + ptr_v = G_gpg_vstate.kslot->aut.attributes.value; + goto WRITE_ATTRIBUTES; + WRITE_ATTRIBUTES: + if (G_gpg_vstate.io_length > 12) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + gpg_nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); + break; + + /* ----------------- PWS status ----------------- */ + case 0xC4: + gpg_io_fetch_nv((unsigned char *) N_gpg_pstate->PW_status, 1); + break; + + /* ----------------- Fingerprints ----------------- */ + case 0xC7: + ptr_v = G_gpg_vstate.kslot->sig.fingerprints; + goto WRITE_FINGERPRINTS; + case 0xC8: + ptr_v = G_gpg_vstate.kslot->dec.fingerprints; + goto WRITE_FINGERPRINTS; + case 0xC9: + ptr_v = G_gpg_vstate.kslot->aut.fingerprints; + goto WRITE_FINGERPRINTS; + case 0xCA: + ptr_v = G_gpg_vstate.kslot->sig.CA_fingerprints; + goto WRITE_FINGERPRINTS; + case 0xCB: + ptr_v = G_gpg_vstate.kslot->dec.CA_fingerprints; + goto WRITE_FINGERPRINTS; + case 0xCC: + ptr_v = G_gpg_vstate.kslot->aut.CA_fingerprints; + goto WRITE_FINGERPRINTS; + WRITE_FINGERPRINTS: + if (G_gpg_vstate.io_length != 20) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 20); + break; + + /* ----------------- Generation date/time ----------------- */ + case 0xCE: + ptr_v = G_gpg_vstate.kslot->sig.date; + goto WRITE_DATE; + case 0xCF: + ptr_v = G_gpg_vstate.kslot->dec.date; + goto WRITE_DATE; + case 0xD0: + ptr_v = G_gpg_vstate.kslot->aut.date; + goto WRITE_DATE; + WRITE_DATE: + if (G_gpg_vstate.io_length != 4) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 4); + break; + + /* ----------------- AES key ----------------- */ + { + void *pkey; + cx_aes_key_t aes_key; + case 0xD1: + pkey = (void *) &N_gpg_pstate->SM_enc; + goto init_aes_key; + case 0xD2: + pkey = (void *) &N_gpg_pstate->SM_mac; + goto init_aes_key; + case 0xD5: + pkey = &G_gpg_vstate.kslot->AES_dec; + goto init_aes_key; + init_aes_key: + cx_aes_init_key(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key); + gpg_nvm_write(pkey, &aes_key, sizeof(cx_aes_key_t)); + break; + + /* AES key: one shot */ + case 0xF4: + cx_aes_init_key(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key); + gpg_nvm_write((void *) &N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); + cx_aes_init_key(G_gpg_vstate.work.io_buffer + 16, + G_gpg_vstate.io_length, + &aes_key); + gpg_nvm_write((void *) &N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); + break; + } + + /* ----------------- RC ----------------- */ + case 0xD3: { + gpg_pin_t *pin; + + pin = gpg_pin_get_pin(PIN_ID_RC); + if (G_gpg_vstate.io_length == 0) { + gpg_nvm_write(pin, NULL, sizeof(gpg_pin_t)); + + } else if ((G_gpg_vstate.io_length > GPG_MAX_PW_LENGTH) || + (G_gpg_vstate.io_length < 8)) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } else { + gpg_pin_set(pin, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + G_gpg_vstate.io_length); + } + sw = SW_OK; + break; + } + + /* ----------------- UIF ----------------- */ + case 0xD6: + ptr_v = G_gpg_vstate.kslot->sig.UIF; + goto WRITE_UIF; + case 0xD7: + ptr_v = G_gpg_vstate.kslot->dec.UIF; + goto WRITE_UIF; + case 0xD8: + ptr_v = G_gpg_vstate.kslot->aut.UIF; + goto WRITE_UIF; + WRITE_UIF: + if (G_gpg_vstate.io_length != 2) { + THROW(SW_WRONG_LENGTH); + return 0; + } + gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 2); + break; + + /* ----------------- WAT ----------------- */ + default: + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; + } + + gpg_io_discard(1); + return sw; } static void gpg_init_keyenc(cx_aes_key_t *keyenc) { - unsigned char seed[32]; + unsigned char seed[32]; - gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); - gpg_pso_derive_key_seed(seed, (unsigned char *)PIC("key "), 1, seed, 16); - cx_aes_init_key(seed, 16, keyenc); + gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); + gpg_pso_derive_key_seed(seed, (unsigned char *) PIC("key "), 1, seed, 16); + cx_aes_init_key(seed, 16, keyenc); } // cmd // resp TID API COMPAT len_pub len_priv priv int gpg_apdu_get_key_data(unsigned int ref) { - cx_aes_key_t keyenc; - gpg_key_t * keygpg; - unsigned int len = 0; - gpg_init_keyenc(&keyenc); - - switch (ref) { - case 0x00B6: - keygpg = &G_gpg_vstate.kslot->sig; - break; - case 0x00B8: - keygpg = &G_gpg_vstate.kslot->dec; - break; - case 0x00A4: - keygpg = &G_gpg_vstate.kslot->aut; - break; - default: - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - - gpg_io_discard(1); - // clear part - gpg_io_insert_u32(TARGET_ID); - gpg_io_insert_u32(CX_APILEVEL); - gpg_io_insert_u32(CX_COMPAT_APILEVEL); - // encrypted part - switch (keygpg->attributes.value[0]) { - case 0x01: // RSA - // insert pubkey; - gpg_io_insert_u32(4); - gpg_io_insert(keygpg->pub_key.rsa, 4); - - // insert privkey - gpg_io_mark(); - len = cx_aes(&keyenc, CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, - (unsigned char *)&keygpg->priv_key.rsa4096, sizeof(cx_rsa_4096_private_key_t), - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset); - gpg_io_inserted(len); - gpg_io_set_offset(IO_OFFSET_MARK); - gpg_io_insert_u32(len); - gpg_io_set_offset(IO_OFFSET_END); - break; - - case 18: // ECC - case 19: - case 22: - // insert pubkey; - gpg_io_insert_u32(sizeof(cx_ecfp_640_public_key_t)); - gpg_io_insert((unsigned char *)&keygpg->pub_key.ecfp640, sizeof(cx_ecfp_640_public_key_t)); - - // insert privkey - gpg_io_mark(); - len = cx_aes(&keyenc, CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, - (unsigned char *)&keygpg->priv_key.ecfp640, sizeof(cx_ecfp_640_private_key_t), - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset); - gpg_io_inserted(len); - gpg_io_set_offset(IO_OFFSET_MARK); - gpg_io_insert_u32(len); - gpg_io_set_offset(IO_OFFSET_END); - break; - - default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - return SW_OK; + cx_aes_key_t keyenc; + gpg_key_t *keygpg; + unsigned int len = 0; + gpg_init_keyenc(&keyenc); + + switch (ref) { + case 0x00B6: + keygpg = &G_gpg_vstate.kslot->sig; + break; + case 0x00B8: + keygpg = &G_gpg_vstate.kslot->dec; + break; + case 0x00A4: + keygpg = &G_gpg_vstate.kslot->aut; + break; + default: + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } + + gpg_io_discard(1); + // clear part + gpg_io_insert_u32(TARGET_ID); + gpg_io_insert_u32(CX_APILEVEL); + gpg_io_insert_u32(CX_COMPAT_APILEVEL); + // encrypted part + switch (keygpg->attributes.value[0]) { + case 0x01: // RSA + // insert pubkey; + gpg_io_insert_u32(4); + gpg_io_insert(keygpg->pub_key.rsa, 4); + + // insert privkey + gpg_io_mark(); + len = cx_aes(&keyenc, + CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, + (unsigned char *) &keygpg->priv_key.rsa4096, + sizeof(cx_rsa_4096_private_key_t), + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset); + gpg_io_inserted(len); + gpg_io_set_offset(IO_OFFSET_MARK); + gpg_io_insert_u32(len); + gpg_io_set_offset(IO_OFFSET_END); + break; + + case 18: // ECC + case 19: + case 22: + // insert pubkey; + gpg_io_insert_u32(sizeof(cx_ecfp_640_public_key_t)); + gpg_io_insert((unsigned char *) &keygpg->pub_key.ecfp640, + sizeof(cx_ecfp_640_public_key_t)); + + // insert privkey + gpg_io_mark(); + len = cx_aes(&keyenc, + CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, + (unsigned char *) &keygpg->priv_key.ecfp640, + sizeof(cx_ecfp_640_private_key_t), + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset); + gpg_io_inserted(len); + gpg_io_set_offset(IO_OFFSET_MARK); + gpg_io_insert_u32(len); + gpg_io_set_offset(IO_OFFSET_END); + break; + + default: + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; + } + return SW_OK; } // cmd TID API COMPAT len_pub len_priv priv // resp - int gpg_apdu_put_key_data(unsigned int ref) { - cx_aes_key_t keyenc; - gpg_key_t * keygpg; - unsigned int len; - unsigned int offset; - gpg_init_keyenc(&keyenc); - - switch (ref) { - case 0xB6: - keygpg = &G_gpg_vstate.kslot->sig; - break; - case 0xB8: - keygpg = &G_gpg_vstate.kslot->dec; - break; - case 0xA4: - keygpg = &G_gpg_vstate.kslot->aut; - break; - default: - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - - /* unsigned int target_id = */ - gpg_io_fetch_u32(); - /* unsigned int cx_apilevel = */ - gpg_io_fetch_u32(); - /* unsigned int cx_compat_apilevel = */ - gpg_io_fetch_u32(); - - switch (keygpg->attributes.value[0]) { - // RSA - case 0x01: - // insert pubkey; - len = gpg_io_fetch_u32(); - if (len != 4) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - gpg_io_fetch_nv(keygpg->pub_key.rsa, len); - - // insert privkey - len = gpg_io_fetch_u32(); - if (len > (G_gpg_vstate.io_length - G_gpg_vstate.io_offset)) { - THROW(SW_WRONG_DATA); - } - offset = G_gpg_vstate.io_offset; - gpg_io_discard(0); - len = cx_aes(&keyenc, CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, G_gpg_vstate.work.io_buffer + offset, - len, G_gpg_vstate.work.io_buffer, GPG_IO_BUFFER_LENGTH); - if (len != sizeof(cx_rsa_4096_private_key_t)) { - THROW(SW_WRONG_DATA); - } - gpg_nvm_write((unsigned char *)&keygpg->priv_key.rsa4096, G_gpg_vstate.work.io_buffer, len); - break; - - // ECC - case 18: /* 12h */ - case 19: /* 13h */ - case 22: /* 16h */ - // insert pubkey; - len = gpg_io_fetch_u32(); - if (len != sizeof(cx_ecfp_640_public_key_t)) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - gpg_io_fetch_nv((unsigned char *)&keygpg->pub_key.ecfp640, len); - - // insert privkey - len = gpg_io_fetch_u32(); - if (len > (G_gpg_vstate.io_length - G_gpg_vstate.io_offset)) { - THROW(SW_WRONG_DATA); - } - offset = G_gpg_vstate.io_offset; - gpg_io_discard(0); - - len = cx_aes(&keyenc, CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, G_gpg_vstate.work.io_buffer + offset, - len, G_gpg_vstate.work.io_buffer, GPG_IO_BUFFER_LENGTH); - if (len != sizeof(cx_ecfp_640_private_key_t)) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - gpg_nvm_write((unsigned char *)&keygpg->priv_key.ecfp640, G_gpg_vstate.work.io_buffer, len); - break; - - default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_discard(1); - return SW_OK; + cx_aes_key_t keyenc; + gpg_key_t *keygpg; + unsigned int len; + unsigned int offset; + gpg_init_keyenc(&keyenc); + + switch (ref) { + case 0xB6: + keygpg = &G_gpg_vstate.kslot->sig; + break; + case 0xB8: + keygpg = &G_gpg_vstate.kslot->dec; + break; + case 0xA4: + keygpg = &G_gpg_vstate.kslot->aut; + break; + default: + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } + + /* unsigned int target_id = */ + gpg_io_fetch_u32(); + /* unsigned int cx_apilevel = */ + gpg_io_fetch_u32(); + /* unsigned int cx_compat_apilevel = */ + gpg_io_fetch_u32(); + + switch (keygpg->attributes.value[0]) { + // RSA + case 0x01: + // insert pubkey; + len = gpg_io_fetch_u32(); + if (len != 4) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } + gpg_io_fetch_nv(keygpg->pub_key.rsa, len); + + // insert privkey + len = gpg_io_fetch_u32(); + if (len > (G_gpg_vstate.io_length - G_gpg_vstate.io_offset)) { + THROW(SW_WRONG_DATA); + } + offset = G_gpg_vstate.io_offset; + gpg_io_discard(0); + len = cx_aes(&keyenc, + CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, + G_gpg_vstate.work.io_buffer + offset, + len, + G_gpg_vstate.work.io_buffer, + GPG_IO_BUFFER_LENGTH); + if (len != sizeof(cx_rsa_4096_private_key_t)) { + THROW(SW_WRONG_DATA); + } + gpg_nvm_write((unsigned char *) &keygpg->priv_key.rsa4096, + G_gpg_vstate.work.io_buffer, + len); + break; + + // ECC + case 18: /* 12h */ + case 19: /* 13h */ + case 22: /* 16h */ + // insert pubkey; + len = gpg_io_fetch_u32(); + if (len != sizeof(cx_ecfp_640_public_key_t)) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } + gpg_io_fetch_nv((unsigned char *) &keygpg->pub_key.ecfp640, len); + + // insert privkey + len = gpg_io_fetch_u32(); + if (len > (G_gpg_vstate.io_length - G_gpg_vstate.io_offset)) { + THROW(SW_WRONG_DATA); + } + offset = G_gpg_vstate.io_offset; + gpg_io_discard(0); + + len = cx_aes(&keyenc, + CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, + G_gpg_vstate.work.io_buffer + offset, + len, + G_gpg_vstate.work.io_buffer, + GPG_IO_BUFFER_LENGTH); + if (len != sizeof(cx_ecfp_640_private_key_t)) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } + gpg_nvm_write((unsigned char *) &keygpg->priv_key.ecfp640, + G_gpg_vstate.work.io_buffer, + len); + break; + + default: + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_discard(1); + return SW_OK; } diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index 5e27263..d6825b7 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -20,407 +20,410 @@ #include "gpg_vars.h" void gpg_check_access_ins() { - unsigned int ref; - - ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; - - switch (G_gpg_vstate.io_ins) { - case INS_EXIT: - if (gpg_pin_is_verified(PIN_ID_PW2)) { - return; - } - break; - #ifdef GPG_LOG - #warning GPG_LOG activated - case INS_GET_LOG: - return; - #endif - - case INS_SELECT: - return; - case INS_GET_DATA: - case INS_GET_NEXT_DATA: - return; - - case INS_VERIFY: - return; - - case INS_CHANGE_REFERENCE_DATA: - return; - - case INS_RESET_RETRY_COUNTER: - if (gpg_pin_is_verified(PIN_ID_PW3) || gpg_pin_is_verified(PIN_ID_RC)) { - return; - } - break; - - case INS_PUT_DATA: - case INS_PUT_DATA_ODD: - return; - - case INS_GEN_ASYM_KEYPAIR: - if (G_gpg_vstate.io_p1 == 0x81) { - return; - } - if (gpg_pin_is_verified(PIN_ID_PW3)) { - return; - } - break; - - case INS_MSE: - return; - - case INS_PSO: - if ((ref == 0x9e9a) && gpg_pin_is_verified(PIN_ID_PW1)) { - // pso:sign - if (N_gpg_pstate->PW_status[0] == 0) { - gpg_pin_set_verified(PIN_ID_PW1, 0); - } - return; - } - if (((ref == 0x8086) || (ref == 0x8680)) && gpg_pin_is_verified(PIN_ID_PW2)) { - // pso:dec/enc - return; - } - break; - - case INS_INTERNAL_AUTHENTICATE: - if (gpg_pin_is_verified(PIN_ID_PW2)) { - return; - } - break; - - case INS_GET_CHALLENGE: - return; + unsigned int ref; + + ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; + + switch (G_gpg_vstate.io_ins) { + case INS_EXIT: + if (gpg_pin_is_verified(PIN_ID_PW2)) { + return; + } + break; +#ifdef GPG_LOG +#warning GPG_LOG activated + case INS_GET_LOG: + return; +#endif - case INS_TERMINATE_DF: - if (gpg_pin_is_verified(PIN_ID_PW3)) { - return; + case INS_SELECT: + return; + case INS_GET_DATA: + case INS_GET_NEXT_DATA: + return; + + case INS_VERIFY: + return; + + case INS_CHANGE_REFERENCE_DATA: + return; + + case INS_RESET_RETRY_COUNTER: + if (gpg_pin_is_verified(PIN_ID_PW3) || gpg_pin_is_verified(PIN_ID_RC)) { + return; + } + break; + + case INS_PUT_DATA: + case INS_PUT_DATA_ODD: + return; + + case INS_GEN_ASYM_KEYPAIR: + if (G_gpg_vstate.io_p1 == 0x81) { + return; + } + if (gpg_pin_is_verified(PIN_ID_PW3)) { + return; + } + break; + + case INS_MSE: + return; + + case INS_PSO: + if ((ref == 0x9e9a) && gpg_pin_is_verified(PIN_ID_PW1)) { + // pso:sign + if (N_gpg_pstate->PW_status[0] == 0) { + gpg_pin_set_verified(PIN_ID_PW1, 0); + } + return; + } + if (((ref == 0x8086) || (ref == 0x8680)) && gpg_pin_is_verified(PIN_ID_PW2)) { + // pso:dec/enc + return; + } + break; + + case INS_INTERNAL_AUTHENTICATE: + if (gpg_pin_is_verified(PIN_ID_PW2)) { + return; + } + break; + + case INS_GET_CHALLENGE: + return; + + case INS_TERMINATE_DF: + if (gpg_pin_is_verified(PIN_ID_PW3)) { + return; + } + break; + + case INS_ACTIVATE_FILE: + return; + + default: + THROW(SW_INS_NOT_SUPPORTED); + break; } - break; - - case INS_ACTIVATE_FILE: - return; - - default: - THROW(SW_INS_NOT_SUPPORTED); - break; - } - THROW(SW_CONDITIONS_NOT_SATISFIED); + THROW(SW_CONDITIONS_NOT_SATISFIED); } void gpg_check_access_read_DO() { - unsigned int ref; - - ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; - - switch (ref) { - // ALWAYS - case 0x0101: - case 0x0102: - case 0x01F0: - case 0x01F1: - case 0x01F2: - case 0x01F8: - case 0x006E: - case 0x0065: - case 0x0073: - case 0x007A: - case 0x004F: - case 0x005E: - case 0x005B: - case 0x5F2D: - case 0x5F35: - case 0x5F50: - case 0x5F52: - case 0x7F21: - case 0x0093: - case 0x00C0: - case 0x00C1: - case 0x00C2: - case 0x00C3: - case 0x00C4: - case 0x00C5: - case 0x00C7: - case 0x00C8: - case 0x00C9: - case 0x00C6: - case 0x00CA: - case 0x00CD: - case 0x00CC: - case 0x00CE: - case 0x00CF: - case 0x00D0: - case 0x7F74: - case 0x7F66: - case 0x00D6: - case 0x00D7: - case 0x00D8: - return; - - // PW2 - case 0x0103: - if (gpg_pin_is_verified(PIN_ID_PW2)) { - return; - } - break; - - // PW3 - case 0x00B6: - case 0x00A4: - case 0x00B8: - case 0x0104: - if (gpg_pin_is_verified(PIN_ID_PW3)) { - return; + unsigned int ref; + + ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; + + switch (ref) { + // ALWAYS + case 0x0101: + case 0x0102: + case 0x01F0: + case 0x01F1: + case 0x01F2: + case 0x01F8: + case 0x006E: + case 0x0065: + case 0x0073: + case 0x007A: + case 0x004F: + case 0x005E: + case 0x005B: + case 0x5F2D: + case 0x5F35: + case 0x5F50: + case 0x5F52: + case 0x7F21: + case 0x0093: + case 0x00C0: + case 0x00C1: + case 0x00C2: + case 0x00C3: + case 0x00C4: + case 0x00C5: + case 0x00C7: + case 0x00C8: + case 0x00C9: + case 0x00C6: + case 0x00CA: + case 0x00CD: + case 0x00CC: + case 0x00CE: + case 0x00CF: + case 0x00D0: + case 0x7F74: + case 0x7F66: + case 0x00D6: + case 0x00D7: + case 0x00D8: + return; + + // PW2 + case 0x0103: + if (gpg_pin_is_verified(PIN_ID_PW2)) { + return; + } + break; + + // PW3 + case 0x00B6: + case 0x00A4: + case 0x00B8: + case 0x0104: + if (gpg_pin_is_verified(PIN_ID_PW3)) { + return; + } + break; } - break; - } - THROW(SW_CONDITIONS_NOT_SATISFIED); + THROW(SW_CONDITIONS_NOT_SATISFIED); } char debugbuff[5]; void gpg_check_access_write_DO() { - unsigned int ref; - - ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; - - switch (ref) { - // PW2 - case 0x0101: - case 0x0103: - case 0x01F2: - if (gpg_pin_is_verified(PIN_ID_PW2)) { - return; + unsigned int ref; + + ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; + + switch (ref) { + // PW2 + case 0x0101: + case 0x0103: + case 0x01F2: + if (gpg_pin_is_verified(PIN_ID_PW2)) { + return; + } + break; + + // PW3 + case 0x3FFF: // only used for putkey under PW3 control + case 0x4f: + case 0x0102: + case 0x0104: + case 0x01F1: + case 0x01F8: + case 0x005E: + case 0x005B: + case 0x5F2D: + case 0x5F35: + case 0x5F50: + case 0x5F48: + case 0x7F21: + case 0x00B6: + case 0x00A4: + case 0x00B8: + case 0x00C1: + case 0x00C2: + case 0x00C3: + case 0x00C4: + case 0x00C5: + case 0x00C7: + case 0x00C8: + case 0x00C9: + case 0x00C6: + case 0x00CA: + case 0x00CB: + case 0x00CC: + case 0x00CD: + case 0x00CE: + case 0x00CF: + case 0x00D0: + case 0x00D1: + case 0x00D2: + case 0x00D3: + case 0x00D5: + case 0x00F4: + case 0x00D6: + case 0x00D7: + case 0x00D8: + if (gpg_pin_is_verified(PIN_ID_PW3)) { + return; + } + break; } - break; - - // PW3 - case 0x3FFF: // only used for putkey under PW3 control - case 0x4f: - case 0x0102: - case 0x0104: - case 0x01F1: - case 0x01F8: - case 0x005E: - case 0x005B: - case 0x5F2D: - case 0x5F35: - case 0x5F50: - case 0x5F48: - case 0x7F21: - case 0x00B6: - case 0x00A4: - case 0x00B8: - case 0x00C1: - case 0x00C2: - case 0x00C3: - case 0x00C4: - case 0x00C5: - case 0x00C7: - case 0x00C8: - case 0x00C9: - case 0x00C6: - case 0x00CA: - case 0x00CB: - case 0x00CC: - case 0x00CD: - case 0x00CE: - case 0x00CF: - case 0x00D0: - case 0x00D1: - case 0x00D2: - case 0x00D3: - case 0x00D5: - case 0x00F4: - case 0x00D6: - case 0x00D7: - case 0x00D8: - if (gpg_pin_is_verified(PIN_ID_PW3)) { - return; - } - break; - } - THROW(SW_CONDITIONS_NOT_SATISFIED); + THROW(SW_CONDITIONS_NOT_SATISFIED); } /* assume command is fully received */ int gpg_dispatch() { - unsigned int tag, t, l; - int sw; - - if ((G_gpg_vstate.io_cla != 0x00) && (G_gpg_vstate.io_cla != 0x10) && (G_gpg_vstate.io_cla != 0xEF)) { - THROW(SW_CLA_NOT_SUPPORTED); - return SW_CLA_NOT_SUPPORTED; - } - - tag = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; - - switch (G_gpg_vstate.io_ins) { - #ifdef GPG_LOG - case INS_GET_LOG: - gpg_io_discard(1); - gpg_io_insert(G_gpg_vstate.log_buffer, 32); - return SW_OK; - #endif - - /* --- SELECT --- */ - case INS_SELECT: - sw = gpg_apdu_select(); - return sw; - break; + unsigned int tag, t, l; + int sw; - /* --- ACTIVATE/TERMINATE FILE --- */ - case INS_ACTIVATE_FILE: - gpg_io_discard(0); - if (N_gpg_pstate->histo[7] == STATE_TERMINATE) { - gpg_install(STATE_ACTIVATE); - } - return (SW_OK); - break; - - case INS_TERMINATE_DF: - gpg_io_discard(0); - if (gpg_pin_is_verified(PIN_ID_PW3) || (N_gpg_pstate->PW3.counter == 0)) { - gpg_install(STATE_TERMINATE); - return (SW_OK); - break; + if ((G_gpg_vstate.io_cla != 0x00) && (G_gpg_vstate.io_cla != 0x10) && + (G_gpg_vstate.io_cla != 0xEF)) { + THROW(SW_CLA_NOT_SUPPORTED); + return SW_CLA_NOT_SUPPORTED; } - THROW(SW_CONDITIONS_NOT_SATISFIED); - break; - } - /* Other commands allowed if not terminated */ - if (N_gpg_pstate->histo[7] != 0x07) { - THROW(SW_STATE_TERMINATED); - } + tag = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; - /* Process */ - gpg_check_access_ins(); - - switch (G_gpg_vstate.io_ins) { -#ifdef GPG_DEBUG_APDU - case 0x42: - sw = debug_apdu(); - break; + switch (G_gpg_vstate.io_ins) { +#ifdef GPG_LOG + case INS_GET_LOG: + gpg_io_discard(1); + gpg_io_insert(G_gpg_vstate.log_buffer, 32); + return SW_OK; #endif - case INS_EXIT: - os_sched_exit(0); - sw = SW_OK; - break; - - /* --- CHALLENGE --- */ - case INS_GET_CHALLENGE: - sw = gpg_apdu_get_challenge(); - break; - - /* --- DATA --- */ - - case INS_SELECT_DATA: - if ((G_gpg_vstate.io_p1 > 2) || (G_gpg_vstate.io_p2 != 0x04)) { - THROW(SW_WRONG_P1P2); - } - gpg_io_fetch_tl(&t, &l); - if (t != 0x60) { - // TODO add l check - THROW(SW_DATA_INVALID); - } - gpg_io_fetch_tl(&t, &l); - if (t != 0x5C) { - // TODO add l check - THROW(SW_WRONG_DATA); - } - if (l == 1) { - tag = gpg_io_fetch_u8(); - } else if (l == 2) { - tag = gpg_io_fetch_u16(); - } else { - THROW(SW_WRONG_DATA); - } - sw = gpg_apdu_select_data(tag, G_gpg_vstate.io_p1); - break; - - case INS_GET_DATA: - gpg_check_access_read_DO(); - switch (tag) { - case 0x00B6: - case 0x00A4: - case 0x00B8: - sw = gpg_apdu_get_key_data(tag); - break; - default: - sw = gpg_apdu_get_data(tag); - break; + /* --- SELECT --- */ + case INS_SELECT: + sw = gpg_apdu_select(); + return sw; + break; + + /* --- ACTIVATE/TERMINATE FILE --- */ + case INS_ACTIVATE_FILE: + gpg_io_discard(0); + if (N_gpg_pstate->histo[7] == STATE_TERMINATE) { + gpg_install(STATE_ACTIVATE); + } + return (SW_OK); + break; + + case INS_TERMINATE_DF: + gpg_io_discard(0); + if (gpg_pin_is_verified(PIN_ID_PW3) || (N_gpg_pstate->PW3.counter == 0)) { + gpg_install(STATE_TERMINATE); + return (SW_OK); + break; + } + THROW(SW_CONDITIONS_NOT_SATISFIED); + break; } - break; - - case INS_GET_NEXT_DATA: - gpg_check_access_read_DO(); - sw = gpg_apdu_get_next_data(tag); - break; - - case INS_PUT_DATA_ODD: - case INS_PUT_DATA: - gpg_check_access_write_DO(); - switch (tag) { - case 0x00B6: - case 0x00A4: - case 0x00B8: - sw = gpg_apdu_put_key_data(tag); - break; - default: - sw = gpg_apdu_put_data(tag); - break; - } - break; - - /* --- PIN -- */ - case INS_VERIFY: - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || (G_gpg_vstate.io_p2 == 0x83)) { - sw = gpg_apdu_verify(); - break; - } - THROW(SW_INCORRECT_P1P2); - case INS_CHANGE_REFERENCE_DATA: - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x83)) { - sw = gpg_apdu_change_ref_data(); - break; + /* Other commands allowed if not terminated */ + if (N_gpg_pstate->histo[7] != STATE_ACTIVATE) { + THROW(SW_STATE_TERMINATED); } - THROW(SW_INCORRECT_P1P2); - - case INS_RESET_RETRY_COUNTER: - if ((G_gpg_vstate.io_p2 == 0x81) && ((G_gpg_vstate.io_p1 == 0) || (G_gpg_vstate.io_p1 == 2))) { - sw = gpg_apdu_reset_retry_counter(); - break; - } - THROW(SW_INCORRECT_P1P2); - - /* --- Key Management --- */ - case INS_GEN_ASYM_KEYPAIR: - sw = gpg_apdu_gen(); - break; - /* --- MSE --- */ - case INS_MSE: - sw = gpg_apdu_mse(tag); - break; + /* Process */ + gpg_check_access_ins(); - /* --- PSO --- */ - case INS_PSO: - sw = gpg_apdu_pso(); - break; - - case INS_INTERNAL_AUTHENTICATE: - sw = gpg_apdu_internal_authenticate(); - break; + switch (G_gpg_vstate.io_ins) { +#ifdef GPG_DEBUG_APDU + case 0x42: + sw = debug_apdu(); + break; +#endif - default: - THROW(SW_INS_NOT_SUPPORTED); - break; - } + case INS_EXIT: + os_sched_exit(0); + sw = SW_OK; + break; + + /* --- CHALLENGE --- */ + case INS_GET_CHALLENGE: + sw = gpg_apdu_get_challenge(); + break; + + /* --- DATA --- */ + + case INS_SELECT_DATA: + if ((G_gpg_vstate.io_p1 > 2) || (G_gpg_vstate.io_p2 != 0x04)) { + THROW(SW_WRONG_P1P2); + } + gpg_io_fetch_tl(&t, &l); + if (t != 0x60) { + // TODO add l check + THROW(SW_DATA_INVALID); + } + gpg_io_fetch_tl(&t, &l); + if (t != 0x5C) { + // TODO add l check + THROW(SW_WRONG_DATA); + } + if (l == 1) { + tag = gpg_io_fetch_u8(); + } else if (l == 2) { + tag = gpg_io_fetch_u16(); + } else { + THROW(SW_WRONG_DATA); + } + sw = gpg_apdu_select_data(tag, G_gpg_vstate.io_p1); + break; + + case INS_GET_DATA: + gpg_check_access_read_DO(); + switch (tag) { + case 0x00B6: + case 0x00A4: + case 0x00B8: + sw = gpg_apdu_get_key_data(tag); + break; + default: + sw = gpg_apdu_get_data(tag); + break; + } + break; + + case INS_GET_NEXT_DATA: + gpg_check_access_read_DO(); + sw = gpg_apdu_get_next_data(tag); + break; + + case INS_PUT_DATA_ODD: + case INS_PUT_DATA: + gpg_check_access_write_DO(); + switch (tag) { + case 0x00B6: + case 0x00A4: + case 0x00B8: + sw = gpg_apdu_put_key_data(tag); + break; + default: + sw = gpg_apdu_put_data(tag); + break; + } + break; + + /* --- PIN -- */ + case INS_VERIFY: + if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || + (G_gpg_vstate.io_p2 == 0x83)) { + sw = gpg_apdu_verify(); + break; + } + THROW(SW_INCORRECT_P1P2); + + case INS_CHANGE_REFERENCE_DATA: + if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x83)) { + sw = gpg_apdu_change_ref_data(); + break; + } + THROW(SW_INCORRECT_P1P2); + + case INS_RESET_RETRY_COUNTER: + if ((G_gpg_vstate.io_p2 == 0x81) && + ((G_gpg_vstate.io_p1 == 0) || (G_gpg_vstate.io_p1 == 2))) { + sw = gpg_apdu_reset_retry_counter(); + break; + } + THROW(SW_INCORRECT_P1P2); + + /* --- Key Management --- */ + case INS_GEN_ASYM_KEYPAIR: + sw = gpg_apdu_gen(); + break; + + /* --- MSE --- */ + case INS_MSE: + sw = gpg_apdu_mse(tag); + break; + + /* --- PSO --- */ + case INS_PSO: + sw = gpg_apdu_pso(); + break; + + case INS_INTERNAL_AUTHENTICATE: + sw = gpg_apdu_internal_authenticate(); + break; + + default: + THROW(SW_INS_NOT_SUPPORTED); + break; + } - return sw; + return sw; } diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 8f99db4..1273d23 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -23,13 +23,13 @@ * @out seed 32 bytes master seed for given slot */ void gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { - unsigned int path[2]; - unsigned char chain[32]; + unsigned int path[2]; + unsigned char chain[32]; - memset(chain, 0, 32); - path[0] = 0x80475047; - path[1] = slot + 1; - os_perso_derive_node_bip32(CX_CURVE_SECP256K1, path, 2, seed, chain); + memset(chain, 0, 32); + path[0] = 0x80475047; + path[1] = slot + 1; + os_perso_derive_node_bip32(CX_CURVE_SECP256K1, path, 2, seed, chain); } /* @in Sn master seed slot number @@ -40,245 +40,265 @@ void gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { */ void gpg_pso_derive_key_seed(unsigned char *Sn, unsigned char *key_name, - unsigned int idx, + unsigned int idx, unsigned char *Ski, - unsigned int Ski_len) { - unsigned char h[32]; - h[0] = idx >> 8; - h[1] = idx; + unsigned int Ski_len) { + unsigned char h[32]; + h[0] = idx >> 8; + h[1] = idx; - cx_sha256_init(&G_gpg_vstate.work.md.sha256); - cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha256, 0, Sn, 32, NULL, 0); - cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha256, 0, (unsigned char *)key_name, 4, NULL, 0); - cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha256, CX_LAST, h, 2, h, 32); + cx_sha256_init(&G_gpg_vstate.work.md.sha256); + cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, Sn, 32, NULL, 0); + cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, (unsigned char *) key_name, 4, NULL, 0); + cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, CX_LAST, h, 2, h, 32); #ifdef GPG_SHAKE256 - cx_shake256_init(&G_gpg_vstate.work.md.sha3, Ski_len); - cx_sha3_update(&G_gpg_vstate.work.md.sha3, h, 32); - cx_sha3_final(&G_gpg_vstate.work.md.sha3, Ski); + cx_shake256_init(&G_gpg_vstate.work.md.sha3, Ski_len); + cx_sha3_update(&G_gpg_vstate.work.md.sha3, h, 32); + cx_sha3_final(&G_gpg_vstate.work.md.sha3, Ski); #else - cx_sha3_xof_init(&G_gpg_vstate.work.md.sha3, 256, Ski_len); - cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha3, CX_LAST, h, 32, Ski, Ski_len); + cx_sha3_xof_init(&G_gpg_vstate.work.md.sha3, 256, Ski_len); + cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha3, CX_LAST, h, 32, Ski, Ski_len); #endif } /* assume command is fully received */ int gpg_apdu_gen() { - unsigned int t, l, ksz, reset_cnt; - gpg_key_t * keygpg; - unsigned char seed[66]; - unsigned char *name; + unsigned int t, l, ksz, reset_cnt; + gpg_key_t *keygpg; + unsigned char seed[66]; + unsigned char *name; - switch ((G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2) { - case 0x8000: - case 0x8001: - case 0x8100: - break; - default: - THROW(SW_INCORRECT_P1P2); - return SW_INCORRECT_P1P2; - } + switch ((G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2) { + case 0x8000: + case 0x8001: + case 0x8100: + break; + default: + THROW(SW_INCORRECT_P1P2); + return SW_INCORRECT_P1P2; + } - if (G_gpg_vstate.io_lc != 2) { - THROW(SW_WRONG_LENGTH); - return SW_WRONG_LENGTH; - } + if (G_gpg_vstate.io_lc != 2) { + THROW(SW_WRONG_LENGTH); + return SW_WRONG_LENGTH; + } - gpg_io_fetch_tl(&t, &l); - gpg_io_discard(1); - reset_cnt = 0; - switch (t) { - case 0xB6: - keygpg = &G_gpg_vstate.kslot->sig; - name = (unsigned char *)PIC("sig "); + gpg_io_fetch_tl(&t, &l); + gpg_io_discard(1); reset_cnt = 0; - break; - case 0xA4: - keygpg = &G_gpg_vstate.kslot->aut; - name = (unsigned char *)PIC("aut "); - break; - case 0xB8: - keygpg = &G_gpg_vstate.kslot->dec; - name = (unsigned char *)PIC("dec "); - break; - default: - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } + switch (t) { + case 0xB6: + keygpg = &G_gpg_vstate.kslot->sig; + name = (unsigned char *) PIC("sig "); + reset_cnt = 0; + break; + case 0xA4: + keygpg = &G_gpg_vstate.kslot->aut; + name = (unsigned char *) PIC("aut "); + break; + case 0xB8: + keygpg = &G_gpg_vstate.kslot->dec; + name = (unsigned char *) PIC("dec "); + break; + default: + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } - switch ((G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2) { - // -- generate keypair --- - case 0x8000: - case 0x8001: - // RSA - if (keygpg->attributes.value[0] == 0x01) { - unsigned char * pq; - cx_rsa_public_key_t * rsa_pub; - cx_rsa_private_key_t *rsa_priv, *pkey; - unsigned int pkey_size; + switch ((G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2) { + // -- generate keypair --- + case 0x8000: + case 0x8001: + // RSA + if (keygpg->attributes.value[0] == 0x01) { + unsigned char *pq; + cx_rsa_public_key_t *rsa_pub; + cx_rsa_private_key_t *rsa_priv, *pkey; + unsigned int pkey_size; - ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; - ksz = ksz >> 3; - rsa_pub = (cx_rsa_public_key_t *)&G_gpg_vstate.work.rsa.public; - rsa_priv = (cx_rsa_private_key_t *)&G_gpg_vstate.work.rsa.private; - pkey = &keygpg->priv_key.rsa; - switch (ksz) { - case 1024 / 8: - pkey_size = sizeof(cx_rsa_1024_private_key_t); - break; - case 2048 / 8: - pkey_size = sizeof(cx_rsa_2048_private_key_t); - break; - case 3072 / 8: - pkey_size = sizeof(cx_rsa_3072_private_key_t); - break; - case 4096 / 8: - pkey_size = sizeof(cx_rsa_4096_private_key_t); - break; - default: - THROW(SW_WRONG_DATA); - } - pq = NULL; - if ((G_gpg_vstate.io_p2 == 0x01) || (G_gpg_vstate.seed_mode)) { - pq = &rsa_pub->n[0]; - unsigned int size; - size = ksz >> 1; - gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); - gpg_pso_derive_key_seed(seed, name, 1, pq, size); - gpg_pso_derive_key_seed(seed, name, 2, pq + size, size); - *pq |= 0x80; - *(pq + size) |= 0x80; - cx_math_next_prime(pq, size); - cx_math_next_prime(pq + size, size); - } + ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; + ksz = ksz >> 3; + rsa_pub = (cx_rsa_public_key_t *) &G_gpg_vstate.work.rsa.public; + rsa_priv = (cx_rsa_private_key_t *) &G_gpg_vstate.work.rsa.private; + pkey = &keygpg->priv_key.rsa; + switch (ksz) { + case 1024 / 8: + pkey_size = sizeof(cx_rsa_1024_private_key_t); + break; + case 2048 / 8: + pkey_size = sizeof(cx_rsa_2048_private_key_t); + break; + case 3072 / 8: + pkey_size = sizeof(cx_rsa_3072_private_key_t); + break; + case 4096 / 8: + pkey_size = sizeof(cx_rsa_4096_private_key_t); + break; + default: + THROW(SW_WRONG_DATA); + } + pq = NULL; + if ((G_gpg_vstate.io_p2 == 0x01) || (G_gpg_vstate.seed_mode)) { + pq = &rsa_pub->n[0]; + unsigned int size; + size = ksz >> 1; + gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); + gpg_pso_derive_key_seed(seed, name, 1, pq, size); + gpg_pso_derive_key_seed(seed, name, 2, pq + size, size); + *pq |= 0x80; + *(pq + size) |= 0x80; + cx_math_next_prime(pq, size); + cx_math_next_prime(pq + size, size); + } - cx_rsa_generate_pair(ksz, rsa_pub, rsa_priv, (const unsigned char *)N_gpg_pstate->default_RSA_exponent, 4, pq); + cx_rsa_generate_pair(ksz, + rsa_pub, + rsa_priv, + (const unsigned char *) N_gpg_pstate->default_RSA_exponent, + 4, + pq); - nvm_write(pkey, rsa_priv, pkey_size); - nvm_write(&keygpg->pub_key.rsa[0], rsa_pub->e, 4); - if (reset_cnt) { - reset_cnt = 0; - nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); - } - gpg_io_clear(); + nvm_write(pkey, rsa_priv, pkey_size); + nvm_write(&keygpg->pub_key.rsa[0], rsa_pub->e, 4); + if (reset_cnt) { + reset_cnt = 0; + nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); + } + gpg_io_clear(); - goto send_rsa_pub; - } - // ECC - if ((keygpg->attributes.value[0] == 18) || (keygpg->attributes.value[0] == 19) || - (keygpg->attributes.value[0] == 22)) { - unsigned int curve, keepprivate; - keepprivate = 0; - curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); - if (curve == CX_CURVE_NONE) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - if ((G_gpg_vstate.io_p2 == 0x01) || (G_gpg_vstate.seed_mode)) { - ksz = gpg_curve2domainlen(curve); - gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); - gpg_pso_derive_key_seed(seed, name, 1, seed, ksz); - cx_ecfp_init_private_key(curve, seed, ksz, &G_gpg_vstate.work.ecfp.private); - keepprivate = 1; - } + goto send_rsa_pub; + } + // ECC + if ((keygpg->attributes.value[0] == 18) || (keygpg->attributes.value[0] == 19) || + (keygpg->attributes.value[0] == 22)) { + unsigned int curve, keepprivate; + keepprivate = 0; + curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); + if (curve == CX_CURVE_NONE) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; + } + if ((G_gpg_vstate.io_p2 == 0x01) || (G_gpg_vstate.seed_mode)) { + ksz = gpg_curve2domainlen(curve); + gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); + gpg_pso_derive_key_seed(seed, name, 1, seed, ksz); + cx_ecfp_init_private_key(curve, seed, ksz, &G_gpg_vstate.work.ecfp.private); + keepprivate = 1; + } - cx_ecfp_generate_pair(curve, &G_gpg_vstate.work.ecfp.public, &G_gpg_vstate.work.ecfp.private, keepprivate); - nvm_write(&keygpg->priv_key.ecfp, &G_gpg_vstate.work.ecfp.private, sizeof(cx_ecfp_private_key_t)); - nvm_write(&keygpg->pub_key.ecfp, &G_gpg_vstate.work.ecfp.public, sizeof(cx_ecfp_public_key_t)); - if (reset_cnt) { - reset_cnt = 0; - nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); - } - gpg_io_clear(); - goto send_ecc_pub; - } - break; + cx_ecfp_generate_pair(curve, + &G_gpg_vstate.work.ecfp.public, + &G_gpg_vstate.work.ecfp.private, + keepprivate); + nvm_write(&keygpg->priv_key.ecfp, + &G_gpg_vstate.work.ecfp.private, + sizeof(cx_ecfp_private_key_t)); + nvm_write(&keygpg->pub_key.ecfp, + &G_gpg_vstate.work.ecfp.public, + sizeof(cx_ecfp_public_key_t)); + if (reset_cnt) { + reset_cnt = 0; + nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); + } + gpg_io_clear(); + goto send_ecc_pub; + } + break; - // --- read pubkey --- - case 0x8100: - if (keygpg->attributes.value[0] == 0x01) { - /// read RSA - send_rsa_pub: - gpg_io_discard(1); - // check length - ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; - ksz = ksz >> 3; - gpg_io_mark(); - switch (ksz) { - case 1024 / 8: - if (keygpg->priv_key.rsa1024.size == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *)&keygpg->priv_key.rsa1024.n); - break; - case 2048 / 8: - if (keygpg->priv_key.rsa2048.size == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *)&keygpg->priv_key.rsa2048.n); - break; - case 3072 / 8: - if (keygpg->priv_key.rsa3072.size == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *)&keygpg->priv_key.rsa3072.n); - break; - case 4096 / 8: - if (keygpg->priv_key.rsa4096.size == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *)&keygpg->priv_key.rsa4096.n); - break; - } - gpg_io_insert_tlv(0x82, 4, keygpg->pub_key.rsa); + // --- read pubkey --- + case 0x8100: + if (keygpg->attributes.value[0] == 0x01) { + /// read RSA + send_rsa_pub: + gpg_io_discard(1); + // check length + ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; + ksz = ksz >> 3; + gpg_io_mark(); + switch (ksz) { + case 1024 / 8: + if (keygpg->priv_key.rsa1024.size == 0) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa1024.n); + break; + case 2048 / 8: + if (keygpg->priv_key.rsa2048.size == 0) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa2048.n); + break; + case 3072 / 8: + if (keygpg->priv_key.rsa3072.size == 0) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa3072.n); + break; + case 4096 / 8: + if (keygpg->priv_key.rsa4096.size == 0) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa4096.n); + break; + } + gpg_io_insert_tlv(0x82, 4, keygpg->pub_key.rsa); - l = G_gpg_vstate.io_length; - gpg_io_set_offset(IO_OFFSET_MARK); - gpg_io_insert_tl(0x7f49, l); - gpg_io_set_offset(IO_OFFSET_END); + l = G_gpg_vstate.io_length; + gpg_io_set_offset(IO_OFFSET_MARK); + gpg_io_insert_tl(0x7f49, l); + gpg_io_set_offset(IO_OFFSET_END); - return SW_OK; - } + return SW_OK; + } - if ((keygpg->attributes.value[0] == 18) || (keygpg->attributes.value[0] == 19) || - (keygpg->attributes.value[0] == 22)) { - unsigned int curve; - /// read ECC - send_ecc_pub: + if ((keygpg->attributes.value[0] == 18) || (keygpg->attributes.value[0] == 19) || + (keygpg->attributes.value[0] == 22)) { + unsigned int curve; + /// read ECC + send_ecc_pub: - if (keygpg->pub_key.ecfp256.W_len == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - gpg_io_discard(1); - gpg_io_mark(); - curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); - if (curve == CX_CURVE_Ed25519) { - memmove(G_gpg_vstate.work.io_buffer + 128, keygpg->pub_key.ecfp256.W, keygpg->pub_key.ecfp256.W_len); - cx_edward_compress_point(CX_CURVE_Ed25519, G_gpg_vstate.work.io_buffer + 128, 65); - gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 129); // 129: discard 02 - } else if (curve == CX_CURVE_Curve25519) { - unsigned int i, len; - len = keygpg->pub_key.ecfp256.W_len - 1; - for (i = 0; i <= len; i++) { - G_gpg_vstate.work.io_buffer[128 + i] = keygpg->pub_key.ecfp256.W[len - i]; - } - gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 128); - } else { - gpg_io_insert_tlv(0x86, keygpg->pub_key.ecfp256.W_len, (unsigned char *)&keygpg->pub_key.ecfp256.W); - } - l = G_gpg_vstate.io_length; - gpg_io_set_offset(IO_OFFSET_MARK); - gpg_io_insert_tl(0x7f49, l); - gpg_io_set_offset(IO_OFFSET_END); - return SW_OK; + if (keygpg->pub_key.ecfp256.W_len == 0) { + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return 0; + } + gpg_io_discard(1); + gpg_io_mark(); + curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); + if (curve == CX_CURVE_Ed25519) { + memmove(G_gpg_vstate.work.io_buffer + 128, + keygpg->pub_key.ecfp256.W, + keygpg->pub_key.ecfp256.W_len); + cx_edward_compress_point(CX_CURVE_Ed25519, + G_gpg_vstate.work.io_buffer + 128, + 65); + gpg_io_insert_tlv(0x86, + 32, + G_gpg_vstate.work.io_buffer + 129); // 129: discard 02 + } else if (curve == CX_CURVE_Curve25519) { + unsigned int i, len; + len = keygpg->pub_key.ecfp256.W_len - 1; + for (i = 0; i <= len; i++) { + G_gpg_vstate.work.io_buffer[128 + i] = keygpg->pub_key.ecfp256.W[len - i]; + } + gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 128); + } else { + gpg_io_insert_tlv(0x86, + keygpg->pub_key.ecfp256.W_len, + (unsigned char *) &keygpg->pub_key.ecfp256.W); + } + l = G_gpg_vstate.io_length; + gpg_io_set_offset(IO_OFFSET_MARK); + gpg_io_insert_tl(0x7f49, l); + gpg_io_set_offset(IO_OFFSET_END); + return SW_OK; + } + break; } - break; - } - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; } diff --git a/src/gpg_init.c b/src/gpg_init.c index 5599161..f79a147 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -19,7 +19,7 @@ #include "gpg_api.h" #include "gpg_vars.h" -#define SHORT(x) ((x) >> 8) & 0xFF, (x)&0xFF +#define SHORT(x) ((x) >> 8) & 0xFF, (x) &0xFF /* ----------------------*/ /* -- A Kind of Magic -- */ /* ----------------------*/ @@ -68,115 +68,132 @@ const unsigned char C_OID_BRAINPOOL512R1[9] = { // Ed25519/curve25519: 1.3.6.1.4.1.11591.15.1 const unsigned char C_OID_Ed25519[9] = { - 0x2B, 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0F, 0x01, + 0x2B, + 0x06, + 0x01, + 0x04, + 0x01, + 0xDA, + 0x47, + 0x0F, + 0x01, }; // Ed25519/curve25519: 1.3.6.1.4.1.11591.15.1 const unsigned char C_OID_cv25519[10] = { - 0x2B, 0x06, 0x01, 0x04, 0x01, 0x97, 0x55, 0x01, 0x05, 0x01, + 0x2B, + 0x06, + 0x01, + 0x04, + 0x01, + 0x97, + 0x55, + 0x01, + 0x05, + 0x01, }; unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len) { - if ((len == sizeof(C_OID_SECP256R1)) && (memcmp(oid, C_OID_SECP256R1, len) == 0)) { - return CX_CURVE_SECP256R1; - } - /* - if ( (len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len)==0) ) { - return CX_CURVE_SECP256K1; - } - - if ( (len == sizeof(C_OID_SECP384R1)) && (memcmp(oid, C_OID_SECP384R1, len)==0) ) { - return CX_CURVE_SECP384R1; - } - if ( (len == sizeof(C_OID_SECP521R1)) && (memcmp(oid, C_OID_SECP521R1, len)==0) ) { - return CX_CURVE_SECP521R1; - } - */ + if ((len == sizeof(C_OID_SECP256R1)) && (memcmp(oid, C_OID_SECP256R1, len) == 0)) { + return CX_CURVE_SECP256R1; + } + /* + if ( (len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len)==0) ) { + return CX_CURVE_SECP256K1; + } - /* - if ( (len == sizeof(C_OID_BRAINPOOL256R1)) && (memcmp(oid, C_OID_BRAINPOOL256R1, len)==0) ) { - return CX_CURVE_BrainPoolP256R1; - } - if ( (len == sizeof(C_OID_BRAINPOOL384R1)) && (memcmp(oid, C_OID_BRAINPOOL384R1, len)==0) ) { - return CX_CURVE_BrainPoolP384R1; - } - if ( (len == sizeof(C_OID_BRAINPOOL512R1)) && (memcmp(oid, C_OID_BRAINPOOL512R1, len)==0) ) { - return CX_CURVE_BrainPoolP512R1; - } - */ - if ((len == sizeof(C_OID_Ed25519)) && (memcmp(oid, C_OID_Ed25519, len) == 0)) { - return CX_CURVE_Ed25519; - } - - if ((len == sizeof(C_OID_cv25519)) && (memcmp(oid, C_OID_cv25519, len) == 0)) { - return CX_CURVE_Curve25519; - } - - /* - if ( (len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len)==0) ) { - return CX_CURVE_256K1; - } - if ( (len == sizeof(C_OID_BRAINPOOL256T1)) && (memcmp(oid, C_OID_BRAINPOOL256T1, len)==0) ) { - return CX_CURVE_BrainPoolP256T1; - } - */ - return CX_CURVE_NONE; + if ( (len == sizeof(C_OID_SECP384R1)) && (memcmp(oid, C_OID_SECP384R1, len)==0) ) { + return CX_CURVE_SECP384R1; + } + if ( (len == sizeof(C_OID_SECP521R1)) && (memcmp(oid, C_OID_SECP521R1, len)==0) ) { + return CX_CURVE_SECP521R1; + } + */ + + /* + if ( (len == sizeof(C_OID_BRAINPOOL256R1)) && (memcmp(oid, C_OID_BRAINPOOL256R1, len)==0) ) { + return CX_CURVE_BrainPoolP256R1; + } + if ( (len == sizeof(C_OID_BRAINPOOL384R1)) && (memcmp(oid, C_OID_BRAINPOOL384R1, len)==0) ) { + return CX_CURVE_BrainPoolP384R1; + } + if ( (len == sizeof(C_OID_BRAINPOOL512R1)) && (memcmp(oid, C_OID_BRAINPOOL512R1, len)==0) ) { + return CX_CURVE_BrainPoolP512R1; + } + */ + if ((len == sizeof(C_OID_Ed25519)) && (memcmp(oid, C_OID_Ed25519, len) == 0)) { + return CX_CURVE_Ed25519; + } + + if ((len == sizeof(C_OID_cv25519)) && (memcmp(oid, C_OID_cv25519, len) == 0)) { + return CX_CURVE_Curve25519; + } + + /* + if ( (len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len)==0) ) { + return CX_CURVE_256K1; + } + if ( (len == sizeof(C_OID_BRAINPOOL256T1)) && (memcmp(oid, C_OID_BRAINPOOL256T1, len)==0) ) { + return CX_CURVE_BrainPoolP256T1; + } + */ + return CX_CURVE_NONE; } unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len) { - switch (cv) { - case CX_CURVE_SECP256R1: - *len = sizeof(C_OID_SECP256R1); - return (unsigned char *)PIC(C_OID_SECP256R1); - - /* - case CX_CURVE_SECP256K1: - *len = sizeof(C_OID_SECP256K1); - return (unsigned char*)PIC(C_OID_SECP256K1); - - case CX_CURVE_SECP384R1: - *len = sizeof(C_OID_SECP384R1); - return (unsigned char*)PIC(C_OID_SECP384R1); - - case CX_CURVE_SECP521R1: - *len = sizeof(C_OID_SECP521R1); - return (unsigned char*)PIC(C_OID_SECP521R1); - */ - - /* - case CX_CURVE_BrainPoolP256R1: - *len = sizeof(C_OID_SECP256R1); - return (unsigned char*)PIC(C_OID_SECP256R1); - - case CX_CURVE_BrainPoolP384R1: - *len = sizeof(C_OID_SECP384R1); - return (unsigned char*)PIC(C_OID_SECP384R1); - - case CX_CURVE_BrainPoolP512R1: - *len = sizeof(C_OID_SECP521R1); - return (unsigned char*)PIC(C_OID_SECP521R1); - */ - case CX_CURVE_Ed25519: - *len = sizeof(C_OID_Ed25519); - return (unsigned char *)PIC(C_OID_Ed25519); - - case CX_CURVE_Curve25519: - *len = sizeof(C_OID_cv25519); - return (unsigned char *)PIC(C_OID_cv25519); - } - - *len = 0; - return NULL; + switch (cv) { + case CX_CURVE_SECP256R1: + *len = sizeof(C_OID_SECP256R1); + return (unsigned char *) PIC(C_OID_SECP256R1); + + /* + case CX_CURVE_SECP256K1: + *len = sizeof(C_OID_SECP256K1); + return (unsigned char*)PIC(C_OID_SECP256K1); + + case CX_CURVE_SECP384R1: + *len = sizeof(C_OID_SECP384R1); + return (unsigned char*)PIC(C_OID_SECP384R1); + + case CX_CURVE_SECP521R1: + *len = sizeof(C_OID_SECP521R1); + return (unsigned char*)PIC(C_OID_SECP521R1); + */ + + /* + case CX_CURVE_BrainPoolP256R1: + *len = sizeof(C_OID_SECP256R1); + return (unsigned char*)PIC(C_OID_SECP256R1); + + case CX_CURVE_BrainPoolP384R1: + *len = sizeof(C_OID_SECP384R1); + return (unsigned char*)PIC(C_OID_SECP384R1); + + case CX_CURVE_BrainPoolP512R1: + *len = sizeof(C_OID_SECP521R1); + return (unsigned char*)PIC(C_OID_SECP521R1); + */ + case CX_CURVE_Ed25519: + *len = sizeof(C_OID_Ed25519); + return (unsigned char *) PIC(C_OID_Ed25519); + + case CX_CURVE_Curve25519: + *len = sizeof(C_OID_cv25519); + return (unsigned char *) PIC(C_OID_cv25519); + } + + *len = 0; + return NULL; } unsigned int gpg_curve2domainlen(unsigned int cv) { - switch (cv) { - case CX_CURVE_SECP256R1: - case CX_CURVE_Ed25519: - case CX_CURVE_Curve25519: - return 32; - } - return 0; + switch (cv) { + case CX_CURVE_SECP256R1: + case CX_CURVE_Ed25519: + case CX_CURVE_Curve25519: + return 32; + } + return 0; } /* -------------------------------*/ @@ -201,30 +218,49 @@ const unsigned char C_ext_capabilities[10] = { }; -const unsigned char C_ext_length[8] = {0x02, 0x02, SHORT(GPG_APDU_LENGTH), 0x02, 0x02, SHORT(GPG_APDU_LENGTH)}; +const unsigned char C_ext_length[8] = + {0x02, 0x02, SHORT(GPG_APDU_LENGTH), 0x02, 0x02, SHORT(GPG_APDU_LENGTH)}; /* ---------------------*/ /* -- default values -- */ /* ---------------------*/ -const unsigned char C_default_AID[] = {0xD2, 0x76, 0x00, 0x01, 0x24, 0x01, - // version - 0x03, 0x03, - // manufacturer - 0x2C, 0x97, - // serial - 0x00, 0x00, 0x00, 0x00, - // RFU - 0x00, 0x00}; - -const unsigned char C_default_Histo[] = {0x00, 0x31, - 0xC5, // select method: by DF/partialDF; IO-file:readbinary; RFU??? - 0x73, - 0xC0, // select method: by DF/partialDF , - 0x01, // data coding style: ontime/byte - 0x80, // chaining - 0x7F, // zero state - 0x90, 0x00}; +const unsigned char C_default_AID[] = { + // RID: Registered application provider Identifier + 0xD2, + 0x76, + 0x00, + 0x01, + 0x24, + // PIX: Proprietary application identifier extension + // application + 0x01, + // version + 0x03, + 0x03, + // manufacturer + 0x2C, + 0x97, + // serial + 0x00, + 0x00, + 0x00, + 0x00, + // RFU + 0x00, + 0x00}; + +const unsigned char C_default_Histo[] = { + 0x00, + 0x31, + 0xC5, // select method: by DF/partialDF; IO-file:readbinary; RFU??? + 0x73, + 0xC0, // select method: by DF/partialDF , + 0x01, // data coding style: ontime/byte + 0x80, // chaining + 0x7F, // zero state + 0x90, + 0x00}; // Default template: RSA2048 010800002001 / 010800002001 #if 1 @@ -232,18 +268,22 @@ const unsigned char C_default_AlgoAttr_sig[] = { // RSA 0x01, // Modulus default length 2048 - 0x08, 0x00, + 0x08, + 0x00, // PubExp length 32 - 0x00, 0x20, + 0x00, + 0x20, // std: e,p,q with modulus (n) 0x01}; const unsigned char C_default_AlgoAttr_dec[] = { // RSA 0x01, // Modulus default length 2048 - 0x08, 0x00, + 0x08, + 0x00, // PubExp length 32 - 0x00, 0x20, + 0x00, + 0x20, // std: e,p,q with modulus (n) 0x01}; #endif @@ -296,135 +336,138 @@ const unsigned char C_sha256_PW2[] = { /* ----------------------------------------------------------------------- */ void gpg_init() { - memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); - // first init ? - if (memcmp((void *)(N_gpg_pstate->magic), (void *)C_MAGIC, sizeof(C_MAGIC)) != 0) { - gpg_install(STATE_ACTIVATE); - gpg_nvm_write((void *)(N_gpg_pstate->magic), (void *)C_MAGIC, sizeof(C_MAGIC)); memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); - } - - // key conf - G_gpg_vstate.slot = N_gpg_pstate->config_slot[1]; - G_gpg_vstate.kslot = (gpg_key_slot_t *)&N_gpg_pstate->keys[G_gpg_vstate.slot]; - gpg_mse_reset(); - // pin conf - G_gpg_vstate.pinmode = N_gpg_pstate->config_pin[0]; - // ux conf - gpg_init_ux(); + // first init ? + if (memcmp((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)) != 0) { + gpg_install(STATE_ACTIVATE); + gpg_nvm_write((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)); + memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); + } + + // key conf + G_gpg_vstate.slot = N_gpg_pstate->config_slot[1]; + G_gpg_vstate.kslot = (gpg_key_slot_t *) &N_gpg_pstate->keys[G_gpg_vstate.slot]; + gpg_mse_reset(); + // pin conf + G_gpg_vstate.pinmode = N_gpg_pstate->config_pin[0]; + // ux conf + gpg_init_ux(); } void gpg_init_ux() { - G_gpg_vstate.ux_type = -1; - G_gpg_vstate.ux_key = -1; + G_gpg_vstate.ux_type = -1; + G_gpg_vstate.ux_key = -1; } /* ----------------------------------------------------------------------- */ /* --- Install/ReInstall GPGapp --- */ /* ----------------------------------------------------------------------- */ void gpg_install_slot(gpg_key_slot_t *slot) { - unsigned char tmp[4]; - unsigned int l; + unsigned char tmp[4]; + unsigned int l; - gpg_nvm_write(slot, 0, sizeof(gpg_key_slot_t)); + gpg_nvm_write(slot, 0, sizeof(gpg_key_slot_t)); - cx_rng(tmp, 4); - gpg_nvm_write((void *)(slot->serial), tmp, 4); + cx_rng(tmp, 4); + gpg_nvm_write((void *) (slot->serial), tmp, 4); - l = sizeof(C_default_AlgoAttr_sig); - gpg_nvm_write((void *)(&slot->sig.attributes.value), (void *)C_default_AlgoAttr_sig, l); - gpg_nvm_write((void *)(&slot->sig.attributes.length), &l, sizeof(unsigned int)); - gpg_nvm_write((void *)(&slot->aut.attributes.value), (void *)C_default_AlgoAttr_sig, l); - gpg_nvm_write((void *)(&slot->aut.attributes.length), &l, sizeof(unsigned int)); + l = sizeof(C_default_AlgoAttr_sig); + gpg_nvm_write((void *) (&slot->sig.attributes.value), (void *) C_default_AlgoAttr_sig, l); + gpg_nvm_write((void *) (&slot->sig.attributes.length), &l, sizeof(unsigned int)); + gpg_nvm_write((void *) (&slot->aut.attributes.value), (void *) C_default_AlgoAttr_sig, l); + gpg_nvm_write((void *) (&slot->aut.attributes.length), &l, sizeof(unsigned int)); - l = sizeof(C_default_AlgoAttr_dec); - gpg_nvm_write((void *)(&slot->dec.attributes.value), (void *)C_default_AlgoAttr_dec, l); - gpg_nvm_write((void *)(&slot->dec.attributes.length), &l, sizeof(unsigned int)); + l = sizeof(C_default_AlgoAttr_dec); + gpg_nvm_write((void *) (&slot->dec.attributes.value), (void *) C_default_AlgoAttr_dec, l); + gpg_nvm_write((void *) (&slot->dec.attributes.length), &l, sizeof(unsigned int)); - tmp[0] = 0x00; - tmp[1] = 0x20; - gpg_nvm_write((void *)(&slot->sig.UIF), &tmp, 2); - gpg_nvm_write((void *)(&slot->dec.UIF), &tmp, 2); - gpg_nvm_write((void *)(&slot->aut.UIF), &tmp, 2); + tmp[0] = 0x00; + tmp[1] = 0x20; + gpg_nvm_write((void *) (&slot->sig.UIF), &tmp, 2); + gpg_nvm_write((void *) (&slot->dec.UIF), &tmp, 2); + gpg_nvm_write((void *) (&slot->aut.UIF), &tmp, 2); } void gpg_install(unsigned char app_state) { - gpg_pin_t pin; - - // full reset data - gpg_nvm_write((void *)(N_gpg_pstate), NULL, sizeof(gpg_nv_state_t)); - - // historical bytes - memmove(G_gpg_vstate.work.io_buffer, C_default_Histo, sizeof(C_default_Histo)); - G_gpg_vstate.work.io_buffer[7] = app_state; - gpg_nvm_write((void *)(N_gpg_pstate->histo), G_gpg_vstate.work.io_buffer, sizeof(C_default_Histo)); - - // AID - memmove(G_gpg_vstate.work.io_buffer, C_default_AID, sizeof(C_default_AID)); - gpg_nvm_write((void *)(N_gpg_pstate->AID), &G_gpg_vstate.work.io_buffer, sizeof(C_default_AID)); - - - if (app_state == STATE_ACTIVATE) { - // default sex: none - G_gpg_vstate.work.io_buffer[0] = 0x39; - gpg_nvm_write((void *)(&N_gpg_pstate->sex), G_gpg_vstate.work.io_buffer, 1); - - // default PW1/PW2: 1 2 3 4 5 6 - memmove(pin.value, C_sha256_PW1, sizeof(C_sha256_PW1)); - pin.length = 6; - pin.counter = 3; - pin.ref = PIN_ID_PW1; - gpg_nvm_write((void *)(&N_gpg_pstate->PW1), &pin, sizeof(gpg_pin_t)); - - // default PW3: 1 2 3 4 5 6 7 8 - memmove(pin.value, C_sha256_PW2, sizeof(C_sha256_PW2)); - pin.length = 8; - pin.counter = 3; - pin.ref = PIN_ID_PW3; - gpg_nvm_write((void *)(&N_gpg_pstate->PW3), &pin, sizeof(gpg_pin_t)); - - // PWs status - G_gpg_vstate.work.io_buffer[0] = 1; - G_gpg_vstate.work.io_buffer[1] = GPG_MAX_PW_LENGTH; - G_gpg_vstate.work.io_buffer[2] = GPG_MAX_PW_LENGTH; - G_gpg_vstate.work.io_buffer[3] = GPG_MAX_PW_LENGTH; - gpg_nvm_write((void *)(&N_gpg_pstate->PW_status), G_gpg_vstate.work.io_buffer, 4); - - // config slot - G_gpg_vstate.work.io_buffer[0] = GPG_KEYS_SLOTS; - G_gpg_vstate.work.io_buffer[1] = 0; - G_gpg_vstate.work.io_buffer[2] = 3; // 3: selection by APDU and screen - gpg_nvm_write((void *)(&N_gpg_pstate->config_slot), G_gpg_vstate.work.io_buffer, 3); - - // config rsa pub - G_gpg_vstate.work.io_buffer[0] = (GPG_RSA_DEFAULT_PUB >> 24) & 0xFF; - G_gpg_vstate.work.io_buffer[1] = (GPG_RSA_DEFAULT_PUB >> 16) & 0xFF; - G_gpg_vstate.work.io_buffer[2] = (GPG_RSA_DEFAULT_PUB >> 8) & 0xFF; - G_gpg_vstate.work.io_buffer[3] = (GPG_RSA_DEFAULT_PUB >> 0) & 0xFF; - nvm_write((void *)(&N_gpg_pstate->default_RSA_exponent), G_gpg_vstate.work.io_buffer, 4); - - // config pin - G_gpg_vstate.work.io_buffer[0] = PIN_MODE_CONFIRM; - gpg_nvm_write((void *)(&N_gpg_pstate->config_pin), G_gpg_vstate.work.io_buffer, 1); - USBD_CCID_activate_pinpad(3); - - // default key template: RSA 2048) - for (int s = 0; s < GPG_KEYS_SLOTS; s++) { - gpg_install_slot((gpg_key_slot_t *)&N_gpg_pstate->keys[s]); + gpg_pin_t pin; + + // full reset data + gpg_nvm_write((void *) (N_gpg_pstate), NULL, sizeof(gpg_nv_state_t)); + + // historical bytes + memmove(G_gpg_vstate.work.io_buffer, C_default_Histo, sizeof(C_default_Histo)); + G_gpg_vstate.work.io_buffer[7] = app_state; + gpg_nvm_write((void *) (N_gpg_pstate->histo), + G_gpg_vstate.work.io_buffer, + sizeof(C_default_Histo)); + + // AID + memmove(G_gpg_vstate.work.io_buffer, C_default_AID, sizeof(C_default_AID)); + gpg_nvm_write((void *) (N_gpg_pstate->AID), + &G_gpg_vstate.work.io_buffer, + sizeof(C_default_AID)); + + if (app_state == STATE_ACTIVATE) { + // default sex: none + G_gpg_vstate.work.io_buffer[0] = 0x39; + gpg_nvm_write((void *) (&N_gpg_pstate->sex), G_gpg_vstate.work.io_buffer, 1); + + // default PW1/PW2: 1 2 3 4 5 6 + memmove(pin.value, C_sha256_PW1, sizeof(C_sha256_PW1)); + pin.length = 6; + pin.counter = 3; + pin.ref = PIN_ID_PW1; + gpg_nvm_write((void *) (&N_gpg_pstate->PW1), &pin, sizeof(gpg_pin_t)); + + // default PW3: 1 2 3 4 5 6 7 8 + memmove(pin.value, C_sha256_PW2, sizeof(C_sha256_PW2)); + pin.length = 8; + pin.counter = 3; + pin.ref = PIN_ID_PW3; + gpg_nvm_write((void *) (&N_gpg_pstate->PW3), &pin, sizeof(gpg_pin_t)); + + // PWs status + G_gpg_vstate.work.io_buffer[0] = 1; + G_gpg_vstate.work.io_buffer[1] = GPG_MAX_PW_LENGTH; + G_gpg_vstate.work.io_buffer[2] = GPG_MAX_PW_LENGTH; + G_gpg_vstate.work.io_buffer[3] = GPG_MAX_PW_LENGTH; + gpg_nvm_write((void *) (&N_gpg_pstate->PW_status), G_gpg_vstate.work.io_buffer, 4); + + // config slot + G_gpg_vstate.work.io_buffer[0] = GPG_KEYS_SLOTS; + G_gpg_vstate.work.io_buffer[1] = 0; + G_gpg_vstate.work.io_buffer[2] = 3; // 3: selection by APDU and screen + gpg_nvm_write((void *) (&N_gpg_pstate->config_slot), G_gpg_vstate.work.io_buffer, 3); + + // config rsa pub + G_gpg_vstate.work.io_buffer[0] = (GPG_RSA_DEFAULT_PUB >> 24) & 0xFF; + G_gpg_vstate.work.io_buffer[1] = (GPG_RSA_DEFAULT_PUB >> 16) & 0xFF; + G_gpg_vstate.work.io_buffer[2] = (GPG_RSA_DEFAULT_PUB >> 8) & 0xFF; + G_gpg_vstate.work.io_buffer[3] = (GPG_RSA_DEFAULT_PUB >> 0) & 0xFF; + nvm_write((void *) (&N_gpg_pstate->default_RSA_exponent), G_gpg_vstate.work.io_buffer, 4); + + // config pin + G_gpg_vstate.work.io_buffer[0] = PIN_MODE_CONFIRM; + gpg_nvm_write((void *) (&N_gpg_pstate->config_pin), G_gpg_vstate.work.io_buffer, 1); + USBD_CCID_activate_pinpad(3); + + // default key template: RSA 2048) + for (int s = 0; s < GPG_KEYS_SLOTS; s++) { + gpg_install_slot((gpg_key_slot_t *) &N_gpg_pstate->keys[s]); + } } - } } +// TODO: Check if needed void USBD_CCID_activate_pinpad(int enabled) { #ifdef HAVE_USB_CLASS_CCID - unsigned short length; - uint8_t * cfgDesc; - unsigned char e; - e = enabled ? 3 : 0; - length = 0; - cfgDesc = USBD_GetCfgDesc_impl(&length); - nvm_write(cfgDesc + (length - 16), &e, 1); + //unsigned short length = 0; + //uint8_t *cfgDesc = NULL; + unsigned char e; + e = enabled ? 3 : 0; + //cfgDesc = USBD_GetCfgDesc_impl(&length); + //nvm_write(cfgDesc + (length - 16), &e, 1); #else - UNUSED(enabled); + UNUSED(enabled); #endif } diff --git a/src/gpg_io.c b/src/gpg_io.c index 198dbab..edcf085 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -30,38 +30,38 @@ /* ----------------------------------------------------------------------- */ void gpg_io_set_offset(unsigned int offset) { - if (offset == IO_OFFSET_END) { - G_gpg_vstate.io_offset = G_gpg_vstate.io_length; - } else if (offset == IO_OFFSET_MARK) { - G_gpg_vstate.io_offset = G_gpg_vstate.io_mark; - } else if (offset < G_gpg_vstate.io_length) { - G_gpg_vstate.io_offset = G_gpg_vstate.io_length; - } else { - THROW(ERROR_IO_OFFSET); - return; - } + if (offset == IO_OFFSET_END) { + G_gpg_vstate.io_offset = G_gpg_vstate.io_length; + } else if (offset == IO_OFFSET_MARK) { + G_gpg_vstate.io_offset = G_gpg_vstate.io_mark; + } else if (offset < G_gpg_vstate.io_length) { + G_gpg_vstate.io_offset = G_gpg_vstate.io_length; + } else { + THROW(ERROR_IO_OFFSET); + return; + } } void gpg_io_mark() { - G_gpg_vstate.io_mark = G_gpg_vstate.io_offset; + G_gpg_vstate.io_mark = G_gpg_vstate.io_offset; } void gpg_io_inserted(unsigned int len) { - G_gpg_vstate.io_offset += len; - G_gpg_vstate.io_length += len; + G_gpg_vstate.io_offset += len; + G_gpg_vstate.io_length += len; } void gpg_io_discard(int clear) { - G_gpg_vstate.io_length = 0; - G_gpg_vstate.io_offset = 0; - G_gpg_vstate.io_mark = 0; - if (clear) { - gpg_io_clear(); - } + G_gpg_vstate.io_length = 0; + G_gpg_vstate.io_offset = 0; + G_gpg_vstate.io_mark = 0; + if (clear) { + gpg_io_clear(); + } } void gpg_io_clear() { - memset(G_gpg_vstate.work.io_buffer, 0, GPG_IO_BUFFER_LENGTH); + memset(G_gpg_vstate.work.io_buffer, 0, GPG_IO_BUFFER_LENGTH); } /* ----------------------------------------------------------------------- */ @@ -69,72 +69,73 @@ void gpg_io_clear() { /* ----------------------------------------------------------------------- */ void gpg_io_hole(unsigned int sz) { - if ((G_gpg_vstate.io_length + sz) > GPG_IO_BUFFER_LENGTH) { - THROW(ERROR_IO_FULL); - return; - } - memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + sz, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, G_gpg_vstate.io_length - G_gpg_vstate.io_offset); - G_gpg_vstate.io_length += sz; + if ((G_gpg_vstate.io_length + sz) > GPG_IO_BUFFER_LENGTH) { + THROW(ERROR_IO_FULL); + return; + } + memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + sz, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + G_gpg_vstate.io_length - G_gpg_vstate.io_offset); + G_gpg_vstate.io_length += sz; } void gpg_io_insert(unsigned char const *buff, unsigned int len) { - gpg_io_hole(len); - memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, buff, len); - G_gpg_vstate.io_offset += len; + gpg_io_hole(len); + memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, buff, len); + G_gpg_vstate.io_offset += len; } void gpg_io_insert_u32(unsigned int v32) { - gpg_io_hole(4); - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v32 >> 24; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] = v32 >> 16; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] = v32 >> 8; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 3] = v32 >> 0; - G_gpg_vstate.io_offset += 4; + gpg_io_hole(4); + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v32 >> 24; + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] = v32 >> 16; + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] = v32 >> 8; + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 3] = v32 >> 0; + G_gpg_vstate.io_offset += 4; } void gpg_io_insert_u24(unsigned int v24) { - gpg_io_hole(3); - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v24 >> 16; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] = v24 >> 8; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] = v24 >> 0; - G_gpg_vstate.io_offset += 3; + gpg_io_hole(3); + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v24 >> 16; + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] = v24 >> 8; + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] = v24 >> 0; + G_gpg_vstate.io_offset += 3; } void gpg_io_insert_u16(unsigned int v16) { - gpg_io_hole(2); - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v16 >> 8; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] = v16 >> 0; - G_gpg_vstate.io_offset += 2; + gpg_io_hole(2); + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v16 >> 8; + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] = v16 >> 0; + G_gpg_vstate.io_offset += 2; } void gpg_io_insert_u8(unsigned int v8) { - gpg_io_hole(1); - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v8; - G_gpg_vstate.io_offset += 1; + gpg_io_hole(1); + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v8; + G_gpg_vstate.io_offset += 1; } void gpg_io_insert_t(unsigned int T) { - if (T & 0xFF00) { - gpg_io_insert_u16(T); - } else { - gpg_io_insert_u8(T); - } + if (T & 0xFF00) { + gpg_io_insert_u16(T); + } else { + gpg_io_insert_u8(T); + } } void gpg_io_insert_tl(unsigned int T, unsigned int L) { - gpg_io_insert_t(T); - if (L < 128) { - gpg_io_insert_u8(L); - } else if (L < 256) { - gpg_io_insert_u16(0x8100 | L); - } else { - gpg_io_insert_u8(0x82); - gpg_io_insert_u16(L); - } + gpg_io_insert_t(T); + if (L < 128) { + gpg_io_insert_u8(L); + } else if (L < 256) { + gpg_io_insert_u16(0x8100 | L); + } else { + gpg_io_insert_u8(0x82); + gpg_io_insert_u16(L); + } } void gpg_io_insert_tlv(unsigned int T, unsigned int L, unsigned char const *V) { - gpg_io_insert_tl(T, L); - gpg_io_insert(V, L); + gpg_io_insert_tl(T, L); + gpg_io_insert(V, L); } /* ----------------------------------------------------------------------- */ @@ -142,87 +143,87 @@ void gpg_io_insert_tlv(unsigned int T, unsigned int L, unsigned char const *V) { /* ----------------------------------------------------------------------- */ unsigned int gpg_io_fetch_u32() { - unsigned int v32; - v32 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 24) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 16) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] << 8) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 3] << 0)); - G_gpg_vstate.io_offset += 4; - return v32; + unsigned int v32; + v32 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 24) | + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 16) | + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] << 8) | + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 3] << 0)); + G_gpg_vstate.io_offset += 4; + return v32; } unsigned int gpg_io_fetch_u24() { - unsigned int v24; - v24 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 16) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 8) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] << 0)); - G_gpg_vstate.io_offset += 3; - return v24; + unsigned int v24; + v24 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 16) | + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 8) | + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] << 0)); + G_gpg_vstate.io_offset += 3; + return v24; } unsigned int gpg_io_fetch_u16() { - unsigned int v16; - v16 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 8) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 0)); - G_gpg_vstate.io_offset += 2; - return v16; + unsigned int v16; + v16 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 8) | + (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 0)); + G_gpg_vstate.io_offset += 2; + return v16; } unsigned int gpg_io_fetch_u8() { - unsigned int v8; - v8 = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; - G_gpg_vstate.io_offset += 1; - return v8; + unsigned int v8; + v8 = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; + G_gpg_vstate.io_offset += 1; + return v8; } int gpg_io_fetch_t(unsigned int *T) { - *T = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; - G_gpg_vstate.io_offset++; - if ((*T & 0x1F) == 0x1F) { - *T = (*T << 8) | G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; + *T = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; G_gpg_vstate.io_offset++; - } - return 0; + if ((*T & 0x1F) == 0x1F) { + *T = (*T << 8) | G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; + G_gpg_vstate.io_offset++; + } + return 0; } int gpg_io_fetch_l(unsigned int *L) { - *L = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; - - if ((*L & 0x80) != 0) { - *L &= 0x7F; - if (*L == 1) { - *L = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1]; - G_gpg_vstate.io_offset += 2; - } else if (*L == 2) { - *L = (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 8) | - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2]; - G_gpg_vstate.io_offset += 3; + *L = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; + + if ((*L & 0x80) != 0) { + *L &= 0x7F; + if (*L == 1) { + *L = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1]; + G_gpg_vstate.io_offset += 2; + } else if (*L == 2) { + *L = (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 8) | + G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2]; + G_gpg_vstate.io_offset += 3; + } else { + *L = -1; + } } else { - *L = -1; + G_gpg_vstate.io_offset += 1; } - } else { - G_gpg_vstate.io_offset += 1; - } - return 0; + return 0; } int gpg_io_fetch_tl(unsigned int *T, unsigned int *L) { - gpg_io_fetch_t(T); - gpg_io_fetch_l(L); - return 0; + gpg_io_fetch_t(T); + gpg_io_fetch_l(L); + return 0; } int gpg_io_fetch_nv(unsigned char *buffer, int len) { - gpg_nvm_write(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); - G_gpg_vstate.io_offset += len; - return len; + gpg_nvm_write(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); + G_gpg_vstate.io_offset += len; + return len; } int gpg_io_fetch(unsigned char *buffer, int len) { - if (buffer) { - memmove(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); - } - G_gpg_vstate.io_offset += len; - return len; + if (buffer) { + memmove(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); + } + G_gpg_vstate.io_offset += len; + return len; } /* ----------------------------------------------------------------------- */ @@ -232,123 +233,128 @@ int gpg_io_fetch(unsigned char *buffer, int len) { #define MAX_OUT GPG_APDU_LENGTH int gpg_io_do(unsigned int io_flags) { - unsigned int rx = 0; - - // if pending input chaining - if (G_gpg_vstate.io_cla & 0x10) { - goto in_chaining; - } - - if (io_flags & IO_ASYNCH_REPLY) { - // if IO_ASYNCH_REPLY has been set, - // gpg_io_exchange will return when IO_RETURN_AFTER_TX will set in ui - rx = gpg_io_exchange(CHANNEL_APDU | IO_ASYNCH_REPLY, 0); - } else { - // --- full out chaining --- - G_gpg_vstate.io_offset = 0; - while (G_gpg_vstate.io_length > MAX_OUT) { - unsigned int tx, xx; - // send chunk - tx = MAX_OUT - 2; - memmove(G_io_apdu_buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, tx); - G_gpg_vstate.io_length -= tx; - G_gpg_vstate.io_offset += tx; - G_io_apdu_buffer[tx] = 0x61; - if (G_gpg_vstate.io_length > MAX_OUT - 2) { - xx = MAX_OUT - 2; - } else { - xx = G_gpg_vstate.io_length - 2; - } - G_io_apdu_buffer[tx + 1] = xx; - rx = gpg_io_exchange(CHANNEL_APDU, tx + 2); - // check get response - if ((G_io_apdu_buffer[0] != 0x00) || (G_io_apdu_buffer[1] != 0xc0) || (G_io_apdu_buffer[2] != 0x00) || - (G_io_apdu_buffer[3] != 0x00)) { - THROW(SW_COMMAND_NOT_ALLOWED); - return 0; - } + unsigned int rx = 0; + + // if pending input chaining + if (G_gpg_vstate.io_cla & 0x10) { + goto in_chaining; } - memmove(G_io_apdu_buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, G_gpg_vstate.io_length); - if (io_flags & IO_RETURN_AFTER_TX) { - rx = gpg_io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, G_gpg_vstate.io_length); - return 0; + if (io_flags & IO_ASYNCH_REPLY) { + // if IO_ASYNCH_REPLY has been set, + // gpg_io_exchange will return when IO_RETURN_AFTER_TX will set in ui + rx = gpg_io_exchange(CHANNEL_APDU | IO_ASYNCH_REPLY, 0); } else { - rx = gpg_io_exchange(CHANNEL_APDU, G_gpg_vstate.io_length); - } - } - - //--- full in chaining --- - if (rx < 4) { - THROW(SW_COMMAND_NOT_ALLOWED); - return SW_COMMAND_NOT_ALLOWED; - } - if (rx == 4) { - G_io_apdu_buffer[4] = 0; - rx = 4; - } - G_gpg_vstate.io_offset = 0; - G_gpg_vstate.io_length = 0; - G_gpg_vstate.io_cla = G_io_apdu_buffer[0]; - G_gpg_vstate.io_ins = G_io_apdu_buffer[1]; - G_gpg_vstate.io_p1 = G_io_apdu_buffer[2]; - G_gpg_vstate.io_p2 = G_io_apdu_buffer[3]; - G_gpg_vstate.io_lc = 0; - G_gpg_vstate.io_le = 0; - - switch (G_gpg_vstate.io_ins) { - case INS_GET_DATA: - case INS_GET_RESPONSE: - case INS_TERMINATE_DF: - case INS_ACTIVATE_FILE: - G_gpg_vstate.io_le = G_io_apdu_buffer[4]; - break; - - case INS_GET_CHALLENGE: - if (G_gpg_vstate.io_p1 == 0) { - G_gpg_vstate.io_le = G_io_apdu_buffer[4]; - break; + // --- full out chaining --- + G_gpg_vstate.io_offset = 0; + while (G_gpg_vstate.io_length > MAX_OUT) { + unsigned int tx, xx; + // send chunk + tx = MAX_OUT - 2; + memmove(G_io_apdu_buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, tx); + G_gpg_vstate.io_length -= tx; + G_gpg_vstate.io_offset += tx; + G_io_apdu_buffer[tx] = 0x61; + if (G_gpg_vstate.io_length > MAX_OUT - 2) { + xx = MAX_OUT - 2; + } else { + xx = G_gpg_vstate.io_length - 2; + } + G_io_apdu_buffer[tx + 1] = xx; + rx = gpg_io_exchange(CHANNEL_APDU, tx + 2); + // check get response + if ((G_io_apdu_buffer[0] != 0x00) || (G_io_apdu_buffer[1] != 0xc0) || + (G_io_apdu_buffer[2] != 0x00) || (G_io_apdu_buffer[3] != 0x00)) { + THROW(SW_COMMAND_NOT_ALLOWED); + return 0; + } + } + memmove(G_io_apdu_buffer, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + G_gpg_vstate.io_length); + + if (io_flags & IO_RETURN_AFTER_TX) { + rx = gpg_io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, G_gpg_vstate.io_length); + return 0; + } else { + rx = gpg_io_exchange(CHANNEL_APDU, G_gpg_vstate.io_length); + } } - __attribute__((fallthrough)); - case INS_VERIFY: - case INS_CHANGE_REFERENCE_DATA: - if (G_io_apdu_buffer[4] == 0) { - break; - } - goto _default; - - default: - _default: - G_gpg_vstate.io_lc = G_io_apdu_buffer[4]; - memmove(G_gpg_vstate.work.io_buffer, G_io_apdu_buffer + 5, G_gpg_vstate.io_lc); - G_gpg_vstate.io_length = G_gpg_vstate.io_lc; - break; - } - - while (G_gpg_vstate.io_cla & 0x10) { - G_io_apdu_buffer[0] = 0x90; - G_io_apdu_buffer[1] = 0x00; - rx = gpg_io_exchange(CHANNEL_APDU, 2); - in_chaining: - if ((rx < 4) || ((G_io_apdu_buffer[0] & 0xEF) != (G_gpg_vstate.io_cla & 0xEF)) || - (G_io_apdu_buffer[1] != G_gpg_vstate.io_ins) || (G_io_apdu_buffer[2] != G_gpg_vstate.io_p1) || - (G_io_apdu_buffer[3] != G_gpg_vstate.io_p2)) { - THROW(SW_COMMAND_NOT_ALLOWED); - return SW_COMMAND_NOT_ALLOWED; + //--- full in chaining --- + if (rx < 4) { + THROW(SW_COMMAND_NOT_ALLOWED); + return SW_COMMAND_NOT_ALLOWED; } if (rx == 4) { - G_io_apdu_buffer[4] = 0; - rx = 4; + G_io_apdu_buffer[4] = 0; + rx = 4; } + G_gpg_vstate.io_offset = 0; + G_gpg_vstate.io_length = 0; G_gpg_vstate.io_cla = G_io_apdu_buffer[0]; - G_gpg_vstate.io_lc = G_io_apdu_buffer[4]; - if ((G_gpg_vstate.io_length + G_gpg_vstate.io_lc) > GPG_IO_BUFFER_LENGTH) { - return 1; + G_gpg_vstate.io_ins = G_io_apdu_buffer[1]; + G_gpg_vstate.io_p1 = G_io_apdu_buffer[2]; + G_gpg_vstate.io_p2 = G_io_apdu_buffer[3]; + G_gpg_vstate.io_lc = 0; + G_gpg_vstate.io_le = 0; + + switch (G_gpg_vstate.io_ins) { + case INS_GET_DATA: + case INS_GET_RESPONSE: + case INS_TERMINATE_DF: + case INS_ACTIVATE_FILE: + G_gpg_vstate.io_le = G_io_apdu_buffer[4]; + break; + + case INS_GET_CHALLENGE: + if (G_gpg_vstate.io_p1 == 0) { + G_gpg_vstate.io_le = G_io_apdu_buffer[4]; + break; + } + + __attribute__((fallthrough)); + case INS_VERIFY: + case INS_CHANGE_REFERENCE_DATA: + if (G_io_apdu_buffer[4] == 0) { + break; + } + goto _default; + + default: + _default: + G_gpg_vstate.io_lc = G_io_apdu_buffer[4]; + memmove(G_gpg_vstate.work.io_buffer, G_io_apdu_buffer + 5, G_gpg_vstate.io_lc); + G_gpg_vstate.io_length = G_gpg_vstate.io_lc; + break; + } + + while (G_gpg_vstate.io_cla & 0x10) { + G_io_apdu_buffer[0] = 0x90; + G_io_apdu_buffer[1] = 0x00; + rx = gpg_io_exchange(CHANNEL_APDU, 2); + in_chaining: + if ((rx < 4) || ((G_io_apdu_buffer[0] & 0xEF) != (G_gpg_vstate.io_cla & 0xEF)) || + (G_io_apdu_buffer[1] != G_gpg_vstate.io_ins) || + (G_io_apdu_buffer[2] != G_gpg_vstate.io_p1) || + (G_io_apdu_buffer[3] != G_gpg_vstate.io_p2)) { + THROW(SW_COMMAND_NOT_ALLOWED); + return SW_COMMAND_NOT_ALLOWED; + } + if (rx == 4) { + G_io_apdu_buffer[4] = 0; + rx = 4; + } + G_gpg_vstate.io_cla = G_io_apdu_buffer[0]; + G_gpg_vstate.io_lc = G_io_apdu_buffer[4]; + if ((G_gpg_vstate.io_length + G_gpg_vstate.io_lc) > GPG_IO_BUFFER_LENGTH) { + return 1; + } + memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_length, + G_io_apdu_buffer + 5, + G_gpg_vstate.io_lc); + G_gpg_vstate.io_length += G_gpg_vstate.io_lc; } - memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_length, G_io_apdu_buffer + 5, G_gpg_vstate.io_lc); - G_gpg_vstate.io_length += G_gpg_vstate.io_lc; - } - return 0; + return 0; } diff --git a/src/gpg_main.c b/src/gpg_main.c index 088bb58..65f8d5f 100644 --- a/src/gpg_main.c +++ b/src/gpg_main.c @@ -22,7 +22,6 @@ #include "gpg_vars.h" #include "gpg_ux_nanos.h" -//#include "gpg_ux_blue.h" #include "os_io_seproxyhal.h" #include "string.h" @@ -33,161 +32,161 @@ /* ----------------------------------------------------------------------- */ void gpg_main(void) { - unsigned int io_flags; - io_flags = 0; - for (;;) { - volatile unsigned short sw = 0; - BEGIN_TRY { - TRY { - gpg_io_do(io_flags); - sw = gpg_dispatch(); - } - CATCH_OTHER(e) { - gpg_io_discard(1); - if ((e & 0xFFFF0000) || (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { - gpg_io_insert_u32(e); - sw = 0x6f42; - } else { - sw = e; + unsigned int io_flags; + io_flags = 0; + for (;;) { + volatile unsigned short sw = 0; + BEGIN_TRY { + TRY { + gpg_io_do(io_flags); + sw = gpg_dispatch(); + } + CATCH_OTHER(e) { + gpg_io_discard(1); + if ((e & 0xFFFF0000) || (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { + gpg_io_insert_u32(e); + sw = 0x6f42; + } else { + sw = e; + } + } + FINALLY { + if (sw) { + gpg_io_insert_u16(sw); + io_flags = 0; + } else { + io_flags = IO_ASYNCH_REPLY; + } + } } - } - FINALLY { - if (sw) { - gpg_io_insert_u16(sw); - io_flags = 0; - } else { - io_flags = IO_ASYNCH_REPLY; - } - } + END_TRY; } - END_TRY; - } } unsigned char io_event(unsigned char channel) { - UNUSED(channel); - // nothing done with the event, throw an error on the transport layer if - // needed - // can't have more than one tag in the reply, not supported yet. - switch (G_io_seproxyhal_spi_buffer[0]) { - case SEPROXYHAL_TAG_FINGER_EVENT: - UX_FINGER_EVENT(G_io_seproxyhal_spi_buffer); - break; - // power off if long push, else pass to the application callback if any - case SEPROXYHAL_TAG_BUTTON_PUSH_EVENT: // for Nano S - UX_BUTTON_PUSH_EVENT(G_io_seproxyhal_spi_buffer); - break; - - // other events are propagated to the UX just in case - default: - UX_DEFAULT_EVENT(); - break; - - case SEPROXYHAL_TAG_DISPLAY_PROCESSED_EVENT: - UX_DISPLAYED_EVENT({}); - break; - case SEPROXYHAL_TAG_TICKER_EVENT: - UX_TICKER_EVENT(G_io_seproxyhal_spi_buffer, { - // only allow display when not locked of overlayed by an OS UX. - if (UX_ALLOWED) { - UX_REDISPLAY(); - } - }); - break; - } - - // close the event if not done previously (by a display or whatever) - if (!io_seproxyhal_spi_is_status_sent()) { - io_seproxyhal_general_status(); - } - // command has been processed, DO NOT reset the current APDU transport - return 1; + UNUSED(channel); + // nothing done with the event, throw an error on the transport layer if + // needed + // can't have more than one tag in the reply, not supported yet. + switch (G_io_seproxyhal_spi_buffer[0]) { + case SEPROXYHAL_TAG_FINGER_EVENT: + UX_FINGER_EVENT(G_io_seproxyhal_spi_buffer); + break; + // power off if long push, else pass to the application callback if any + case SEPROXYHAL_TAG_BUTTON_PUSH_EVENT: // for Nano S + UX_BUTTON_PUSH_EVENT(G_io_seproxyhal_spi_buffer); + break; + + // other events are propagated to the UX just in case + default: + UX_DEFAULT_EVENT(); + break; + + case SEPROXYHAL_TAG_DISPLAY_PROCESSED_EVENT: + UX_DISPLAYED_EVENT({}); + break; + case SEPROXYHAL_TAG_TICKER_EVENT: + UX_TICKER_EVENT(G_io_seproxyhal_spi_buffer, { + // only allow display when not locked of overlaid by an OS UX. + if (UX_ALLOWED) { + UX_REDISPLAY(); + } + }); + break; + } + + // close the event if not done previously (by a display or whatever) + if (!io_seproxyhal_spi_is_status_sent()) { + io_seproxyhal_general_status(); + } + // command has been processed, DO NOT reset the current APDU transport + return 1; } unsigned short io_exchange_al(unsigned char channel, unsigned short tx_len) { - switch (channel & ~(IO_FLAGS)) { - case CHANNEL_KEYBOARD: - break; - - // multiplexed io exchange over a SPI channel and TLV encapsulated protocol - case CHANNEL_SPI: - if (tx_len) { - io_seproxyhal_spi_send(G_io_apdu_buffer, tx_len); - - if (channel & IO_RESET_AFTER_REPLIED) { - reset(); - } - return 0; // nothing received from the master so far (it's a tx - // transaction) - } else { - return io_seproxyhal_spi_recv(G_io_apdu_buffer, sizeof(G_io_apdu_buffer), 0); + switch (channel & ~(IO_FLAGS)) { + case CHANNEL_KEYBOARD: + break; + + // multiplexed io exchange over a SPI channel and TLV encapsulated protocol + case CHANNEL_SPI: + if (tx_len) { + io_seproxyhal_spi_send(G_io_apdu_buffer, tx_len); + + if (channel & IO_RESET_AFTER_REPLIED) { + reset(); + } + return 0; // nothing received from the master so far (it's a tx + // transaction) + } else { + return io_seproxyhal_spi_recv(G_io_apdu_buffer, sizeof(G_io_apdu_buffer), 0); + } + + default: + THROW(INVALID_PARAMETER); + return 0; } - - default: - THROW(INVALID_PARAMETER); return 0; - } - return 0; } void app_exit(void) { - BEGIN_TRY_L(exit) { - TRY_L(exit) { - os_sched_exit(-1); - } - FINALLY_L(exit) { + BEGIN_TRY_L(exit) { + TRY_L(exit) { + os_sched_exit(-1); + } + FINALLY_L(exit) { + } } - } - END_TRY_L(exit); + END_TRY_L(exit); } /* -------------------------------------------------------------- */ __attribute__((section(".boot"))) int main(void) { - // exit critical section - __asm volatile("cpsie i"); + // exit critical section + __asm volatile("cpsie i"); - // ensure exception will work as planned - os_boot(); - for (;;) { - UX_INIT(); + // ensure exception will work as planned + os_boot(); + for (;;) { + UX_INIT(); - BEGIN_TRY { - TRY { - // start communication with MCU - io_seproxyhal_init(); + BEGIN_TRY { + TRY { + // start communication with MCU + io_seproxyhal_init(); - USB_power(1); + USB_power(1); #if HAVE_USB_CLASS_CCID - io_usb_ccid_set_card_inserted(1); + io_usb_ccid_set_card_inserted(1); #endif - // set up - gpg_init(); - - // set up initial screen - ui_init(); - - // start the application - // the first exchange will: - // - display the initial screen - // - send the ATR - // - receive the first command - gpg_main(); - } - CATCH(EXCEPTION_IO_RESET) { - // reset IO and UX - continue; - } - CATCH_ALL { - break; - } - FINALLY { - } + // set up + gpg_init(); + + // set up initial screen + ui_init(); + + // start the application + // the first exchange will: + // - display the initial screen + // - send the ATR + // - receive the first command + gpg_main(); + } + CATCH(EXCEPTION_IO_RESET) { + // reset IO and UX + continue; + } + CATCH_ALL { + break; + } + FINALLY { + } + } + END_TRY; } - END_TRY; - } - app_exit(); + app_exit(); } #endif diff --git a/src/gpg_mse.c b/src/gpg_mse.c index c9d2db8..831e338 100644 --- a/src/gpg_mse.c +++ b/src/gpg_mse.c @@ -20,53 +20,54 @@ #include "gpg_vars.h" static int gpg_mse_set(int crt, int ref) { - if (crt == 0xA4) { - if (ref == 0x02) { - G_gpg_vstate.mse_aut = &G_gpg_vstate.kslot->dec; + if (crt == 0xA4) { + if (ref == 0x02) { + G_gpg_vstate.mse_aut = &G_gpg_vstate.kslot->dec; + } + if (ref == 0x03) { + G_gpg_vstate.mse_aut = &G_gpg_vstate.kslot->aut; + } } - if (ref == 0x03) { - G_gpg_vstate.mse_aut = &G_gpg_vstate.kslot->aut; - } - } - if (crt == 0xB8) { - if (ref == 0x02) { - G_gpg_vstate.mse_dec = &G_gpg_vstate.kslot->dec; - } - if (ref == 0x03) { - G_gpg_vstate.mse_dec = &G_gpg_vstate.kslot->aut; + if (crt == 0xB8) { + if (ref == 0x02) { + G_gpg_vstate.mse_dec = &G_gpg_vstate.kslot->dec; + } + if (ref == 0x03) { + G_gpg_vstate.mse_dec = &G_gpg_vstate.kslot->aut; + } } - } - return 0; + return 0; } int gpg_mse_reset() { - gpg_mse_set(0xA4, 0x03); - gpg_mse_set(0xB8, 0x02); - return 0; + gpg_mse_set(0xA4, 0x03); + gpg_mse_set(0xB8, 0x02); + return 0; } int gpg_apdu_mse() { - int crt, ref; + int crt, ref; - if ((G_gpg_vstate.io_p1 != 0x41) || ((G_gpg_vstate.io_p2 != 0xA4) && (G_gpg_vstate.io_p2 != 0xB8))) { - THROW(SW_INCORRECT_P1P2); - return SW_INCORRECT_P1P2; - } + if ((G_gpg_vstate.io_p1 != 0x41) || + ((G_gpg_vstate.io_p2 != 0xA4) && (G_gpg_vstate.io_p2 != 0xB8))) { + THROW(SW_INCORRECT_P1P2); + return SW_INCORRECT_P1P2; + } - crt = gpg_io_fetch_u16(); - if (crt != 0x8301) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } + crt = gpg_io_fetch_u16(); + if (crt != 0x8301) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } - ref = gpg_io_fetch_u8(); - if ((ref != 0x02) && (ref != 0x03)) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } + ref = gpg_io_fetch_u8(); + if ((ref != 0x02) && (ref != 0x03)) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } - gpg_mse_set(crt, ref); - gpg_io_discard(1); - return SW_OK; -} \ No newline at end of file + gpg_mse_set(crt, ref); + gpg_io_discard(1); + return SW_OK; +} diff --git a/src/gpg_pin.c b/src/gpg_pin.c index 534c212..80e2295 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -22,257 +22,266 @@ #include "gpg_ux_nanos.h" gpg_pin_t *gpg_pin_get_pin(int pinref) { - switch (pinref) { - case PIN_ID_PW1: - case PIN_ID_PW2: - return (gpg_pin_t *)&N_gpg_pstate->PW1; - case PIN_ID_PW3: - return (gpg_pin_t *)&N_gpg_pstate->PW3; - case PIN_ID_RC: - return (gpg_pin_t *)&N_gpg_pstate->RC; - } - return NULL; + switch (pinref) { + case PIN_ID_PW1: + case PIN_ID_PW2: + return (gpg_pin_t *) &N_gpg_pstate->PW1; + case PIN_ID_PW3: + return (gpg_pin_t *) &N_gpg_pstate->PW3; + case PIN_ID_RC: + return (gpg_pin_t *) &N_gpg_pstate->RC; + } + return NULL; } static int gpg_pin_get_state_index(unsigned int pinref) { - switch (pinref) { - case PIN_ID_PW1: - return 1; - case PIN_ID_PW2: - return 2; - case PIN_ID_PW3: - return 3; - case PIN_ID_RC: - return 4; - } - return -1; + switch (pinref) { + case PIN_ID_PW1: + return 1; + case PIN_ID_PW2: + return 2; + case PIN_ID_PW3: + return 3; + case PIN_ID_RC: + return 4; + } + return -1; } static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pin_len) { - unsigned int counter; - - if (pin->counter == 0) { - return SW_PIN_BLOCKED; - } - - counter = pin->counter - 1; - gpg_nvm_write(&(pin->counter), &counter, sizeof(int)); - cx_sha256_init(&G_gpg_vstate.work.md.sha256); - cx_hash((cx_hash_t *)&G_gpg_vstate.work.md.sha256, CX_LAST, pin_val, pin_len, G_gpg_vstate.work.md.H, - sizeof(G_gpg_vstate.work.md.H)); - if (memcmp(G_gpg_vstate.work.md.H, pin->value, 32)) { - return SW_SECURITY_STATUS_NOT_SATISFIED; - } - - counter = 3; - gpg_nvm_write(&(pin->counter), &counter, sizeof(int)); - return SW_OK; + unsigned int counter; + + if (pin->counter == 0) { + return SW_PIN_BLOCKED; + } + + counter = pin->counter - 1; + gpg_nvm_write(&(pin->counter), &counter, sizeof(int)); + cx_sha256_init(&G_gpg_vstate.work.md.sha256); + cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, + CX_LAST, + pin_val, + pin_len, + G_gpg_vstate.work.md.H, + sizeof(G_gpg_vstate.work.md.H)); + if (memcmp(G_gpg_vstate.work.md.H, pin->value, 32)) { + return SW_SECURITY_STATUS_NOT_SATISFIED; + } + + counter = 3; + gpg_nvm_write(&(pin->counter), &counter, sizeof(int)); + return SW_OK; } static void gpg_pin_check_throw(gpg_pin_t *pin, int pinID, unsigned char *pin_val, int pin_len) { - int sw; - gpg_pin_set_verified(pinID, 0); - sw = gpg_pin_check_internal(pin, pin_val, pin_len); - if (sw == SW_OK) { - gpg_pin_set_verified(pinID, 1); + int sw; + gpg_pin_set_verified(pinID, 0); + sw = gpg_pin_check_internal(pin, pin_val, pin_len); + if (sw == SW_OK) { + gpg_pin_set_verified(pinID, 1); + return; + } + THROW(sw); return; - } - THROW(sw); - return; } int gpg_pin_check(gpg_pin_t *pin, int pinID, unsigned char *pin_val, unsigned int pin_len) { - int sw; - gpg_pin_set_verified(pinID, 0); - sw = gpg_pin_check_internal(pin, pin_val, pin_len); - if (sw == SW_OK) { - gpg_pin_set_verified(pinID, 1); - } - return sw; + int sw; + gpg_pin_set_verified(pinID, 0); + sw = gpg_pin_check_internal(pin, pin_val, pin_len); + if (sw == SW_OK) { + gpg_pin_set_verified(pinID, 1); + } + return sw; } void gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len) { - cx_sha256_t sha256; + cx_sha256_t sha256; - gpg_pin_t newpin; + gpg_pin_t newpin; - cx_sha256_init(&sha256); - cx_hash((cx_hash_t *)&sha256, CX_LAST, pin_val, pin_len, newpin.value, 32); - newpin.length = pin_len; - newpin.counter = 3; + cx_sha256_init(&sha256); + cx_hash((cx_hash_t *) &sha256, CX_LAST, pin_val, pin_len, newpin.value, 32); + newpin.length = pin_len; + newpin.counter = 3; - gpg_nvm_write(pin, &newpin, sizeof(gpg_pin_t)); + gpg_nvm_write(pin, &newpin, sizeof(gpg_pin_t)); } int gpg_pin_set_verified(int pinID, int verified) { - int idx; - idx = gpg_pin_get_state_index(pinID); - if (idx >= 0) { - G_gpg_vstate.verified_pin[idx] = verified; - return verified; - } - return 0; + int idx; + idx = gpg_pin_get_state_index(pinID); + if (idx >= 0) { + G_gpg_vstate.verified_pin[idx] = verified; + return verified; + } + return 0; } int gpg_pin_is_verified(int pinID) { - int idx; - idx = gpg_pin_get_state_index(pinID); - if (idx >= 0) { - return G_gpg_vstate.verified_pin[idx]; - } - return 0; + int idx; + idx = gpg_pin_get_state_index(pinID); + if (idx >= 0) { + return G_gpg_vstate.verified_pin[idx]; + } + return 0; } int gpg_pin_is_blocked(gpg_pin_t *pin) { - return pin->counter == 0; + return pin->counter == 0; } int gpg_apdu_verify() { - gpg_pin_t *pin; + gpg_pin_t *pin; - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - if (pin == NULL) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - - // PINPAD - if (G_gpg_vstate.io_cla == 0xEF) { - if (gpg_pin_is_blocked(pin)) { - THROW(SW_PIN_BLOCKED); - return SW_PIN_BLOCKED; + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + if (pin == NULL) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; } - if (G_gpg_vstate.pinmode == PIN_MODE_SCREEN) { - // Delegate pin check to ui - gpg_io_discard(1); - ui_menu_pinentry_display(0); - return 0; + // PINPAD + if (G_gpg_vstate.io_cla == 0xEF) { + if (gpg_pin_is_blocked(pin)) { + THROW(SW_PIN_BLOCKED); + return SW_PIN_BLOCKED; + } + + if (G_gpg_vstate.pinmode == PIN_MODE_SCREEN) { + // Delegate pin check to ui + gpg_io_discard(1); + ui_menu_pinentry_display(0); + return 0; + } + if (G_gpg_vstate.pinmode == PIN_MODE_CONFIRM) { + // Delegate pin check to ui + gpg_io_discard(1); + ui_menu_pinconfirm_display(0); + return 0; + } + if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { + gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); + gpg_io_discard(1); + return SW_OK; + } + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; } - if (G_gpg_vstate.pinmode == PIN_MODE_CONFIRM) { - // Delegate pin check to ui - gpg_io_discard(1); - ui_menu_pinconfirm_display(0); - return 0; - } - if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { - gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); - gpg_io_discard(1); - return SW_OK; - } - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - // NORMAL CHECK - if ((G_gpg_vstate.io_p1 == 0) && G_gpg_vstate.io_length) { - if (gpg_pin_is_blocked(pin)) { - THROW(SW_PIN_BLOCKED); - return SW_PIN_BLOCKED; + // NORMAL CHECK + if ((G_gpg_vstate.io_p1 == 0) && G_gpg_vstate.io_length) { + if (gpg_pin_is_blocked(pin)) { + THROW(SW_PIN_BLOCKED); + return SW_PIN_BLOCKED; + } + gpg_pin_check_throw(pin, + G_gpg_vstate.io_p2, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + G_gpg_vstate.io_length); + gpg_io_discard(1); + return SW_OK; } - gpg_pin_check_throw(pin, G_gpg_vstate.io_p2, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - G_gpg_vstate.io_length); - gpg_io_discard(1); - return SW_OK; - } - gpg_io_discard(1); + gpg_io_discard(1); - // STATUS REQUEST - if ((G_gpg_vstate.io_p1 == 0) && G_gpg_vstate.io_length == 0) { - if (gpg_pin_is_verified(G_gpg_vstate.io_p2)) { - return SW_OK; + // STATUS REQUEST + if ((G_gpg_vstate.io_p1 == 0) && G_gpg_vstate.io_length == 0) { + if (gpg_pin_is_verified(G_gpg_vstate.io_p2)) { + return SW_OK; + } + return 0x63C0 | pin->counter; } - return 0x63C0 | pin->counter; - } - // RESET REQUEST - if ((G_gpg_vstate.io_p1 == 0xFF) && G_gpg_vstate.io_length == 0) { - gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); - return SW_OK; - } + // RESET REQUEST + if ((G_gpg_vstate.io_p1 == 0xFF) && G_gpg_vstate.io_length == 0) { + gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); + return SW_OK; + } - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; } int gpg_apdu_change_ref_data() { - gpg_pin_t *pin; - int len, newlen; + gpg_pin_t *pin; + int len, newlen; - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - if (pin == NULL) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - - gpg_pin_set_verified(pin->ref, 0); - - // --- PW1/PW3 pin --- - if (gpg_pin_is_blocked(pin)) { - THROW(SW_PIN_BLOCKED); - return SW_PIN_BLOCKED; - } - // avoid any-overflow whitout giving info - if (G_gpg_vstate.io_length == 0) { - if (G_gpg_vstate.pinmode != PIN_MODE_HOST) { - // Delegate pin change to ui - gpg_io_discard(1); - ui_menu_pinentry_display(0); - return 0; + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + if (pin == NULL) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; } - } - - if (pin->length > G_gpg_vstate.io_length) { - len = G_gpg_vstate.io_length; - } else { - len = pin->length; - } - gpg_pin_check_throw(pin, pin->ref, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); + gpg_pin_set_verified(pin->ref, 0); - newlen = G_gpg_vstate.io_length - len; - if ((newlen > GPG_MAX_PW_LENGTH) || ((pin->ref == PIN_ID_PW1) && (newlen < 6)) || - ((pin->ref == PIN_ID_PW3) && (newlen < 8))) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - gpg_pin_set(pin, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + len, newlen); - gpg_io_discard(1); - return SW_OK; -} + // --- PW1/PW3 pin --- + if (gpg_pin_is_blocked(pin)) { + THROW(SW_PIN_BLOCKED); + return SW_PIN_BLOCKED; + } + // avoid any-overflow without giving info + if (G_gpg_vstate.io_length == 0) { + if (G_gpg_vstate.pinmode != PIN_MODE_HOST) { + // Delegate pin change to ui + gpg_io_discard(1); + ui_menu_pinentry_display(0); + return 0; + } + } -int gpg_apdu_reset_retry_counter() { - gpg_pin_t *pin_pw1; - gpg_pin_t *pin_rc; - int rc_len, pw1_len; + if (pin->length > G_gpg_vstate.io_length) { + len = G_gpg_vstate.io_length; + } else { + len = pin->length; + } - pin_pw1 = gpg_pin_get_pin(PIN_ID_PW1); - pin_rc = gpg_pin_get_pin(PIN_ID_RC); + gpg_pin_check_throw(pin, pin->ref, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); - if (G_gpg_vstate.io_p1 == 2) { - if (!gpg_pin_is_verified(PIN_ID_PW3)) { - THROW(SW_SECURITY_STATUS_NOT_SATISFIED); - return SW_SECURITY_STATUS_NOT_SATISFIED; + newlen = G_gpg_vstate.io_length - len; + if ((newlen > GPG_MAX_PW_LENGTH) || ((pin->ref == PIN_ID_PW1) && (newlen < 6)) || + ((pin->ref == PIN_ID_PW3) && (newlen < 8))) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; } - rc_len = 0; - pw1_len = G_gpg_vstate.io_length; - } else { - // avoid any-overflow whitout giving info - if (pin_rc->length > G_gpg_vstate.io_length) { - rc_len = G_gpg_vstate.io_length; + gpg_pin_set(pin, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + len, newlen); + gpg_io_discard(1); + return SW_OK; +} + +int gpg_apdu_reset_retry_counter() { + gpg_pin_t *pin_pw1; + gpg_pin_t *pin_rc; + int rc_len, pw1_len; + + pin_pw1 = gpg_pin_get_pin(PIN_ID_PW1); + pin_rc = gpg_pin_get_pin(PIN_ID_RC); + + if (G_gpg_vstate.io_p1 == 2) { + if (!gpg_pin_is_verified(PIN_ID_PW3)) { + THROW(SW_SECURITY_STATUS_NOT_SATISFIED); + return SW_SECURITY_STATUS_NOT_SATISFIED; + } + rc_len = 0; + pw1_len = G_gpg_vstate.io_length; } else { - rc_len = pin_rc->length; + // avoid any-overflow without giving info + if (pin_rc->length > G_gpg_vstate.io_length) { + rc_len = G_gpg_vstate.io_length; + } else { + rc_len = pin_rc->length; + } + pw1_len = G_gpg_vstate.io_length - rc_len; + gpg_pin_check_throw(pin_rc, + pin_rc->ref, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + rc_len); } - pw1_len = G_gpg_vstate.io_length - rc_len; - gpg_pin_check_throw(pin_rc, pin_rc->ref, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, rc_len); - } - if ((pw1_len > GPG_MAX_PW_LENGTH) || (pw1_len < 6)) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - gpg_pin_set(pin_pw1, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + rc_len, pw1_len); - gpg_io_discard(1); - return SW_OK; + if ((pw1_len > GPG_MAX_PW_LENGTH) || (pw1_len < 6)) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } + gpg_pin_set(pin_pw1, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + rc_len, pw1_len); + gpg_io_discard(1); + return SW_OK; } diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 2e1834b..64fa73b 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -20,316 +20,401 @@ #include "gpg_vars.h" #include "gpg_ux_nanos.h" -const unsigned char gpg_oid_sha256[] = {0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, - 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20}; -const unsigned char gpg_oid_sha512[] = {0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, - 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40}; +const unsigned char gpg_oid_sha256[] = {0x30, + 0x31, + 0x30, + 0x0d, + 0x06, + 0x09, + 0x60, + 0x86, + 0x48, + 0x01, + 0x65, + 0x03, + 0x04, + 0x02, + 0x01, + 0x05, + 0x00, + 0x04, + 0x20}; +const unsigned char gpg_oid_sha512[] = {0x30, + 0x51, + 0x30, + 0x0d, + 0x06, + 0x09, + 0x60, + 0x86, + 0x48, + 0x01, + 0x65, + 0x03, + 0x04, + 0x02, + 0x03, + 0x05, + 0x00, + 0x04, + 0x40}; static void gpg_pso_reset_PW1() { - if (N_gpg_pstate->PW_status[0] == 0) { - gpg_pin_set_verified(PIN_ID_PW1, 0); - } + if (N_gpg_pstate->PW_status[0] == 0) { + gpg_pin_set_verified(PIN_ID_PW1, 0); + } } static int gpg_sign(gpg_key_t *sigkey) { - // --- RSA - if (sigkey->attributes.value[0] == 1) { - cx_rsa_private_key_t *key; - unsigned int ksz, l; - ksz = (sigkey->attributes.value[1] << 8) | sigkey->attributes.value[2]; - ksz = ksz >> 3; - switch (ksz) { - case 1024 / 8: - key = (cx_rsa_private_key_t *)&sigkey->priv_key.rsa1024; - break; - case 2048 / 8: - key = (cx_rsa_private_key_t *)&sigkey->priv_key.rsa2048; - break; - case 3072 / 8: - key = (cx_rsa_private_key_t *)&sigkey->priv_key.rsa3072; - break; - case 4096 / 8: - key = (cx_rsa_private_key_t *)&sigkey->priv_key.rsa4096; - break; - } - if (key->size != ksz) { - THROW(SW_CONDITIONS_NOT_SATISFIED); - return SW_CONDITIONS_NOT_SATISFIED; - } + // --- RSA + if (sigkey->attributes.value[0] == 1) { + cx_rsa_private_key_t *key; + unsigned int ksz, l; + ksz = (sigkey->attributes.value[1] << 8) | sigkey->attributes.value[2]; + ksz = ksz >> 3; + switch (ksz) { + case 1024 / 8: + key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa1024; + break; + case 2048 / 8: + key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa2048; + break; + case 3072 / 8: + key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa3072; + break; + case 4096 / 8: + key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa4096; + break; + } + if (key->size != ksz) { + THROW(SW_CONDITIONS_NOT_SATISFIED); + return SW_CONDITIONS_NOT_SATISFIED; + } - // sign - if (ksz < G_gpg_vstate.io_length) { - THROW(SW_WRONG_LENGTH); + // sign + if (ksz < G_gpg_vstate.io_length) { + THROW(SW_WRONG_LENGTH); + } + l = ksz - G_gpg_vstate.io_length; + memmove(G_gpg_vstate.work.io_buffer + l, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + memset(G_gpg_vstate.work.io_buffer, 0xFF, l); + G_gpg_vstate.work.io_buffer[0] = 0; + G_gpg_vstate.work.io_buffer[1] = 1; + G_gpg_vstate.work.io_buffer[l - 1] = 0; + ksz = cx_rsa_decrypt(key, + CX_PAD_NONE, + CX_NONE, + G_gpg_vstate.work.io_buffer, + ksz, + G_gpg_vstate.work.io_buffer, + ksz); + // send + gpg_io_discard(0); + gpg_io_inserted(ksz); + gpg_pso_reset_PW1(); + return SW_OK; } - l = ksz - G_gpg_vstate.io_length; - memmove(G_gpg_vstate.work.io_buffer + l, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - memset(G_gpg_vstate.work.io_buffer, 0xFF, l); - G_gpg_vstate.work.io_buffer[0] = 0; - G_gpg_vstate.work.io_buffer[1] = 1; - G_gpg_vstate.work.io_buffer[l - 1] = 0; - ksz = cx_rsa_decrypt(key, CX_PAD_NONE, CX_NONE, G_gpg_vstate.work.io_buffer, ksz, G_gpg_vstate.work.io_buffer, ksz); - // send - gpg_io_discard(0); - gpg_io_inserted(ksz); - gpg_pso_reset_PW1(); - return SW_OK; - } - // --- ECDSA/EdDSA - if ((sigkey->attributes.value[0] == 19) || (sigkey->attributes.value[0] == 22)) { - cx_ecfp_private_key_t *key; - unsigned int sz, i, rs_len, info; - unsigned char * rs; + // --- ECDSA/EdDSA + if ((sigkey->attributes.value[0] == 19) || (sigkey->attributes.value[0] == 22)) { + cx_ecfp_private_key_t *key; + unsigned int sz, i, rs_len, info; + unsigned char *rs; - key = &sigkey->priv_key.ecfp; + key = &sigkey->priv_key.ecfp; // sign #define RS (G_gpg_vstate.work.io_buffer + (GPG_IO_BUFFER_LENGTH - 256)) - if (sigkey->attributes.value[0] == 19) { - sz = (unsigned int) gpg_curve2domainlen(key->curve); - if ((sz == 0) || (key->d_len != sz)) { - THROW(SW_CONDITIONS_NOT_SATISFIED); - return SW_CONDITIONS_NOT_SATISFIED; - } - sz = cx_ecdsa_sign(key, CX_RND_TRNG, CX_NONE, G_gpg_vstate.work.io_buffer, sz, RS, 256, &info); - // reencode r,s in MPI format - gpg_io_discard(0); + if (sigkey->attributes.value[0] == 19) { + sz = (unsigned int) gpg_curve2domainlen(key->curve); + if ((sz == 0) || (key->d_len != sz)) { + THROW(SW_CONDITIONS_NOT_SATISFIED); + return SW_CONDITIONS_NOT_SATISFIED; + } + sz = cx_ecdsa_sign(key, + CX_RND_TRNG, + CX_NONE, + G_gpg_vstate.work.io_buffer, + sz, + RS, + 256, + &info); + // reencode r,s in MPI format + gpg_io_discard(0); - rs_len = RS[3]; - rs = &RS[4]; + rs_len = RS[3]; + rs = &RS[4]; - for (i = 0; i < 2; i++) { - if (*rs == 0) { - rs++; - rs_len--; + for (i = 0; i < 2; i++) { + if (*rs == 0) { + rs++; + rs_len--; + } + gpg_io_insert_u8(0); + gpg_io_insert(rs, rs_len); + rs = rs + rs_len; + rs_len = rs[1]; + rs += 2; + } + } else { + sz = cx_eddsa_sign(key, + CX_NONE, + CX_SHA512, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length, + NULL, + 0, + RS, + 256, + NULL); + gpg_io_discard(0); + gpg_io_insert(RS, sz); } - gpg_io_insert_u8(0); - gpg_io_insert(rs, rs_len); - rs = rs + rs_len; - rs_len = rs[1]; - rs += 2; - } - } else { - sz = cx_eddsa_sign(key, CX_NONE, CX_SHA512, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, NULL, 0, RS, 256, - NULL); - gpg_io_discard(0); - gpg_io_insert(RS, sz); - } #undef RS - // send - gpg_pso_reset_PW1(); - return SW_OK; - } - // --- PSO:CDS NOT SUPPORTED - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; + // send + gpg_pso_reset_PW1(); + return SW_OK; + } + // --- PSO:CDS NOT SUPPORTED + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; } int gpg_apdu_pso() { - unsigned int t, l, ksz; + unsigned int t, l, ksz; - unsigned int pso; - unsigned int sz; + unsigned int pso; + unsigned int sz; - pso = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; + pso = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; - // UIF HANDLE - switch (pso) { - // --- PSO:CDS --- - case 0x9e9a: - if (G_gpg_vstate.kslot->sig.UIF[0]) { - if ((G_gpg_vstate.UIF_flags) == 0) { - ui_menu_uifconfirm_display(0); - return 0; - } - G_gpg_vstate.UIF_flags = 0; - } - break; - // --- PSO:DEC --- - case 0x8086: - case 0x8680: - if (G_gpg_vstate.kslot->dec.UIF[0]) { - if ((G_gpg_vstate.UIF_flags) == 0) { - ui_menu_uifconfirm_display(0); - return 0; - } - G_gpg_vstate.UIF_flags = 0; + // UIF HANDLE + switch (pso) { + // --- PSO:CDS --- + case 0x9e9a: + if (G_gpg_vstate.kslot->sig.UIF[0]) { + if ((G_gpg_vstate.UIF_flags) == 0) { + ui_menu_uifconfirm_display(0); + return 0; + } + G_gpg_vstate.UIF_flags = 0; + } + break; + // --- PSO:DEC --- + case 0x8086: + case 0x8680: + if (G_gpg_vstate.kslot->dec.UIF[0]) { + if ((G_gpg_vstate.UIF_flags) == 0) { + ui_menu_uifconfirm_display(0); + return 0; + } + G_gpg_vstate.UIF_flags = 0; + } + break; } - break; - } - // --- PSO:ENC --- - switch (pso) { - // --- PSO:CDS --- - case 0x9e9a: { - unsigned int cnt; - int sw; - sw = gpg_sign(&G_gpg_vstate.kslot->sig); - cnt = G_gpg_vstate.kslot->sig_count + 1; - nvm_write(&G_gpg_vstate.kslot->sig_count, &cnt, sizeof(unsigned int)); - return sw; - } - // --- PSO:ENC --- - case 0x8680: { - unsigned int msg_len; - cx_aes_key_t *key; - key = &G_gpg_vstate.kslot->AES_dec; - if (!(key->size != 16)) { - THROW(SW_CONDITIONS_NOT_SATISFIED + 5); - return SW_CONDITIONS_NOT_SATISFIED; - } - msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = cx_aes(key, CX_ENCRYPT | CX_CHAIN_CBC | CX_LAST, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, msg_len, - G_gpg_vstate.work.io_buffer + 1, GPG_IO_BUFFER_LENGTH - 1); - // send - gpg_io_discard(0); - G_gpg_vstate.work.io_buffer[0] = 0x02; - gpg_io_inserted(1 + sz); - return SW_OK; - } + // --- PSO:ENC --- + switch (pso) { + // --- PSO:CDS --- + case 0x9e9a: { + unsigned int cnt; + int sw; + sw = gpg_sign(&G_gpg_vstate.kslot->sig); + cnt = G_gpg_vstate.kslot->sig_count + 1; + nvm_write(&G_gpg_vstate.kslot->sig_count, &cnt, sizeof(unsigned int)); + return sw; + } + // --- PSO:ENC --- + case 0x8680: { + unsigned int msg_len; + cx_aes_key_t *key; + key = &G_gpg_vstate.kslot->AES_dec; + if (!(key->size != 16)) { + THROW(SW_CONDITIONS_NOT_SATISFIED + 5); + return SW_CONDITIONS_NOT_SATISFIED; + } + msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; + sz = cx_aes(key, + CX_ENCRYPT | CX_CHAIN_CBC | CX_LAST, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + msg_len, + G_gpg_vstate.work.io_buffer + 1, + GPG_IO_BUFFER_LENGTH - 1); + // send + gpg_io_discard(0); + G_gpg_vstate.work.io_buffer[0] = 0x02; + gpg_io_inserted(1 + sz); + return SW_OK; + } - // --- PSO:DEC --- - case 0x8086: { - unsigned int msg_len; - unsigned int pad_byte; - pad_byte = gpg_io_fetch_u8(); + // --- PSO:DEC --- + case 0x8086: { + unsigned int msg_len; + unsigned int pad_byte; + pad_byte = gpg_io_fetch_u8(); - switch (pad_byte) { - // --- PSO:DEC:RSA - case 0x00: { - cx_rsa_private_key_t *key; - if (G_gpg_vstate.mse_dec->attributes.value[0] != 0x01) { - THROW(SW_CONDITIONS_NOT_SATISFIED); - return SW_CONDITIONS_NOT_SATISFIED; - } - ksz = (G_gpg_vstate.mse_dec->attributes.value[1] << 8) | G_gpg_vstate.mse_dec->attributes.value[2]; - ksz = ksz >> 3; - key = NULL; - switch (ksz) { - case 1024 / 8: - key = (cx_rsa_private_key_t *)&G_gpg_vstate.mse_dec->priv_key.rsa1024; - break; - case 2048 / 8: - key = (cx_rsa_private_key_t *)&G_gpg_vstate.mse_dec->priv_key.rsa2048; - break; - case 3072 / 8: - key = (cx_rsa_private_key_t *)&G_gpg_vstate.mse_dec->priv_key.rsa3072; - break; - case 4096 / 8: - key = (cx_rsa_private_key_t *)&G_gpg_vstate.mse_dec->priv_key.rsa4096; - break; - } + switch (pad_byte) { + // --- PSO:DEC:RSA + case 0x00: { + cx_rsa_private_key_t *key; + if (G_gpg_vstate.mse_dec->attributes.value[0] != 0x01) { + THROW(SW_CONDITIONS_NOT_SATISFIED); + return SW_CONDITIONS_NOT_SATISFIED; + } + ksz = (G_gpg_vstate.mse_dec->attributes.value[1] << 8) | + G_gpg_vstate.mse_dec->attributes.value[2]; + ksz = ksz >> 3; + key = NULL; + switch (ksz) { + case 1024 / 8: + key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa1024; + break; + case 2048 / 8: + key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa2048; + break; + case 3072 / 8: + key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa3072; + break; + case 4096 / 8: + key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa4096; + break; + } - if ((key == NULL) || (key->size != ksz)) { - THROW(SW_CONDITIONS_NOT_SATISFIED); - return SW_CONDITIONS_NOT_SATISFIED; - } - msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = cx_rsa_decrypt(key, CX_PAD_PKCS1_1o5, CX_NONE, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, msg_len, - G_gpg_vstate.work.io_buffer, ksz); - // send - gpg_io_discard(0); - gpg_io_inserted(sz); - return SW_OK; - } + if ((key == NULL) || (key->size != ksz)) { + THROW(SW_CONDITIONS_NOT_SATISFIED); + return SW_CONDITIONS_NOT_SATISFIED; + } + msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; + sz = cx_rsa_decrypt(key, + CX_PAD_PKCS1_1o5, + CX_NONE, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + msg_len, + G_gpg_vstate.work.io_buffer, + ksz); + // send + gpg_io_discard(0); + gpg_io_inserted(sz); + return SW_OK; + } - // --- PSO:DEC:AES - case 0x02: { - cx_aes_key_t *key; - key = &G_gpg_vstate.kslot->AES_dec; - if (!(key->size != 16)) { - THROW(SW_CONDITIONS_NOT_SATISFIED + 5); - return SW_CONDITIONS_NOT_SATISFIED; - } - msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = cx_aes(key, CX_DECRYPT | CX_CHAIN_CBC | CX_LAST, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - msg_len, G_gpg_vstate.work.io_buffer, GPG_IO_BUFFER_LENGTH); - // send - gpg_io_discard(0); - gpg_io_inserted(sz); - return SW_OK; - } + // --- PSO:DEC:AES + case 0x02: { + cx_aes_key_t *key; + key = &G_gpg_vstate.kslot->AES_dec; + if (!(key->size != 16)) { + THROW(SW_CONDITIONS_NOT_SATISFIED + 5); + return SW_CONDITIONS_NOT_SATISFIED; + } + msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; + sz = cx_aes(key, + CX_DECRYPT | CX_CHAIN_CBC | CX_LAST, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + msg_len, + G_gpg_vstate.work.io_buffer, + GPG_IO_BUFFER_LENGTH); + // send + gpg_io_discard(0); + gpg_io_inserted(sz); + return SW_OK; + } - // --- PSO:DEC:ECDH - case 0xA6: { - cx_ecfp_private_key_t *key; - unsigned int curve; - if (G_gpg_vstate.mse_dec->attributes.value[0] != 0x12) { - THROW(SW_CONDITIONS_NOT_SATISFIED); - return SW_CONDITIONS_NOT_SATISFIED; - } - key = &G_gpg_vstate.mse_dec->priv_key.ecfp; - gpg_io_fetch_l(&l); - gpg_io_fetch_tl(&t, &l); - if (t != 0x7f49) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } - gpg_io_fetch_tl(&t, &l); - if (t != 0x86) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; - } + // --- PSO:DEC:ECDH + case 0xA6: { + cx_ecfp_private_key_t *key; + unsigned int curve; - curve = gpg_oid2curve(G_gpg_vstate.mse_dec->attributes.value + 1, G_gpg_vstate.mse_dec->attributes.length - 1); - if (key->curve != curve) { - THROW(SW_CONDITIONS_NOT_SATISFIED); - return SW_CONDITIONS_NOT_SATISFIED; - } - if (curve == CX_CURVE_Curve25519) { - unsigned int i; + if (G_gpg_vstate.mse_dec->attributes.value[0] != 0x12) { + THROW(SW_CONDITIONS_NOT_SATISFIED); + return SW_CONDITIONS_NOT_SATISFIED; + } + key = &G_gpg_vstate.mse_dec->priv_key.ecfp; + gpg_io_fetch_l(&l); + gpg_io_fetch_tl(&t, &l); + if (t != 0x7f49) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } + gpg_io_fetch_tl(&t, &l); + if (t != 0x86) { + THROW(SW_WRONG_DATA); + return SW_WRONG_DATA; + } - for (i = 0; i <= 31; i++) { - G_gpg_vstate.work.io_buffer[512 + i] = (G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset)[31 - i]; - } - G_gpg_vstate.work.io_buffer[511] = 0x02; - sz = cx_ecdh(key, CX_ECDH_X, G_gpg_vstate.work.io_buffer + 511, 65, G_gpg_vstate.work.io_buffer + 256, 160); - for (i = 0; i <= 31; i++) { - G_gpg_vstate.work.io_buffer[128 + i] = G_gpg_vstate.work.io_buffer[287 - i]; + curve = gpg_oid2curve(G_gpg_vstate.mse_dec->attributes.value + 1, + G_gpg_vstate.mse_dec->attributes.length - 1); + if (key->curve != curve) { + THROW(SW_CONDITIONS_NOT_SATISFIED); + return SW_CONDITIONS_NOT_SATISFIED; + } + if (curve == CX_CURVE_Curve25519) { + unsigned int i; + + for (i = 0; i <= 31; i++) { + G_gpg_vstate.work.io_buffer[512 + i] = + (G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset)[31 - i]; + } + G_gpg_vstate.work.io_buffer[511] = 0x02; + sz = cx_ecdh(key, + CX_ECDH_X, + G_gpg_vstate.work.io_buffer + 511, + 65, + G_gpg_vstate.work.io_buffer + 256, + 160); + for (i = 0; i <= 31; i++) { + G_gpg_vstate.work.io_buffer[128 + i] = + G_gpg_vstate.work.io_buffer[287 - i]; + } + sz = 32; + } else { + sz = cx_ecdh(key, + CX_ECDH_X, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + 65, + G_gpg_vstate.work.io_buffer + 128, + 160); + } + // send + gpg_io_discard(0); + gpg_io_insert(G_gpg_vstate.work.io_buffer + 128, sz); + return SW_OK; + } + + // --- PSO:DEC:xx NOT SUPPORTED + default: + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; + } } - sz = 32; - } else { - sz = cx_ecdh(key, CX_ECDH_X, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, 65, - G_gpg_vstate.work.io_buffer + 128, 160); - } - // send - gpg_io_discard(0); - gpg_io_insert(G_gpg_vstate.work.io_buffer + 128, sz); - return SW_OK; - } - // --- PSO:DEC:xx NOT SUPPORTDED - default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; + //--- PSO:yy NOT SUPPORTED --- + default: + THROW(SW_REFERENCED_DATA_NOT_FOUND); + return SW_REFERENCED_DATA_NOT_FOUND; } - } - - //--- PSO:yy NOT SUPPPORTED --- - default: THROW(SW_REFERENCED_DATA_NOT_FOUND); return SW_REFERENCED_DATA_NOT_FOUND; - } - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; } int gpg_apdu_internal_authenticate() { - // --- PSO:AUTH --- - if (G_gpg_vstate.kslot->aut.UIF[0]) { - if ((G_gpg_vstate.UIF_flags) == 0) { - ui_menu_uifconfirm_display(0); - return 0; + // --- PSO:AUTH --- + if (G_gpg_vstate.kslot->aut.UIF[0]) { + if ((G_gpg_vstate.UIF_flags) == 0) { + ui_menu_uifconfirm_display(0); + return 0; + } + G_gpg_vstate.UIF_flags = 0; } - G_gpg_vstate.UIF_flags = 0; - } - if (G_gpg_vstate.mse_aut->attributes.value[0] == 1) { - if (G_gpg_vstate.io_length > - ((G_gpg_vstate.mse_aut->attributes.value[1] << 8) | G_gpg_vstate.mse_aut->attributes.value[2]) * 40 / 100) { - THROW(SW_WRONG_LENGTH); - return SW_WRONG_LENGTH; + if (G_gpg_vstate.mse_aut->attributes.value[0] == 1) { + if (G_gpg_vstate.io_length > ((G_gpg_vstate.mse_aut->attributes.value[1] << 8) | + G_gpg_vstate.mse_aut->attributes.value[2]) * + 40 / 100) { + THROW(SW_WRONG_LENGTH); + return SW_WRONG_LENGTH; + } } - } - return gpg_sign(G_gpg_vstate.mse_aut); + return gpg_sign(G_gpg_vstate.mse_aut); } diff --git a/src/gpg_ram.c b/src/gpg_ram.c index 5b58016..721d55c 100644 --- a/src/gpg_ram.c +++ b/src/gpg_ram.c @@ -22,21 +22,21 @@ #ifndef TARGET_NANOS #include "ux.h" -ux_state_t G_ux; +ux_state_t G_ux; bolos_ux_params_t G_ux_params; #else -ux_state_t ux; +ux_state_t ux; #endif #ifndef GPG_DEBUG_MAIN unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; #else extern unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; -int apdu_n; +int apdu_n; #endif gpg_v_state_t G_gpg_vstate; #ifdef HAVE_RSA union cx_u G_cx; -#endif // HAVE_RSA +#endif // HAVE_RSA diff --git a/src/gpg_select.c b/src/gpg_select.c index ff6de5a..0285fb1 100644 --- a/src/gpg_select.c +++ b/src/gpg_select.c @@ -21,37 +21,39 @@ const unsigned char C_MF[] = {0x3F, 0x00}; int gpg_apdu_select() { - int sw; + int sw; - // MF - if ((G_gpg_vstate.io_length == 2) && (memcmp(G_gpg_vstate.work.io_buffer, C_MF, G_gpg_vstate.io_length) == 0)) { - gpg_io_discard(0); - sw = SW_OK; - } - // AID APP - else if ((G_gpg_vstate.io_length == 6) && - (memcmp(G_gpg_vstate.work.io_buffer, (const void *)N_gpg_pstate->AID, G_gpg_vstate.io_length) == 0)) { - G_gpg_vstate.DO_current = 0; - G_gpg_vstate.DO_reccord = 0; - G_gpg_vstate.DO_offset = 0; - if (G_gpg_vstate.selected == 0) { - G_gpg_vstate.verified_pin[0] = 0; - G_gpg_vstate.verified_pin[1] = 0; - G_gpg_vstate.verified_pin[2] = 0; - G_gpg_vstate.verified_pin[3] = 0; - G_gpg_vstate.verified_pin[4] = 0; + // MF + if ((G_gpg_vstate.io_length == 2) && + (memcmp(G_gpg_vstate.work.io_buffer, C_MF, G_gpg_vstate.io_length) == 0)) { + gpg_io_discard(0); + sw = SW_OK; } + // AID APP + else if ((G_gpg_vstate.io_length == 6) && (memcmp(G_gpg_vstate.work.io_buffer, + (const void *) N_gpg_pstate->AID, + G_gpg_vstate.io_length) == 0)) { + G_gpg_vstate.DO_current = 0; + G_gpg_vstate.DO_reccord = 0; + G_gpg_vstate.DO_offset = 0; + if (G_gpg_vstate.selected == 0) { + G_gpg_vstate.verified_pin[0] = 0; + G_gpg_vstate.verified_pin[1] = 0; + G_gpg_vstate.verified_pin[2] = 0; + G_gpg_vstate.verified_pin[3] = 0; + G_gpg_vstate.verified_pin[4] = 0; + } - gpg_io_discard(0); - if (N_gpg_pstate->histo[7] != 0x07) { - THROW(SW_STATE_TERMINATED); + gpg_io_discard(0); + if (N_gpg_pstate->histo[7] != STATE_ACTIVATE) { + THROW(SW_STATE_TERMINATED); + } + sw = SW_OK; } - sw = SW_OK; - } - // NOT FOUND - else { - THROW(SW_FILE_NOT_FOUND); - return SW_FILE_NOT_FOUND; - } - return sw; + // NOT FOUND + else { + THROW(SW_FILE_NOT_FOUND); + return SW_FILE_NOT_FOUND; + } + return sw; } diff --git a/src/gpg_types.h b/src/gpg_types.h index ec89bf2..27b7bb2 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -26,11 +26,11 @@ /* big private DO */ #define GPG_EXT_PRIVATE_DO_LENGTH 512 -/* will be fixed..1024 is not enougth */ +/* will be fixed..1024 is not enough */ #define GPG_EXT_CARD_HOLDER_CERT_LENTH 2560 /* random choice */ #define GPG_EXT_CHALLENGE_LENTH 254 -/* accpet long PW, but less than one sha256 block */ +/* accept long PW, but less than one sha256 block */ #define GPG_MAX_PW_LENGTH 12 #if GPG_MULTISLOT @@ -44,137 +44,137 @@ #define GPG_RSA_DEFAULT_PUB 0x00010001U struct gpg_pin_s { - unsigned int ref; - // initial pin length, 0 means not set - unsigned int length; - unsigned int counter; - // only store sha256 of PIN/RC - unsigned char value[32]; + unsigned int ref; + // initial pin length, 0 means not set + unsigned int length; + unsigned int counter; + // only store sha256 of PIN/RC + unsigned char value[32]; }; typedef struct gpg_pin_s gpg_pin_t; -#define LV(name, maxlen) \ - struct { \ - unsigned int length; \ - unsigned char value[maxlen]; \ - } name +#define LV(name, maxlen) \ + struct { \ + unsigned int length; \ + unsigned char value[maxlen]; \ + } name typedef struct gpg_lv_s { - unsigned int length; - unsigned char value[]; + unsigned int length; + unsigned char value[]; } gpg_lv_t; typedef struct gpg_key_s { - /* C1 C2 C3 */ - LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); - /* key value */ - /* WARN: changing the cx__t structures breaks backup/restore. Adapt backup/restore code - * to ensure backward compatibility. - */ - union { - cx_rsa_private_key_t rsa; - cx_rsa_1024_private_key_t rsa1024; - cx_rsa_2048_private_key_t rsa2048; - cx_rsa_3072_private_key_t rsa3072; - cx_rsa_4096_private_key_t rsa4096; - - cx_ecfp_private_key_t ecfp; - cx_ecfp_256_private_key_t ecfp256; - cx_ecfp_384_private_key_t ecfp384; - cx_ecfp_512_private_key_t ecfp512; - cx_ecfp_640_private_key_t ecfp640; - } priv_key; - union { - unsigned char rsa[4]; - cx_ecfp_public_key_t ecfp; - cx_ecfp_256_public_key_t ecfp256; - cx_ecfp_384_public_key_t ecfp384; - cx_ecfp_512_public_key_t ecfp512; - cx_ecfp_640_public_key_t ecfp640; - } pub_key; - /* C7 C8 C9 , C5 = C7|C8|C9*/ - unsigned char fingerprints[20]; - /* 7F21 */ - LV(CA, GPG_EXT_CARD_HOLDER_CERT_LENTH); - /* C7 C8 C9, C6 = C7|C8|C9*/ - unsigned char CA_fingerprints[20]; - /* CE CF D0, CD = CE|CF|D0 */ - unsigned char date[4]; - /* D6/D7/D8- */ - unsigned char UIF[2]; + /* C1 C2 C3 */ + LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); + /* key value */ + /* WARN: changing the cx__t structures breaks backup/restore. Adapt backup/restore code + * to ensure backward compatibility. + */ + union { + cx_rsa_private_key_t rsa; + cx_rsa_1024_private_key_t rsa1024; + cx_rsa_2048_private_key_t rsa2048; + cx_rsa_3072_private_key_t rsa3072; + cx_rsa_4096_private_key_t rsa4096; + + cx_ecfp_private_key_t ecfp; + cx_ecfp_256_private_key_t ecfp256; + cx_ecfp_384_private_key_t ecfp384; + cx_ecfp_512_private_key_t ecfp512; + cx_ecfp_640_private_key_t ecfp640; + } priv_key; + union { + unsigned char rsa[4]; + cx_ecfp_public_key_t ecfp; + cx_ecfp_256_public_key_t ecfp256; + cx_ecfp_384_public_key_t ecfp384; + cx_ecfp_512_public_key_t ecfp512; + cx_ecfp_640_public_key_t ecfp640; + } pub_key; + /* C7 C8 C9 , C5 = C7|C8|C9*/ + unsigned char fingerprints[20]; + /* 7F21 */ + LV(CA, GPG_EXT_CARD_HOLDER_CERT_LENTH); + /* C7 C8 C9, C6 = C7|C8|C9*/ + unsigned char CA_fingerprints[20]; + /* CE CF D0, CD = CE|CF|D0 */ + unsigned char date[4]; + /* D6/D7/D8- */ + unsigned char UIF[2]; } gpg_key_t; typedef struct gpg_key_slot_s { - unsigned char serial[4]; - /* */ - gpg_key_t sig; - gpg_key_t aut; - gpg_key_t dec; - /* -- Security support template -- */ - /* 93 */ - unsigned int sig_count; - /* D5 */ - cx_aes_key_t AES_dec; + unsigned char serial[4]; + /* */ + gpg_key_t sig; + gpg_key_t aut; + gpg_key_t dec; + /* -- Security support template -- */ + /* 93 */ + unsigned int sig_count; + /* D5 */ + cx_aes_key_t AES_dec; } gpg_key_slot_t; struct gpg_nv_state_s { - /* magic */ - unsigned char magic[8]; - - /* pin mode */ - unsigned char config_pin[1]; - - /* 01F1 (01F2 is volatile)*/ - unsigned char config_slot[3]; - /* RSA exponent */ - unsigned char default_RSA_exponent[4]; - - /* 0101 0102 0103 0104 */ - LV(private_DO1, GPG_EXT_PRIVATE_DO_LENGTH); - LV(private_DO2, GPG_EXT_PRIVATE_DO_LENGTH); - LV(private_DO3, GPG_EXT_PRIVATE_DO_LENGTH); - LV(private_DO4, GPG_EXT_PRIVATE_DO_LENGTH); - - /* 5E */ - LV(login, GPG_EXT_PRIVATE_DO_LENGTH); - /* 5F50 */ - LV(url, GPG_EXT_PRIVATE_DO_LENGTH); - - /* -- Cardholder Related Data -- */ - /* 5B */ - LV(name, 39); - /* 5F2D */ - LV(lang, 8); - /* 5F35 */ - unsigned char sex[1]; - - /* -- Application Related Data -- */ - /* 4F */ - unsigned char AID[16]; - /* 5F52 */ - unsigned char histo[15]; - /* 7f66 */ - // unsigned char ext_length_info[8]; - /* C0 */ - // unsigned char ext_capabilities[10]; - - /* C4 */ - unsigned char PW_status[4]; - - /* PINs */ - gpg_pin_t PW1; - gpg_pin_t PW3; - gpg_pin_t RC; - - /* gpg keys */ - gpg_key_slot_t keys[GPG_KEYS_SLOTS]; - - /* --- SM --- */ - /* D1 */ - cx_aes_key_t SM_enc; - /* D2 */ - cx_aes_key_t SM_mac; + /* magic */ + unsigned char magic[8]; + + /* pin mode */ + unsigned char config_pin[1]; + + /* 01F1 (01F2 is volatile)*/ + unsigned char config_slot[3]; + /* RSA exponent */ + unsigned char default_RSA_exponent[4]; + + /* 0101 0102 0103 0104 */ + LV(private_DO1, GPG_EXT_PRIVATE_DO_LENGTH); + LV(private_DO2, GPG_EXT_PRIVATE_DO_LENGTH); + LV(private_DO3, GPG_EXT_PRIVATE_DO_LENGTH); + LV(private_DO4, GPG_EXT_PRIVATE_DO_LENGTH); + + /* 5E */ + LV(login, GPG_EXT_PRIVATE_DO_LENGTH); + /* 5F50 */ + LV(url, GPG_EXT_PRIVATE_DO_LENGTH); + + /* -- Cardholder Related Data -- */ + /* 5B */ + LV(name, 39); + /* 5F2D */ + LV(lang, 8); + /* 5F35 */ + unsigned char sex[1]; + + /* -- Application Related Data -- */ + /* 4F */ + unsigned char AID[16]; + /* 5F52 */ + unsigned char histo[15]; + /* 7f66 */ + // unsigned char ext_length_info[8]; + /* C0 */ + // unsigned char ext_capabilities[10]; + + /* C4 */ + unsigned char PW_status[4]; + + /* PINs */ + gpg_pin_t PW1; + gpg_pin_t PW3; + gpg_pin_t RC; + + /* gpg keys */ + gpg_key_slot_t keys[GPG_KEYS_SLOTS]; + + /* --- SM --- */ + /* D1 */ + cx_aes_key_t SM_enc; + /* D2 */ + cx_aes_key_t SM_mac; }; typedef struct gpg_nv_state_s gpg_nv_state_t; @@ -182,105 +182,106 @@ typedef struct gpg_nv_state_s gpg_nv_state_t; #define GPG_IO_BUFFER_LENGTH (1512) struct gpg_v_state_s { - /* app state */ - unsigned char selected; - unsigned char slot; /* DO 01F2 */ - gpg_key_slot_t *kslot; - gpg_key_t * mse_aut; - gpg_key_t * mse_dec; - unsigned char seed_mode; - - unsigned char UIF_flags; - - /* io state*/ - - unsigned char io_cla; - unsigned char io_ins; - unsigned char io_p1; - unsigned char io_p2; - unsigned char io_lc; - unsigned char io_le; - unsigned short io_length; - unsigned short io_offset; - unsigned short io_mark; - union { - unsigned char io_buffer[GPG_IO_BUFFER_LENGTH]; - struct { - union { - cx_rsa_public_key_t public; - cx_rsa_1024_public_key_t public1024; - cx_rsa_2048_public_key_t public2048; - cx_rsa_3072_public_key_t public3072; - cx_rsa_4096_public_key_t public4096; - }; - union { - cx_rsa_private_key_t private; - cx_rsa_1024_private_key_t private1024; - cx_rsa_2048_private_key_t private2048; - cx_rsa_3072_private_key_t private3072; - cx_rsa_4096_private_key_t private4096; - }; - } rsa; - - struct { - union { - cx_ecfp_public_key_t public; - cx_ecfp_256_public_key_t public256; - cx_ecfp_384_public_key_t public384; - cx_ecfp_512_public_key_t public512; - cx_ecfp_640_public_key_t public640; - }; - union { - cx_ecfp_private_key_t private; - cx_ecfp_256_private_key_t private256; - cx_ecfp_384_private_key_t private384; - cx_ecfp_512_private_key_t private512; - cx_ecfp_640_private_key_t private640; - }; - } ecfp; - - struct { - unsigned char md_buffer[GPG_IO_BUFFER_LENGTH - (32 + MAX(sizeof(cx_sha3_t), sizeof(cx_sha256_t)))]; - unsigned char H[32]; - union { - cx_sha3_t sha3; - cx_sha256_t sha256; - }; - } md; - } work; - - /* data state */ - unsigned short DO_current; - unsigned short DO_reccord; - unsigned short DO_offset; - - /* PINs state */ - unsigned char verified_pin[5]; - unsigned char pinmode; - - /* ux menus */ - char menu[112]; - unsigned char ux_pinentry[12]; - unsigned int ux_key; - unsigned int ux_type; + /* app state */ + unsigned char selected; + unsigned char slot; /* DO 01F2 */ + gpg_key_slot_t *kslot; + gpg_key_t *mse_aut; + gpg_key_t *mse_dec; + unsigned char seed_mode; + + unsigned char UIF_flags; + + /* io state*/ + + unsigned char io_cla; + unsigned char io_ins; + unsigned char io_p1; + unsigned char io_p2; + unsigned char io_lc; + unsigned char io_le; + unsigned short io_length; + unsigned short io_offset; + unsigned short io_mark; + union { + unsigned char io_buffer[GPG_IO_BUFFER_LENGTH]; + struct { + union { + cx_rsa_public_key_t public; + cx_rsa_1024_public_key_t public1024; + cx_rsa_2048_public_key_t public2048; + cx_rsa_3072_public_key_t public3072; + cx_rsa_4096_public_key_t public4096; + }; + union { + cx_rsa_private_key_t private; + cx_rsa_1024_private_key_t private1024; + cx_rsa_2048_private_key_t private2048; + cx_rsa_3072_private_key_t private3072; + cx_rsa_4096_private_key_t private4096; + }; + } rsa; + + struct { + union { + cx_ecfp_public_key_t public; + cx_ecfp_256_public_key_t public256; + cx_ecfp_384_public_key_t public384; + cx_ecfp_512_public_key_t public512; + cx_ecfp_640_public_key_t public640; + }; + union { + cx_ecfp_private_key_t private; + cx_ecfp_256_private_key_t private256; + cx_ecfp_384_private_key_t private384; + cx_ecfp_512_private_key_t private512; + cx_ecfp_640_private_key_t private640; + }; + } ecfp; + + struct { + unsigned char md_buffer[GPG_IO_BUFFER_LENGTH - + (32 + MAX(sizeof(cx_sha3_t), sizeof(cx_sha256_t)))]; + unsigned char H[32]; + union { + cx_sha3_t sha3; + cx_sha256_t sha256; + }; + } md; + } work; + + /* data state */ + unsigned short DO_current; + unsigned short DO_reccord; + unsigned short DO_offset; + + /* PINs state */ + unsigned char verified_pin[5]; + unsigned char pinmode; + + /* ux menus */ + char menu[112]; + unsigned char ux_pinentry[12]; + unsigned int ux_key; + unsigned int ux_type; #ifdef UI_NANO_S - ux_menu_entry_t ui_dogsays[2]; + ux_menu_entry_t ui_dogsays[2]; #endif #ifdef UI_NANO_X - char ux_buff1[32]; - char ux_buff2[32]; - char ux_buff3[32]; - char ux_buff4[32]; - char ux_buff5[32]; + char ux_buff1[32]; + char ux_buff2[32]; + char ux_buff3[32]; + char ux_buff4[32]; + char ux_buff5[32]; #endif - #ifdef GPG_LOG +#ifdef GPG_LOG unsigned char log_buffer[32]; - #endif +#endif #ifdef GPG_DEBUG - unsigned char print; + unsigned char print; #endif }; typedef struct gpg_v_state_s gpg_v_state_t; @@ -290,29 +291,29 @@ typedef struct gpg_v_state_s gpg_v_state_t; #define ERROR(x) ((x) << 16) #define ERROR_IO_OFFSET ERROR(1) -#define ERROR_IO_FULL ERROR(2) +#define ERROR_IO_FULL ERROR(2) /* --- IDentifiers --- */ #define ID_AUTH 1 -#define ID_DEC 2 -#define ID_SIG 3 +#define ID_DEC 2 +#define ID_SIG 3 -#define STATE_ACTIVATE 0x07 +#define STATE_ACTIVATE 0x07 #define STATE_TERMINATE 0x03 -#define IO_OFFSET_END (unsigned int)-1 -#define IO_OFFSET_MARK (unsigned int)-2 +#define IO_OFFSET_END (unsigned int) -1 +#define IO_OFFSET_MARK (unsigned int) -2 #define PIN_ID_PW1 0x81 #define PIN_ID_PW2 0x82 #define PIN_ID_PW3 0x83 -#define PIN_ID_RC 0x84 +#define PIN_ID_RC 0x84 -#define PIN_MODE_HOST 1 -#define PIN_MODE_SCREEN 2 +#define PIN_MODE_HOST 1 +#define PIN_MODE_SCREEN 2 #define PIN_MODE_CONFIRM 3 -#define PIN_MODE_TRUST 4 +#define PIN_MODE_TRUST 4 /* --- INS --- */ #define INS_EXIT 0x02 @@ -320,73 +321,73 @@ typedef struct gpg_v_state_s gpg_v_state_t; #define INS_GET_LOG 0x04 #endif -#define INS_SELECT 0xa4 -#define INS_TERMINATE_DF 0xe6 +#define INS_SELECT 0xa4 +#define INS_TERMINATE_DF 0xe6 #define INS_ACTIVATE_FILE 0x44 -#define INS_SELECT_DATA 0xa5 -#define INS_GET_DATA 0xca +#define INS_SELECT_DATA 0xa5 +#define INS_GET_DATA 0xca #define INS_GET_NEXT_DATA 0xcc -#define INS_PUT_DATA 0xda -#define INS_PUT_DATA_ODD 0xdb +#define INS_PUT_DATA 0xda +#define INS_PUT_DATA_ODD 0xdb -#define INS_VERIFY 0x20 -#define INS_MSE 0x22 +#define INS_VERIFY 0x20 +#define INS_MSE 0x22 #define INS_CHANGE_REFERENCE_DATA 0x24 -#define INS_RESET_RETRY_COUNTER 0x2c +#define INS_RESET_RETRY_COUNTER 0x2c #define INS_GEN_ASYM_KEYPAIR 0x47 -#define INS_PSO 0x2a -//#define INS_COMPUTEDIGSIG 0x2a -//#define INS_DECIPHER 0x2a +#define INS_PSO 0x2a +// #define INS_COMPUTEDIGSIG 0x2a +// #define INS_DECIPHER 0x2a #define INS_INTERNAL_AUTHENTICATE 0x88 #define INS_GET_CHALLENGE 0x84 -#define INS_GET_RESPONSE 0xc0 +#define INS_GET_RESPONSE 0xc0 /* --- IO constants --- */ -#define OFFSET_CLA 0 -#define OFFSET_INS 1 -#define OFFSET_P1 2 -#define OFFSET_P2 3 -#define OFFSET_P3 4 -#define OFFSET_CDATA 5 +#define OFFSET_CLA 0 +#define OFFSET_INS 1 +#define OFFSET_P1 2 +#define OFFSET_P2 3 +#define OFFSET_P3 4 +#define OFFSET_CDATA 5 #define OFFSET_EXT_CDATA 7 -#define SW_OK 0x9000 +#define SW_OK 0x9000 #define SW_ALGORITHM_UNSUPPORTED 0x9484 #define SW_BYTES_REMAINING_00 0x6100 #define SW_WARNING_STATE_UNCHANGED 0x6200 -#define SW_STATE_TERMINATED 0x6285 +#define SW_STATE_TERMINATED 0x6285 #define SW_MORE_DATA_AVAILABLE 0x6310 #define SW_WRONG_LENGTH 0x6700 -#define SW_LOGICAL_CHANNEL_NOT_SUPPORTED 0x6881 +#define SW_LOGICAL_CHANNEL_NOT_SUPPORTED 0x6881 #define SW_SECURE_MESSAGING_NOT_SUPPORTED 0x6882 -#define SW_LAST_COMMAND_EXPECTED 0x6883 +#define SW_LAST_COMMAND_EXPECTED 0x6883 #define SW_COMMAND_CHAINING_NOT_SUPPORTED 0x6884 #define SW_SECURITY_STATUS_NOT_SATISFIED 0x6982 -#define SW_FILE_INVALID 0x6983 -#define SW_PIN_BLOCKED 0x6983 -#define SW_DATA_INVALID 0x6984 -#define SW_CONDITIONS_NOT_SATISFIED 0x6985 -#define SW_COMMAND_NOT_ALLOWED 0x6986 -#define SW_APPLET_SELECT_FAILED 0x6999 - -#define SW_WRONG_DATA 0x6a80 -#define SW_FUNC_NOT_SUPPORTED 0x6a81 -#define SW_FILE_NOT_FOUND 0x6a82 -#define SW_RECORD_NOT_FOUND 0x6a83 -#define SW_FILE_FULL 0x6a84 -#define SW_INCORRECT_P1P2 0x6a86 +#define SW_FILE_INVALID 0x6983 +#define SW_PIN_BLOCKED 0x6983 +#define SW_DATA_INVALID 0x6984 +#define SW_CONDITIONS_NOT_SATISFIED 0x6985 +#define SW_COMMAND_NOT_ALLOWED 0x6986 +#define SW_APPLET_SELECT_FAILED 0x6999 + +#define SW_WRONG_DATA 0x6a80 +#define SW_FUNC_NOT_SUPPORTED 0x6a81 +#define SW_FILE_NOT_FOUND 0x6a82 +#define SW_RECORD_NOT_FOUND 0x6a83 +#define SW_FILE_FULL 0x6a84 +#define SW_INCORRECT_P1P2 0x6a86 #define SW_REFERENCED_DATA_NOT_FOUND 0x6a88 -#define SW_WRONG_P1P2 0x6b00 +#define SW_WRONG_P1P2 0x6b00 #define SW_CORRECT_LENGTH_00 0x6c00 #define SW_INS_NOT_SUPPORTED 0x6d00 #define SW_CLA_NOT_SUPPORTED 0x6e00 diff --git a/src/gpg_ux_msg.c b/src/gpg_ux_msg.c index f60d7fd..ea0c4ca 100644 --- a/src/gpg_ux_msg.c +++ b/src/gpg_ux_msg.c @@ -13,24 +13,24 @@ * limitations under the License. */ -const char *const C_TEMPLATE_TYPE = "Key type"; -const char *const C_TEMPLATE_KEY = "Key"; +const char *const C_TEMPLATE_TYPE = "Key type"; +const char *const C_TEMPLATE_KEY = "Key"; const char *const C_INVALID_SELECTION = "Invalid selection"; -const char *const C_OK = "OK"; +const char *const C_OK = "OK"; const char *const C_NOK = "NOK"; -const char *const C_WRONG_PIN = "PIN Incorrect"; -const char *const C_RIGHT_PIN = "PIN Correct"; +const char *const C_WRONG_PIN = "PIN Incorrect"; +const char *const C_RIGHT_PIN = "PIN Correct"; const char *const C_PIN_CHANGED = "PIN changed"; const char *const C_PIN_DIFFERS = "2 PINs differs"; -const char *const C_PIN_USER = "User PIN"; -const char *const C_PIN_ADMIN = "Admin PIN"; +const char *const C_PIN_USER = "User PIN"; +const char *const C_PIN_ADMIN = "Admin PIN"; -const char *const C_VERIFIED = "Verified"; +const char *const C_VERIFIED = "Verified"; const char *const C_NOT_VERIFIED = "Not Verified"; -const char *const C_ALLOWED = "Allowed"; -const char *const C_NOT_ALLOWED = "Not Allowed "; +const char *const C_ALLOWED = "Allowed"; +const char *const C_NOT_ALLOWED = "Not Allowed "; const char *const C_DEFAULT_MODE = "Default mode"; diff --git a/src/gpg_ux_msg.h b/src/gpg_ux_msg.h index 7e4fa32..ade9c3f 100644 --- a/src/gpg_ux_msg.h +++ b/src/gpg_ux_msg.h @@ -39,25 +39,25 @@ extern const char *const C_DEFAULT_MODE; extern const char *const C_UIF_LOCKED; extern const char *const C_UIF_INVALID; -#define PICSTR(x) ((char *)PIC(x)) +#define PICSTR(x) ((char *) PIC(x)) -#define TEMPLATE_TYPE PICSTR(C_TEMPLATE_TYPE) -#define TEMPLATE_KEY PICSTR(C_TEMPLATE_KEY) +#define TEMPLATE_TYPE PICSTR(C_TEMPLATE_TYPE) +#define TEMPLATE_KEY PICSTR(C_TEMPLATE_KEY) #define INVALID_SELECTION PICSTR(C_INVALID_SELECTION) -#define OK PICSTR(C_OK) -#define NOK PICSTR(C_NOK) -#define WRONG_PIN PICSTR(C_WRONG_PIN) -#define RIGHT_PIN PICSTR(C_RIGHT_PIN) -#define PIN_CHANGED PICSTR(C_PIN_CHANGED) -#define PIN_DIFFERS PICSTR(C_PIN_DIFFERS) -#define PIN_USER PICSTR(C_PIN_USER) -#define PIN_ADMIN PICSTR(C_PIN_ADMIN) -#define VERIFIED PICSTR(C_VERIFIED) -#define NOT_VERIFIED PICSTR(C_NOT_VERIFIED) -#define ALLOWED PICSTR(C_ALLOWED) -#define NOT_ALLOWED PICSTR(C_NOT_ALLOWED) -#define DEFAULT_MODE PICSTR(C_DEFAULT_MODE) -#define UIF_LOCKED PICSTR(C_UIF_LOCKED) -#define UIF_INVALID PICSTR(C_UIF_INVALID) +#define OK PICSTR(C_OK) +#define NOK PICSTR(C_NOK) +#define WRONG_PIN PICSTR(C_WRONG_PIN) +#define RIGHT_PIN PICSTR(C_RIGHT_PIN) +#define PIN_CHANGED PICSTR(C_PIN_CHANGED) +#define PIN_DIFFERS PICSTR(C_PIN_DIFFERS) +#define PIN_USER PICSTR(C_PIN_USER) +#define PIN_ADMIN PICSTR(C_PIN_ADMIN) +#define VERIFIED PICSTR(C_VERIFIED) +#define NOT_VERIFIED PICSTR(C_NOT_VERIFIED) +#define ALLOWED PICSTR(C_ALLOWED) +#define NOT_ALLOWED PICSTR(C_NOT_ALLOWED) +#define DEFAULT_MODE PICSTR(C_DEFAULT_MODE) +#define UIF_LOCKED PICSTR(C_UIF_LOCKED) +#define UIF_INVALID PICSTR(C_UIF_INVALID) #endif diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index fcee0d5..a66a583 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -32,62 +32,66 @@ /* ----------------------------------------------------------------------- */ const ux_menu_entry_t ui_menu_template[]; -void ui_menu_template_display(unsigned int value); -const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element); -void ui_menu_tmpl_set_action(unsigned int value); +void ui_menu_template_display(unsigned int value); +const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element); +void ui_menu_tmpl_set_action(unsigned int value); const ux_menu_entry_t ui_menu_tmpl_key[]; -void ui_menu_tmpl_key_action(unsigned int value); +void ui_menu_tmpl_key_action(unsigned int value); const ux_menu_entry_t ui_menu_tmpl_type[]; -void ui_menu_tmpl_type_action(unsigned int value); +void ui_menu_tmpl_type_action(unsigned int value); const ux_menu_entry_t ui_menu_seed[]; -void ui_menu_seed_display(unsigned int value); -const bagl_element_t *ui_menu_seed_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element); -void ui_menu_seed_action(unsigned int value); +void ui_menu_seed_display(unsigned int value); +const bagl_element_t *ui_menu_seed_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element); +void ui_menu_seed_action(unsigned int value); const ux_menu_entry_t ui_menu_reset[]; -void ui_menu_reset_action(unsigned int value); +void ui_menu_reset_action(unsigned int value); #if GPG_MULTISLOT const ux_menu_entry_t ui_menu_slot[]; -void ui_menu_slot_display(unsigned int value); -const bagl_element_t *ui_menu_slot_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element); -void ui_menu_slot_action(unsigned int value); +void ui_menu_slot_display(unsigned int value); +const bagl_element_t *ui_menu_slot_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element); +void ui_menu_slot_action(unsigned int value); #endif const ux_menu_entry_t ui_menu_settings[]; const ux_menu_entry_t ui_menu_main[]; -void ui_menu_main_display(unsigned int value); -const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element); +void ui_menu_main_display(unsigned int value); +const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element); const bagl_element_t ui_pinconfirm_nanos[]; -void ui_menu_pinconfirm_action(unsigned int value); -unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); -unsigned int ui_pinconfirm_prepro(const bagl_element_t *element); +void ui_menu_pinconfirm_action(unsigned int value); +unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); +unsigned int ui_pinconfirm_prepro(const bagl_element_t *element); const bagl_element_t ui_pinentry_nanos[]; -void ui_menu_pinentry_display(unsigned int value); -void ui_menu_pinentry_action(unsigned int value); -unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); -unsigned int ui_pinentry_prepro(const bagl_element_t *element); -static unsigned int validate_pin(); +void ui_menu_pinentry_display(unsigned int value); +void ui_menu_pinentry_action(unsigned int value); +unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); +unsigned int ui_pinentry_prepro(const bagl_element_t *element); +static unsigned int validate_pin(); /* ------------------------------- Helpers UX ------------------------------- */ void ui_CCID_reset(void) { - io_usb_ccid_set_card_inserted(0); - io_usb_ccid_set_card_inserted(1); + io_usb_ccid_set_card_inserted(0); + io_usb_ccid_set_card_inserted(1); } void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { - memset(&G_gpg_vstate.ui_dogsays[0], 0, sizeof(ux_menu_entry_t)); - G_gpg_vstate.ui_dogsays[0].callback = menu_display; - G_gpg_vstate.ui_dogsays[0].userid = value; - G_gpg_vstate.ui_dogsays[0].line1 = msg1; - G_gpg_vstate.ui_dogsays[0].line2 = msg2; - - memset(&G_gpg_vstate.ui_dogsays[1], 0, sizeof(ux_menu_entry_t)); - UX_MENU_DISPLAY(0, G_gpg_vstate.ui_dogsays, NULL); + memset(&G_gpg_vstate.ui_dogsays[0], 0, sizeof(ux_menu_entry_t)); + G_gpg_vstate.ui_dogsays[0].callback = menu_display; + G_gpg_vstate.ui_dogsays[0].userid = value; + G_gpg_vstate.ui_dogsays[0].line1 = msg1; + G_gpg_vstate.ui_dogsays[0].line2 = msg2; + + memset(&G_gpg_vstate.ui_dogsays[1], 0, sizeof(ux_menu_entry_t)); + UX_MENU_DISPLAY(0, G_gpg_vstate.ui_dogsays, NULL); }; /* ------------------------------ UIF CONFIRM UX ----------------------------- */ @@ -95,375 +99,469 @@ unsigned int ui_uifconfirm_nanos_button(unsigned int button_mask, unsigned int b unsigned int ui_uifconfirm_prepro(const bagl_element_t *element); const bagl_element_t ui_uifconfirm_nanos[] = { - // type userid x y w h str rad fill fg bg font_id icon_id - {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, - NULL}, - - {{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CROSS}, - NULL}, - - {{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CHECK}, - NULL}, - - {{BAGL_LABELINE, 0x01, 0, 12, 128, 32, 0, 0, 0, 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, + // type userid x y w h str rad fill fg bg + // font_id icon_id + {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, + + {{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CROSS}, NULL}, + + {{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CHECK}, NULL}, + + {{BAGL_LABELINE, + 0x01, + 0, + 12, + 128, + 32, + 0, + 0, + 0, + 0xFFFFFF, + 0x000000, + BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, + 0}, G_gpg_vstate.menu}, - {{BAGL_LABELINE, 0x02, 0, 26, 128, 32, 0, 0, 0, 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, + {{BAGL_LABELINE, + 0x02, + 0, + 26, + 128, + 32, + 0, + 0, + 0, + 0xFFFFFF, + 0x000000, + BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, + 0}, G_gpg_vstate.menu}, }; void ui_menu_uifconfirm_display(unsigned int value) { - UNUSED(value); - UX_DISPLAY(ui_uifconfirm_nanos, (void *)ui_uifconfirm_prepro); + UNUSED(value); + UX_DISPLAY(ui_uifconfirm_nanos, (void *) ui_uifconfirm_prepro); } unsigned int ui_uifconfirm_prepro(const bagl_element_t *element) { - if (element->component.userid == 1) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm:"); - return 1; - } - if (element->component.userid == 2) { - unsigned int uif_case = (G_gpg_vstate.io_ins << 16) | (G_gpg_vstate.io_p1 << 8) | (G_gpg_vstate.io_p2); - switch (uif_case) { - case 0x002A9E9A: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); - return 1; - case 0x002A8680: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); - return 1; - case 0x002A8086: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); - return 1; - case 0x00880000: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Authentication"); - return 1; + if (element->component.userid == 1) { + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm:"); + return 1; } - } - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); - return 1; + if (element->component.userid == 2) { + unsigned int uif_case = + (G_gpg_vstate.io_ins << 16) | (G_gpg_vstate.io_p1 << 8) | (G_gpg_vstate.io_p2); + switch (uif_case) { + case 0x002A9E9A: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); + return 1; + case 0x002A8680: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); + return 1; + case 0x002A8086: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); + return 1; + case 0x00880000: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Authentication"); + return 1; + } + } + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); + return 1; } -unsigned int ui_uifconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { - UNUSED(button_mask_counter); - unsigned int sw; +unsigned int ui_uifconfirm_nanos_button(unsigned int button_mask, + unsigned int button_mask_counter) { + UNUSED(button_mask_counter); + unsigned int sw; - sw = 0x6985; - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: // CANCEL - gpg_io_discard(1); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); sw = 0x6985; - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // OK - BEGIN_TRY { - TRY { - G_gpg_vstate.UIF_flags = 1; - if (G_gpg_vstate.io_ins == INS_PSO) { - sw = gpg_apdu_pso(); - } else if (G_gpg_vstate.io_ins == INS_INTERNAL_AUTHENTICATE) { - sw = gpg_apdu_internal_authenticate(); - } else { - gpg_io_discard(1); - sw = 0x6985; - } - } - CATCH_OTHER(e) { - gpg_io_discard(1); - if ((e & 0xFFFF0000) || (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { - gpg_io_insert_u32(e); - sw = 0x6f42; - } else { - sw = e; - } - } - FINALLY { - G_gpg_vstate.UIF_flags = 0; - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - } - break; + switch (button_mask) { + case BUTTON_EVT_RELEASED | BUTTON_LEFT: // CANCEL + gpg_io_discard(1); + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); + sw = 0x6985; + break; + + case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // OK + BEGIN_TRY { + TRY { + G_gpg_vstate.UIF_flags = 1; + if (G_gpg_vstate.io_ins == INS_PSO) { + sw = gpg_apdu_pso(); + } else if (G_gpg_vstate.io_ins == INS_INTERNAL_AUTHENTICATE) { + sw = gpg_apdu_internal_authenticate(); + } else { + gpg_io_discard(1); + sw = 0x6985; + } + } + CATCH_OTHER(e) { + gpg_io_discard(1); + if ((e & 0xFFFF0000) || + (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { + gpg_io_insert_u32(e); + sw = 0x6f42; + } else { + sw = e; + } + } + FINALLY { + G_gpg_vstate.UIF_flags = 0; + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); + } + break; + } + END_TRY; } - END_TRY; - } - return 0; + return 0; } /* ------------------------------ PIN CONFIRM UX ----------------------------- */ const bagl_element_t ui_pinconfirm_nanos[] = { - // type userid x y w h str rad fill fg bg font_id icon_id - {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, - NULL}, - - {{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CROSS}, - NULL}, - - {{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CHECK}, - NULL}, - - {{BAGL_LABELINE, 0x01, 0, 12, 128, 32, 0, 0, 0, 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, + // type userid x y w h str rad fill fg bg + // font_id icon_id + {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, + + {{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CROSS}, NULL}, + + {{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_CHECK}, NULL}, + + {{BAGL_LABELINE, + 0x01, + 0, + 12, + 128, + 32, + 0, + 0, + 0, + 0xFFFFFF, + 0x000000, + BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, + 0}, G_gpg_vstate.menu}, - {{BAGL_LABELINE, 0x02, 0, 26, 128, 32, 0, 0, 0, 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, + {{BAGL_LABELINE, + 0x02, + 0, + 26, + 128, + 32, + 0, + 0, + 0, + 0xFFFFFF, + 0x000000, + BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, + 0}, G_gpg_vstate.menu}, }; void ui_menu_pinconfirm_display(unsigned int value) { - UNUSED(value); - UX_DISPLAY(ui_pinconfirm_nanos, (void *)ui_pinconfirm_prepro); + UNUSED(value); + UX_DISPLAY(ui_pinconfirm_nanos, (void *) ui_pinconfirm_prepro); } unsigned int ui_pinconfirm_prepro(const bagl_element_t *element) { - if (element->component.userid == 1) { - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || (G_gpg_vstate.io_p2 == 0x83)) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm PIN"); - return 1; + if (element->component.userid == 1) { + if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || + (G_gpg_vstate.io_p2 == 0x83)) { + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm PIN"); + return 1; + } } - } - if (element->component.userid == 2) { - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || (G_gpg_vstate.io_p2 == 0x83)) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s %x", G_gpg_vstate.io_p2 == 0x83 ? "Admin" : "User", - G_gpg_vstate.io_p2); - return 1; + if (element->component.userid == 2) { + if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || + (G_gpg_vstate.io_p2 == 0x83)) { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s %x", + G_gpg_vstate.io_p2 == 0x83 ? "Admin" : "User", + G_gpg_vstate.io_p2); + return 1; + } } - } - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); - return 1; + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); + return 1; } -unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { - UNUSED(button_mask_counter); - unsigned int sw; +unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, + unsigned int button_mask_counter) { + UNUSED(button_mask_counter); + unsigned int sw; - sw = 0x6985; - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: // CANCEL - gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); sw = 0x6985; - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // OK - gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); - sw = 0x9000; - break; - default: + switch (button_mask) { + case BUTTON_EVT_RELEASED | BUTTON_LEFT: // CANCEL + gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); + sw = 0x6985; + break; + + case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // OK + gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); + sw = 0x9000; + break; + default: + return 0; + } + gpg_io_discard(0); + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); return 0; - } - gpg_io_discard(0); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - return 0; } /* ------------------------------- PIN ENTRY UX ------------------------------ */ const bagl_element_t ui_pinentry_nanos[] = { - // type userid x y w h str rad fill fg bg font_id icon_id - {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, - NULL}, - - {{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_DOWN}, - NULL}, - - {{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_UP}, - NULL}, - - {{BAGL_LABELINE, 0x01, 0, 12, 128, 32, 0, 0, 0, 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, + // type userid x y w h str rad fill fg bg + // font_id icon_id + {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, + + {{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_DOWN}, NULL}, + + {{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_UP}, NULL}, + + {{BAGL_LABELINE, + 0x01, + 0, + 12, + 128, + 32, + 0, + 0, + 0, + 0xFFFFFF, + 0x000000, + BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, + 0}, G_gpg_vstate.menu}, - {{BAGL_LABELINE, 0x02, 0, 26, 128, 32, 0, 0, 0, 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_REGULAR_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, + {{BAGL_LABELINE, + 0x02, + 0, + 26, + 128, + 32, + 0, + 0, + 0, + 0xFFFFFF, + 0x000000, + BAGL_FONT_OPEN_SANS_REGULAR_11px | BAGL_FONT_ALIGNMENT_CENTER, + 0}, G_gpg_vstate.menu}, }; static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '<', 'A', 'V'}; void ui_menu_pinentry_display(unsigned int value) { - if (value == 0) { - memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); - G_gpg_vstate.ux_pinentry[0] = 1; - G_gpg_vstate.ux_pinentry[1] = 5; - } - UX_DISPLAY(ui_pinentry_nanos, (void *)ui_pinentry_prepro); + if (value == 0) { + memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + G_gpg_vstate.ux_pinentry[0] = 1; + G_gpg_vstate.ux_pinentry[1] = 5; + } + UX_DISPLAY(ui_pinentry_nanos, (void *) ui_pinentry_prepro); } unsigned int ui_pinentry_prepro(const bagl_element_t *element) { - if (element->component.userid == 1) { - if (G_gpg_vstate.io_ins == 0x24) { - switch (G_gpg_vstate.io_p1) { - case 0: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Current %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - break; - case 1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "New %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - break; - case 2: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - break; - default: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "WAT %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - break; - } - } else { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s PIN", (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - } - } else if (element->component.userid == 2) { - unsigned int i; - G_gpg_vstate.menu[0] = ' '; + if (element->component.userid == 1) { + if (G_gpg_vstate.io_ins == 0x24) { + switch (G_gpg_vstate.io_p1) { + case 0: + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "Current %s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + break; + case 1: + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "New %s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + break; + case 2: + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "Confirm %s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + break; + default: + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "WAT %s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + break; + } + } else { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + } + } else if (element->component.userid == 2) { + unsigned int i; + G_gpg_vstate.menu[0] = ' '; #if 0 for (i = 1; i <= G_gpg_vstate.ux_pinentry[0]; i++) { G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; } #else - for (i = 1; i < G_gpg_vstate.ux_pinentry[0]; i++) { - G_gpg_vstate.menu[i] = '*'; - } - G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; - i++; + for (i = 1; i < G_gpg_vstate.ux_pinentry[0]; i++) { + G_gpg_vstate.menu[i] = '*'; + } + G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; + i++; #endif - for (; i <= GPG_MAX_PW_LENGTH; i++) { - G_gpg_vstate.menu[i] = '-'; + for (; i <= GPG_MAX_PW_LENGTH; i++) { + G_gpg_vstate.menu[i] = '-'; + } + G_gpg_vstate.menu[i] = 0; } - G_gpg_vstate.menu[i] = 0; - } - return 1; + return 1; } unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { - UNUSED(button_mask_counter); - unsigned int offset = G_gpg_vstate.ux_pinentry[0]; - char digit; - - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down - if (G_gpg_vstate.ux_pinentry[offset]) { - G_gpg_vstate.ux_pinentry[offset]--; - } else { - G_gpg_vstate.ux_pinentry[offset] = sizeof(C_pin_digit) - 1; - } - ui_menu_pinentry_display(1); - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // up - G_gpg_vstate.ux_pinentry[offset]++; - if (G_gpg_vstate.ux_pinentry[offset] == sizeof(C_pin_digit)) { - G_gpg_vstate.ux_pinentry[offset] = 0; - } - ui_menu_pinentry_display(1); - break; - - case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: - digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; - // next digit - if ((digit >= '0') && (digit <= '9')) { - offset++; - G_gpg_vstate.ux_pinentry[0] = offset; - if (offset == GPG_MAX_PW_LENGTH + 1) { - validate_pin(); - } else { - G_gpg_vstate.ux_pinentry[offset] = 5; - ui_menu_pinentry_display(1); - } - } - // cancel digit - else if (digit == '<') { - if (offset > 1) { - offset--; - G_gpg_vstate.ux_pinentry[0] = offset; - } - ui_menu_pinentry_display(1); + UNUSED(button_mask_counter); + unsigned int offset = G_gpg_vstate.ux_pinentry[0]; + char digit; + + switch (button_mask) { + case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down + if (G_gpg_vstate.ux_pinentry[offset]) { + G_gpg_vstate.ux_pinentry[offset]--; + } else { + G_gpg_vstate.ux_pinentry[offset] = sizeof(C_pin_digit) - 1; + } + ui_menu_pinentry_display(1); + break; + + case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // up + G_gpg_vstate.ux_pinentry[offset]++; + if (G_gpg_vstate.ux_pinentry[offset] == sizeof(C_pin_digit)) { + G_gpg_vstate.ux_pinentry[offset] = 0; + } + ui_menu_pinentry_display(1); + break; + + case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: + digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; + // next digit + if ((digit >= '0') && (digit <= '9')) { + offset++; + G_gpg_vstate.ux_pinentry[0] = offset; + if (offset == GPG_MAX_PW_LENGTH + 1) { + validate_pin(); + } else { + G_gpg_vstate.ux_pinentry[offset] = 5; + ui_menu_pinentry_display(1); + } + } + // cancel digit + else if (digit == '<') { + if (offset > 1) { + offset--; + G_gpg_vstate.ux_pinentry[0] = offset; + } + ui_menu_pinentry_display(1); + } + // validate pin + else if (digit == 'V') { + G_gpg_vstate.ux_pinentry[0] = offset - 1; + validate_pin(); + } + // cancel input without check + else { //(digit == 'A') + gpg_io_discard(0); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); + } + break; } - // validate pin - else if (digit == 'V') { - G_gpg_vstate.ux_pinentry[0] = offset - 1; - validate_pin(); - } - // cancel input without check - else { //(digit == 'A') - gpg_io_discard(0); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - } - break; - } - return 0; + return 0; } // >= 0 static unsigned int validate_pin() { - unsigned int offset, len, sw; - gpg_pin_t * pin; - - for (offset = 1; offset <= G_gpg_vstate.ux_pinentry[0]; offset++) { - G_gpg_vstate.menu[offset] = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; - } + unsigned int offset, len, sw; + gpg_pin_t *pin; - if (G_gpg_vstate.io_ins == 0x20) { - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - sw = gpg_pin_check(pin, G_gpg_vstate.io_p2, (unsigned char *)(G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); - gpg_io_discard(1); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - if (sw != SW_OK) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display, 0); - } else { - ui_menu_main_display(0); + for (offset = 1; offset <= G_gpg_vstate.ux_pinentry[0]; offset++) { + G_gpg_vstate.menu[offset] = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; } - } - if (G_gpg_vstate.io_ins == 0x24) { - if (G_gpg_vstate.io_p1 <= 2) { - gpg_io_insert_u8(G_gpg_vstate.ux_pinentry[0]); - gpg_io_insert((unsigned char *)(G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); - G_gpg_vstate.io_p1++; - } - if (G_gpg_vstate.io_p1 == 3) { - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - if (gpg_pin_check(pin, G_gpg_vstate.io_p2, G_gpg_vstate.work.io_buffer + 1, G_gpg_vstate.work.io_buffer[0]) != - SW_OK) { + if (G_gpg_vstate.io_ins == 0x20) { + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + sw = gpg_pin_check(pin, + G_gpg_vstate.io_p2, + (unsigned char *) (G_gpg_vstate.menu + 1), + G_gpg_vstate.ux_pinentry[0]); gpg_io_discard(1); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, NULL, ui_menu_main_display, 0); - return 0; - } - offset = 1 + G_gpg_vstate.work.io_buffer[0]; - len = G_gpg_vstate.work.io_buffer[offset]; - if ((len != G_gpg_vstate.work.io_buffer[offset + 1 + len]) || - (memcmp(G_gpg_vstate.work.io_buffer + offset + 1, G_gpg_vstate.work.io_buffer + offset + 1 + len + 1, - len) != 0)) { - gpg_io_discard(1); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_info(PIN_DIFFERS, NULL, ui_menu_main_display, 0); - } else { - gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), G_gpg_vstate.work.io_buffer + offset + 1, len); - gpg_io_discard(1); - gpg_io_insert_u16(SW_OK); + gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); - // ui_info(PIN_CHANGED, NULL, ui_menu_main_display, 0); - ui_menu_main_display(0); - } - return 0; - } else { - ui_menu_pinentry_display(0); + if (sw != SW_OK) { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + " %d tries remaining", + pin->counter); + ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display, 0); + } else { + ui_menu_main_display(0); + } + } + + if (G_gpg_vstate.io_ins == 0x24) { + if (G_gpg_vstate.io_p1 <= 2) { + gpg_io_insert_u8(G_gpg_vstate.ux_pinentry[0]); + gpg_io_insert((unsigned char *) (G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); + G_gpg_vstate.io_p1++; + } + if (G_gpg_vstate.io_p1 == 3) { + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + if (gpg_pin_check(pin, + G_gpg_vstate.io_p2, + G_gpg_vstate.work.io_buffer + 1, + G_gpg_vstate.work.io_buffer[0]) != SW_OK) { + gpg_io_discard(1); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + " %d tries remaining", + pin->counter); + ui_info(WRONG_PIN, NULL, ui_menu_main_display, 0); + return 0; + } + offset = 1 + G_gpg_vstate.work.io_buffer[0]; + len = G_gpg_vstate.work.io_buffer[offset]; + if ((len != G_gpg_vstate.work.io_buffer[offset + 1 + len]) || + (memcmp(G_gpg_vstate.work.io_buffer + offset + 1, + G_gpg_vstate.work.io_buffer + offset + 1 + len + 1, + len) != 0)) { + gpg_io_discard(1); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_info(PIN_DIFFERS, NULL, ui_menu_main_display, 0); + } else { + gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), + G_gpg_vstate.work.io_buffer + offset + 1, + len); + gpg_io_discard(1); + gpg_io_insert_u16(SW_OK); + gpg_io_do(IO_RETURN_AFTER_TX); + // ui_info(PIN_CHANGED, NULL, ui_menu_main_display, 0); + ui_menu_main_display(0); + } + return 0; + } else { + ui_menu_pinentry_display(0); + } } - } - return 0; + return 0; } /* ------------------------------- template UX ------------------------------- */ @@ -471,189 +569,192 @@ static unsigned int validate_pin() { #define LABEL_AUT "Authentication" #define LABEL_DEC "Decryption" -#define LABEL_RSA2048 "RSA 2048" -#define LABEL_RSA3072 "RSA 3072" -#define LABEL_RSA4096 "RSA 4096" +#define LABEL_RSA2048 "RSA 2048" +#define LABEL_RSA3072 "RSA 3072" +#define LABEL_RSA4096 "RSA 4096" #define LABEL_NISTP256 "NIST P256" -//#define LABEL_NISTP384 "NIST P384" -//#define LABEL_NISTP521 "NIST P521" -#define LABEL_SECP256K1 "SEPC 256K1" -//#define LABEL_BPOOL256R1 "Brainpool 256R1" -//#define LABEL_BPOOL384R1 "Brainpool 384R1" -//#define LABEL_BPOOL512R1 "Brainpool 512R1" +// #define LABEL_NISTP384 "NIST P384" +// #define LABEL_NISTP521 "NIST P521" +#define LABEL_SECP256K1 "SECP 256K1" +// #define LABEL_BPOOL256R1 "Brainpool 256R1" +// #define LABEL_BPOOL384R1 "Brainpool 384R1" +// #define LABEL_BPOOL512R1 "Brainpool 512R1" #define LABEL_Ed25519 "Ed25519" -const ux_menu_entry_t ui_menu_template[] = {{ui_menu_tmpl_key, NULL, -1, NULL, "Choose key...", NULL, 0, 0}, - {ui_menu_tmpl_type, NULL, -1, NULL, "Choose type...", NULL, 0, 0}, - {NULL, ui_menu_tmpl_set_action, -1, NULL, "Set template", NULL, 0, 0}, - {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, - UX_MENU_END}; +const ux_menu_entry_t ui_menu_template[] = { + {ui_menu_tmpl_key, NULL, -1, NULL, "Choose key...", NULL, 0, 0}, + {ui_menu_tmpl_type, NULL, -1, NULL, "Choose type...", NULL, 0, 0}, + {NULL, ui_menu_tmpl_set_action, -1, NULL, "Set template", NULL, 0, 0}, + {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + UX_MENU_END}; void ui_menu_template_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_template, ui_menu_template_preprocessor); + UX_MENU_DISPLAY(value, ui_menu_template, ui_menu_template_preprocessor); } -const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element) { - if (element->component.userid == 0x20) { - if (entry == &ui_menu_template[0]) { - switch (G_gpg_vstate.ux_key) { - case 1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s", LABEL_SIG); - break; - case 2: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s", LABEL_DEC); - break; - case 3: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s", LABEL_AUT); - break; - default: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Choose key..."); - break; - } - element->text = G_gpg_vstate.menu; - } - if (entry == &ui_menu_template[1]) { - switch (G_gpg_vstate.ux_type) { - case 2048: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA2048); - break; - case 3072: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA3072); - break; - case 4096: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA4096); - break; - - case CX_CURVE_SECP256R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_NISTP256); - break; - /* - case CX_CURVE_SECP384R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_NISTP384); - break; - case CX_CURVE_SECP521R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_NISTP521); - break; - case CX_CURVE_SECP256K1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_SECP256K1); - break; - */ - /* - case CX_CURVE_BrainPoolP256R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL256R1); - break; - case CX_CURVE_BrainPoolP384R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL384R1); - break; - case CX_CURVE_BrainPoolP512R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL512R1); - break; - */ - - case CX_CURVE_Ed25519: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_Ed25519); - break; - default: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Choose type..."); - break; - } - element->text = G_gpg_vstate.menu; +const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element) { + if (element->component.userid == 0x20) { + if (entry == &ui_menu_template[0]) { + switch (G_gpg_vstate.ux_key) { + case 1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s", LABEL_SIG); + break; + case 2: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s", LABEL_DEC); + break; + case 3: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s", LABEL_AUT); + break; + default: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Choose key..."); + break; + } + element->text = G_gpg_vstate.menu; + } + if (entry == &ui_menu_template[1]) { + switch (G_gpg_vstate.ux_type) { + case 2048: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA2048); + break; + case 3072: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA3072); + break; + case 4096: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA4096); + break; + + case CX_CURVE_SECP256R1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_NISTP256); + break; + /* + case CX_CURVE_SECP384R1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_NISTP384); + break; + case CX_CURVE_SECP521R1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_NISTP521); + break; + case CX_CURVE_SECP256K1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_SECP256K1); + break; + */ + /* + case CX_CURVE_BrainPoolP256R1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL256R1); + break; + case CX_CURVE_BrainPoolP384R1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL384R1); + break; + case CX_CURVE_BrainPoolP512R1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL512R1); + break; + */ + + case CX_CURVE_Ed25519: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_Ed25519); + break; + default: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Choose type..."); + break; + } + element->text = G_gpg_vstate.menu; + } } - } - return element; + return element; } void ui_menu_tmpl_set_action(unsigned int value) { - UNUSED(value); - LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); - gpg_key_t * dest; - const char * err; - const unsigned char *oid; - unsigned int oid_len; - err = NULL; - - memset(&attributes, 0, sizeof(attributes)); - switch (G_gpg_vstate.ux_type) { - case 2048: - case 3072: - case 4096: - attributes.value[0] = 0x01; - attributes.value[1] = (G_gpg_vstate.ux_type >> 8) & 0xFF; - attributes.value[2] = G_gpg_vstate.ux_type & 0xFF; - attributes.value[3] = 0x00; - attributes.value[4] = 0x20; - attributes.value[5] = 0x01; - attributes.length = 6; - break; - - case CX_CURVE_SECP256R1: - // case CX_CURVE_SECP256K1: - // case CX_CURVE_SECP384R1: - // case CX_CURVE_SECP521R1: - // case CX_CURVE_BrainPoolP256R1: - // case CX_CURVE_BrainPoolP384R1: - // case CX_CURVE_BrainPoolP512R1: - if (G_gpg_vstate.ux_key == 2) { - attributes.value[0] = 18; // ecdh - } else { - attributes.value[0] = 19; // ecdsa + UNUSED(value); + LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); + gpg_key_t *dest; + const char *err; + const unsigned char *oid; + unsigned int oid_len; + err = NULL; + + memset(&attributes, 0, sizeof(attributes)); + switch (G_gpg_vstate.ux_type) { + case 2048: + case 3072: + case 4096: + attributes.value[0] = 0x01; + attributes.value[1] = (G_gpg_vstate.ux_type >> 8) & 0xFF; + attributes.value[2] = G_gpg_vstate.ux_type & 0xFF; + attributes.value[3] = 0x00; + attributes.value[4] = 0x20; + attributes.value[5] = 0x01; + attributes.length = 6; + break; + + case CX_CURVE_SECP256R1: + // case CX_CURVE_SECP256K1: + // case CX_CURVE_SECP384R1: + // case CX_CURVE_SECP521R1: + // case CX_CURVE_BrainPoolP256R1: + // case CX_CURVE_BrainPoolP384R1: + // case CX_CURVE_BrainPoolP512R1: + if (G_gpg_vstate.ux_key == 2) { + attributes.value[0] = 18; // ecdh + } else { + attributes.value[0] = 19; // ecdsa + } + oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); + memmove(attributes.value + 1, oid, sizeof(oid_len)); + attributes.length = 1 + oid_len; + break; + + case CX_CURVE_Ed25519: + if (G_gpg_vstate.ux_key == 2) { + attributes.value[0] = 18; // ecdh + memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); + attributes.length = 1 + sizeof(C_OID_cv25519); + } else { + attributes.value[0] = 22; // eddsa + memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); + attributes.length = 1 + sizeof(C_OID_Ed25519); + } + break; + + default: + err = TEMPLATE_TYPE; + goto ERROR; } - oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); - memmove(attributes.value + 1, oid, sizeof(oid_len)); - attributes.length = 1 + oid_len; - break; - - case CX_CURVE_Ed25519: - if (G_gpg_vstate.ux_key == 2) { - attributes.value[0] = 18; // ecdh - memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); - attributes.length = 1 + sizeof(C_OID_cv25519); - } else { - attributes.value[0] = 22; // eddsa - memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); - attributes.length = 1 + sizeof(C_OID_Ed25519); + + dest = NULL; + switch (G_gpg_vstate.ux_key) { + case 1: + dest = &G_gpg_vstate.kslot->sig; + break; + case 2: + dest = &G_gpg_vstate.kslot->dec; + break; + case 3: + dest = &G_gpg_vstate.kslot->aut; + break; + default: + err = TEMPLATE_KEY; + goto ERROR; } - break; - - default: - err = TEMPLATE_TYPE; - goto ERROR; - } - - dest = NULL; - switch (G_gpg_vstate.ux_key) { - case 1: - dest = &G_gpg_vstate.kslot->sig; - break; - case 2: - dest = &G_gpg_vstate.kslot->dec; - break; - case 3: - dest = &G_gpg_vstate.kslot->aut; - break; - default: - err = TEMPLATE_KEY; - goto ERROR; - } - - gpg_nvm_write(dest, NULL, sizeof(gpg_key_t)); - gpg_nvm_write(&dest->attributes, &attributes, sizeof(attributes)); - ui_info(OK, NULL, ui_menu_template_display, 0); - return; + + gpg_nvm_write(dest, NULL, sizeof(gpg_key_t)); + gpg_nvm_write(&dest->attributes, &attributes, sizeof(attributes)); + ui_info(OK, NULL, ui_menu_template_display, 0); + return; ERROR: - ui_info(INVALID_SELECTION, err, ui_menu_template_display, 0); + ui_info(INVALID_SELECTION, err, ui_menu_template_display, 0); } -const ux_menu_entry_t ui_menu_tmpl_key[] = {{NULL, ui_menu_tmpl_key_action, 1, NULL, LABEL_SIG, NULL, 0, 0}, - {NULL, ui_menu_tmpl_key_action, 2, NULL, LABEL_DEC, NULL, 0, 0}, - {NULL, ui_menu_tmpl_key_action, 3, NULL, LABEL_AUT, NULL, 0, 0}, - {ui_menu_template, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, - UX_MENU_END}; +const ux_menu_entry_t ui_menu_tmpl_key[] = { + {NULL, ui_menu_tmpl_key_action, 1, NULL, LABEL_SIG, NULL, 0, 0}, + {NULL, ui_menu_tmpl_key_action, 2, NULL, LABEL_DEC, NULL, 0, 0}, + {NULL, ui_menu_tmpl_key_action, 3, NULL, LABEL_AUT, NULL, 0, 0}, + {ui_menu_template, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + UX_MENU_END}; void ui_menu_tmpl_key_action(unsigned int value) { - G_gpg_vstate.ux_key = value; - ui_menu_template_display(0); + G_gpg_vstate.ux_key = value; + ui_menu_template_display(0); } const ux_menu_entry_t ui_menu_tmpl_type[] = { @@ -661,53 +762,61 @@ const ux_menu_entry_t ui_menu_tmpl_type[] = { {NULL, ui_menu_tmpl_type_action, 3072, NULL, LABEL_RSA3072, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, 4096, NULL, LABEL_RSA4096, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256R1, NULL, LABEL_NISTP256, NULL, 0, 0}, - // {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP384R1, NULL, LABEL_NISTP384, NULL, 0, 0}, - // {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP521R1, NULL, LABEL_NISTP521, NULL, 0, 0}, - // {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256K1, NULL, LABEL_SECP256K1, NULL, 0, 0}, - // {NULL, ui_menu_tmpl_type_action, CX_CURVE_BrainPoolP256R1, NULL, LABEL_BPOOL256R1, NULL, 0, 0}, - // {NULL, ui_menu_tmpl_type_action, CX_CURVE_BrainPoolP384R1, NULL, LABEL_BPOOL384R1, NULL, 0, 0}, - // {NULL, ui_menu_tmpl_type_action, CX_CURVE_BrainPoolP512R1, NULL, LABEL_BPOOL512R1, NULL, 0, 0}, + // {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP384R1, NULL, + // LABEL_NISTP384, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, + // CX_CURVE_SECP521R1, NULL, LABEL_NISTP521, NULL, 0, 0}, {NULL, + // ui_menu_tmpl_type_action, CX_CURVE_SECP256K1, NULL, LABEL_SECP256K1, NULL, 0, 0}, + // {NULL, ui_menu_tmpl_type_action, CX_CURVE_BrainPoolP256R1, NULL, + // LABEL_BPOOL256R1, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, + // CX_CURVE_BrainPoolP384R1, NULL, LABEL_BPOOL384R1, NULL, 0, 0}, {NULL, + // ui_menu_tmpl_type_action, CX_CURVE_BrainPoolP512R1, NULL, LABEL_BPOOL512R1, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, CX_CURVE_Ed25519, NULL, LABEL_Ed25519, NULL, 0, 0}, {ui_menu_template, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, UX_MENU_END}; void ui_menu_tmpl_type_action(unsigned int value) { - G_gpg_vstate.ux_type = value; - ui_menu_template_display(1); + G_gpg_vstate.ux_type = value; + ui_menu_template_display(1); } /* --------------------------------- SEED UX --------------------------------- */ -const ux_menu_entry_t ui_menu_seed[] = {{NULL, NULL, 0, NULL, "", NULL, 0, 0}, - {NULL, ui_menu_seed_action, 1, NULL, "Set on", NULL, 0, 0}, - {NULL, ui_menu_seed_action, 0, NULL, "Set off", NULL, 0, 0}, - {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, - UX_MENU_END}; +const ux_menu_entry_t ui_menu_seed[] = { + {NULL, NULL, 0, NULL, "", NULL, 0, 0}, + {NULL, ui_menu_seed_action, 1, NULL, "Set on", NULL, 0, 0}, + {NULL, ui_menu_seed_action, 0, NULL, "Set off", NULL, 0, 0}, + {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + UX_MENU_END}; void ui_menu_seed_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_seed, ui_menu_seed_preprocessor); + UX_MENU_DISPLAY(value, ui_menu_seed, ui_menu_seed_preprocessor); } -const bagl_element_t *ui_menu_seed_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element) { - if (element->component.userid == 0x20) { - if (entry == &ui_menu_seed[0]) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "< %s >", G_gpg_vstate.seed_mode ? "ON" : "OFF"); - element->text = G_gpg_vstate.menu; +const bagl_element_t *ui_menu_seed_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element) { + if (element->component.userid == 0x20) { + if (entry == &ui_menu_seed[0]) { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "< %s >", + G_gpg_vstate.seed_mode ? "ON" : "OFF"); + element->text = G_gpg_vstate.menu; + } } - } - return element; + return element; } void ui_menu_seed_action(unsigned int value) { - G_gpg_vstate.seed_mode = value; - ui_menu_seed_display(0); + G_gpg_vstate.seed_mode = value; + ui_menu_seed_display(0); } /* ------------------------------- PIN MODE UX ------------------------------ */ const ux_menu_entry_t ui_menu_pinmode[]; -void ui_menu_pinmode_display(unsigned int value); -const bagl_element_t *ui_menu_pinmode_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element); -void ui_menu_pinmode_action(unsigned int value); +void ui_menu_pinmode_display(unsigned int value); +const bagl_element_t *ui_menu_pinmode_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element); +void ui_menu_pinmode_action(unsigned int value); const ux_menu_entry_t ui_menu_pinmode[] = { {NULL, NULL, -1, NULL, "Choose:", NULL, 0, 0}, @@ -720,188 +829,202 @@ const ux_menu_entry_t ui_menu_pinmode[] = { UX_MENU_END}; void ui_menu_pinmode_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_pinmode, ui_menu_pinmode_preprocessor); + UX_MENU_DISPLAY(value, ui_menu_pinmode, ui_menu_pinmode_preprocessor); } -const bagl_element_t *ui_menu_pinmode_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element) { - if (element->component.userid == 0x20) { - if ((entry->userid >= (0x8000 | PIN_MODE_HOST)) && (entry->userid <= (0x8000 | PIN_MODE_TRUST))) { - unsigned char id = entry->userid & 0x7FFFF; - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s %s %s", (char *)PIC(entry->line1), - id == N_gpg_pstate->config_pin[0] ? "#" : " ", /* default */ - id == G_gpg_vstate.pinmode ? "+" : " " /* selected*/); - element->text = G_gpg_vstate.menu; - element->component.height = 32; +const bagl_element_t *ui_menu_pinmode_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element) { + if (element->component.userid == 0x20) { + if ((entry->userid >= (0x8000 | PIN_MODE_HOST)) && + (entry->userid <= (0x8000 | PIN_MODE_TRUST))) { + unsigned char id = entry->userid & 0x7FFFF; + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s %s %s", + (char *) PIC(entry->line1), + id == N_gpg_pstate->config_pin[0] ? "#" : " ", /* default */ + id == G_gpg_vstate.pinmode ? "+" : " " /* selected*/); + element->text = G_gpg_vstate.menu; + element->component.height = 32; + } } - } - return element; + return element; } void ui_menu_pinmode_action(unsigned int value) { - unsigned char s; - value = value & 0x7FFF; - if (value == 128) { - if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { - if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { - ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display, 0); - return; - } - // set new mode - s = G_gpg_vstate.pinmode; - gpg_nvm_write(&N_gpg_pstate->config_pin[0], &s, 1); - // disactivate pinpad if any - if (G_gpg_vstate.pinmode == PIN_MODE_HOST) { - s = 0; - } else { - s = 3; - } - //#warning USBD_CCID_activate_pinpad commented - USBD_CCID_activate_pinpad(s); - } - } else { - switch (value) { - case PIN_MODE_HOST: - case PIN_MODE_SCREEN: - case PIN_MODE_CONFIRM: - if (!gpg_pin_is_verified(PIN_ID_PW2)) { - ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display, 0); - return; - } - break; - - case PIN_MODE_TRUST: - if (!gpg_pin_is_verified(PIN_ID_PW3)) { - ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display, 0); - return; - } - break; - default: - ui_info(INVALID_SELECTION, NULL, ui_menu_pinmode_display, 0); - return; + unsigned char s; + value = value & 0x7FFF; + if (value == 128) { + if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { + if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { + ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display, 0); + return; + } + // set new mode + s = G_gpg_vstate.pinmode; + gpg_nvm_write(&N_gpg_pstate->config_pin[0], &s, 1); + // disactivate pinpad if any + if (G_gpg_vstate.pinmode == PIN_MODE_HOST) { + s = 0; + } else { + s = 3; + } + // #warning USBD_CCID_activate_pinpad commented + USBD_CCID_activate_pinpad(s); + } + } else { + switch (value) { + case PIN_MODE_HOST: + case PIN_MODE_SCREEN: + case PIN_MODE_CONFIRM: + if (!gpg_pin_is_verified(PIN_ID_PW2)) { + ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display, 0); + return; + } + break; + + case PIN_MODE_TRUST: + if (!gpg_pin_is_verified(PIN_ID_PW3)) { + ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display, 0); + return; + } + break; + default: + ui_info(INVALID_SELECTION, NULL, ui_menu_pinmode_display, 0); + return; + } + G_gpg_vstate.pinmode = value; } - G_gpg_vstate.pinmode = value; - } - // redisplay first entry of the idle menu - ui_menu_pinmode_display(0); + // redisplay first entry of the idle menu + ui_menu_pinmode_display(0); } /* ------------------------------- UIF MODE UX ------------------------------ */ const ux_menu_entry_t ui_menu_uifmode[]; -void ui_menu_uifmode_display(unsigned int value); -const bagl_element_t *ui_menu_uifmode_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element); -void ui_menu_uifmode_action(unsigned int value); - -const ux_menu_entry_t ui_menu_uifmode[] = {{NULL, NULL, -1, NULL, "Activate (+) for:", NULL, 0, 0}, - {NULL, ui_menu_uifmode_action, 1, NULL, "Signature", NULL, 0, 0}, - {NULL, ui_menu_uifmode_action, 2, NULL, "Decryption", NULL, 0, 0}, - {NULL, ui_menu_uifmode_action, 3, NULL, "Authentication", NULL, 0, 0}, - {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, - UX_MENU_END}; +void ui_menu_uifmode_display(unsigned int value); +const bagl_element_t *ui_menu_uifmode_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element); +void ui_menu_uifmode_action(unsigned int value); + +const ux_menu_entry_t ui_menu_uifmode[] = { + {NULL, NULL, -1, NULL, "Activate (+) for:", NULL, 0, 0}, + {NULL, ui_menu_uifmode_action, 1, NULL, "Signature", NULL, 0, 0}, + {NULL, ui_menu_uifmode_action, 2, NULL, "Decryption", NULL, 0, 0}, + {NULL, ui_menu_uifmode_action, 3, NULL, "Authentication", NULL, 0, 0}, + {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + UX_MENU_END}; void ui_menu_uifmode_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_uifmode, ui_menu_uifmode_preprocessor); + UX_MENU_DISPLAY(value, ui_menu_uifmode, ui_menu_uifmode_preprocessor); } -const bagl_element_t *ui_menu_uifmode_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element) { - if (element->component.userid == 0x20) { - if ((entry->userid >= 1) && (entry->userid <= 3)) { - unsigned char uif[2]; - uif[0] = 0; - uif[1] = 0; - switch (entry->userid) { - case 1: - *uif = G_gpg_vstate.kslot->sig.UIF[0] ? '+' : ' '; - break; - case 2: - *uif = G_gpg_vstate.kslot->dec.UIF[0] ? '+' : ' '; - break; - case 3: - *uif = G_gpg_vstate.kslot->aut.UIF[0] ? '+' : ' '; - break; - } - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s %s", (char *)PIC(entry->line1), uif); - element->text = G_gpg_vstate.menu; - element->component.height = 32; +const bagl_element_t *ui_menu_uifmode_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element) { + if (element->component.userid == 0x20) { + if ((entry->userid >= 1) && (entry->userid <= 3)) { + unsigned char uif[2]; + uif[0] = 0; + uif[1] = 0; + switch (entry->userid) { + case 1: + *uif = G_gpg_vstate.kslot->sig.UIF[0] ? '+' : ' '; + break; + case 2: + *uif = G_gpg_vstate.kslot->dec.UIF[0] ? '+' : ' '; + break; + case 3: + *uif = G_gpg_vstate.kslot->aut.UIF[0] ? '+' : ' '; + break; + } + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s %s", + (char *) PIC(entry->line1), + uif); + element->text = G_gpg_vstate.menu; + element->component.height = 32; + } } - } - return element; + return element; } void ui_menu_uifmode_action(unsigned int value) { - unsigned char *uif; - unsigned char new_uif; - switch (value) { - case 1: - uif = &G_gpg_vstate.kslot->sig.UIF[0]; - break; - case 2: - uif = &G_gpg_vstate.kslot->dec.UIF[0]; - break; - case 3: - uif = &G_gpg_vstate.kslot->aut.UIF[0]; - break; - default: - ui_info(INVALID_SELECTION, NULL, ui_menu_uifmode_display, 0); - return; - } - if (uif[0] == 0) { - new_uif = 1; - gpg_nvm_write(&uif[0], &new_uif, 1); - } else if (uif[0] == 1) { - new_uif = 0; - gpg_nvm_write(&uif[0], &new_uif, 1); - } else /*if (uif[0] == 2 )*/ { - ui_info(UIF_LOCKED, NULL, ui_menu_uifmode_display, 0); - return; - } - ui_menu_uifmode_display(value); + unsigned char *uif; + unsigned char new_uif; + switch (value) { + case 1: + uif = &G_gpg_vstate.kslot->sig.UIF[0]; + break; + case 2: + uif = &G_gpg_vstate.kslot->dec.UIF[0]; + break; + case 3: + uif = &G_gpg_vstate.kslot->aut.UIF[0]; + break; + default: + ui_info(INVALID_SELECTION, NULL, ui_menu_uifmode_display, 0); + return; + } + if (uif[0] == 0) { + new_uif = 1; + gpg_nvm_write(&uif[0], &new_uif, 1); + } else if (uif[0] == 1) { + new_uif = 0; + gpg_nvm_write(&uif[0], &new_uif, 1); + } else /*if (uif[0] == 2 )*/ { + ui_info(UIF_LOCKED, NULL, ui_menu_uifmode_display, 0); + return; + } + ui_menu_uifmode_display(value); } /* -------------------------------- RESET UX --------------------------------- */ -const ux_menu_entry_t ui_menu_reset[] = {{NULL, NULL, 0, NULL, "Really Reset ?", NULL, 0, 0}, - {NULL, ui_menu_main_display, 0, &C_badge_back, "No", NULL, 61, 40}, - {NULL, ui_menu_reset_action, 0, NULL, "Yes", NULL, 0, 0}, - UX_MENU_END}; +const ux_menu_entry_t ui_menu_reset[] = { + {NULL, NULL, 0, NULL, "Really Reset ?", NULL, 0, 0}, + {NULL, ui_menu_main_display, 0, &C_badge_back, "No", NULL, 61, 40}, + {NULL, ui_menu_reset_action, 0, NULL, "Yes", NULL, 0, 0}, + UX_MENU_END}; void ui_menu_reset_action(unsigned int value) { - UNUSED(value); - unsigned char magic[4]; - magic[0] = 0; - magic[1] = 0; - magic[2] = 0; - magic[3] = 0; - gpg_nvm_write(N_gpg_pstate->magic, magic, 4); - gpg_init(); - ui_CCID_reset(); - ui_menu_main_display(0); + UNUSED(value); + unsigned char magic[4]; + magic[0] = 0; + magic[1] = 0; + magic[2] = 0; + magic[3] = 0; + gpg_nvm_write(N_gpg_pstate->magic, magic, 4); + gpg_init(); + ui_CCID_reset(); + ui_menu_main_display(0); } /* ------------------------------ RESET KEY SLOT ----------------------------- */ void ui_menu_reset_slot_action(unsigned int value); -const ux_menu_entry_t ui_menu_reset_slot[] = {{NULL, NULL, 0, NULL, "Really Reset ?", NULL, 0, 0}, - {NULL, ui_menu_main_display, 0, &C_badge_back, "No", NULL, 61, 40}, - {NULL, ui_menu_reset_slot_action, 0, NULL, "Yes", NULL, 0, 0}, - UX_MENU_END}; +const ux_menu_entry_t ui_menu_reset_slot[] = { + {NULL, NULL, 0, NULL, "Really Reset ?", NULL, 0, 0}, + {NULL, ui_menu_main_display, 0, &C_badge_back, "No", NULL, 61, 40}, + {NULL, ui_menu_reset_slot_action, 0, NULL, "Yes", NULL, 0, 0}, + UX_MENU_END}; void ui_menu_reset_slot_action(unsigned int value) { - UNUSED(value); - gpg_install_slot(G_gpg_vstate.kslot); - ui_menu_main_display(0); + UNUSED(value); + gpg_install_slot(G_gpg_vstate.kslot); + ui_menu_main_display(0); } - /* ------------------------------- SETTINGS UX ------------------------------- */ -const ux_menu_entry_t ui_menu_settings[] = {{NULL, ui_menu_template_display, 0, NULL, "Key template", NULL, 0, 0}, - {NULL, ui_menu_seed_display, 0, NULL, "Seed mode", NULL, 0, 0}, - {NULL, ui_menu_pinmode_display, 0, NULL, "PIN mode", NULL, 0, 0}, - {NULL, ui_menu_uifmode_display, 0, NULL, "UIF mode", NULL, 0, 0}, - {ui_menu_reset, NULL, 0, NULL, "Reset App", NULL, 0, 0}, - {ui_menu_reset_slot, NULL, 0, NULL, "Reset Slot", NULL, 0, 0}, - {NULL, ui_menu_main_display, 2, &C_badge_back, "Back", NULL, 61, 40}, - UX_MENU_END}; +const ux_menu_entry_t ui_menu_settings[] = { + {NULL, ui_menu_template_display, 0, NULL, "Key template", NULL, 0, 0}, + {NULL, ui_menu_seed_display, 0, NULL, "Seed mode", NULL, 0, 0}, + {NULL, ui_menu_pinmode_display, 0, NULL, "PIN mode", NULL, 0, 0}, + {NULL, ui_menu_uifmode_display, 0, NULL, "UIF mode", NULL, 0, 0}, + {ui_menu_reset, NULL, 0, NULL, "Reset App", NULL, 0, 0}, + {ui_menu_reset_slot, NULL, 0, NULL, "Reset Slot", NULL, 0, 0}, + {NULL, ui_menu_main_display, 2, &C_badge_back, "Back", NULL, 61, 40}, + UX_MENU_END}; /* --------------------------------- SLOT UX --------------------------------- */ @@ -910,122 +1033,134 @@ const ux_menu_entry_t ui_menu_settings[] = {{NULL, ui_menu_template_display, 0, #error menu definition not correct for current value of GPG_KEYS_SLOTS #endif -const ux_menu_entry_t ui_menu_slot[] = {{NULL, NULL, -1, NULL, "Choose:", NULL, 0, 0}, - {NULL, ui_menu_slot_action, 1, NULL, "", NULL, 0, 0}, - {NULL, ui_menu_slot_action, 2, NULL, "", NULL, 0, 0}, - {NULL, ui_menu_slot_action, 3, NULL, "", NULL, 0, 0}, - {NULL, ui_menu_slot_action, 128, NULL, "Set Default", NULL, 0, 0}, - {NULL, ui_menu_main_display, 1, &C_badge_back, "Back", NULL, 61, 40}, - UX_MENU_END}; -void ui_menu_slot_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_slot, ui_menu_slot_preprocessor); +const ux_menu_entry_t ui_menu_slot[] = { + {NULL, NULL, -1, NULL, "Choose:", NULL, 0, 0}, + {NULL, ui_menu_slot_action, 1, NULL, "", NULL, 0, 0}, + {NULL, ui_menu_slot_action, 2, NULL, "", NULL, 0, 0}, + {NULL, ui_menu_slot_action, 3, NULL, "", NULL, 0, 0}, + {NULL, ui_menu_slot_action, 128, NULL, "Set Default", NULL, 0, 0}, + {NULL, ui_menu_main_display, 1, &C_badge_back, "Back", NULL, 61, 40}, + UX_MENU_END}; +void ui_menu_slot_display(unsigned int value) { + UX_MENU_DISPLAY(value, ui_menu_slot, ui_menu_slot_preprocessor); } -const bagl_element_t *ui_menu_slot_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element) { - unsigned int slot; - if (element->component.userid == 0x20) { - for (slot = 1; slot <= 3; slot++) { - if (entry == &ui_menu_slot[slot]) { - break; - } - } - if (slot != 4) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Slot %d %s %s", slot, - slot == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", /* default */ - slot == G_gpg_vstate.slot + 1 ? "+" : " " /* selected*/); - element->text = G_gpg_vstate.menu; +const bagl_element_t *ui_menu_slot_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element) { + unsigned int slot; + if (element->component.userid == 0x20) { + for (slot = 1; slot <= 3; slot++) { + if (entry == &ui_menu_slot[slot]) { + break; + } + } + if (slot != 4) { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "Slot %d %s %s", + slot, + slot == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", /* default */ + slot == G_gpg_vstate.slot + 1 ? "+" : " " /* selected*/); + element->text = G_gpg_vstate.menu; + } } - } - return element; + return element; } void ui_menu_slot_action(unsigned int value) { - unsigned char s; - - if (value == 128) { - s = G_gpg_vstate.slot; - gpg_nvm_write(&N_gpg_pstate->config_slot[1], &s, 1); - value = s + 1; - } else { - s = (unsigned char)(value - 1); - if (s != G_gpg_vstate.slot) { - G_gpg_vstate.slot = s; - G_gpg_vstate.kslot = &N_gpg_pstate->keys[G_gpg_vstate.slot]; - gpg_mse_reset(); - ui_CCID_reset(); + unsigned char s; + + if (value == 128) { + s = G_gpg_vstate.slot; + gpg_nvm_write(&N_gpg_pstate->config_slot[1], &s, 1); + value = s + 1; + } else { + s = (unsigned char) (value - 1); + if (s != G_gpg_vstate.slot) { + G_gpg_vstate.slot = s; + G_gpg_vstate.kslot = &N_gpg_pstate->keys[G_gpg_vstate.slot]; + gpg_mse_reset(); + ui_CCID_reset(); + } } - } - // redisplay first entry of the idle menu - ui_menu_slot_display(value); + // redisplay first entry of the idle menu + ui_menu_slot_display(value); } #endif /* --------------------------------- INFO UX --------------------------------- */ -#define STR(x) #x +#define STR(x) #x #define XSTR(x) STR(x) -const ux_menu_entry_t ui_menu_info[] = {{NULL, NULL, -1, NULL, "OpenPGP Card", NULL, 0, 0}, - {NULL, NULL, -1, NULL, "(c) Ledger SAS", NULL, 0, 0}, - {NULL, NULL, -1, NULL, "Spec " XSTR(SPEC_VERSION), NULL, 0, 0}, - {NULL, NULL, -1, NULL, "App " XSTR(OPENPGP_VERSION), NULL, 0, 0}, - {NULL, ui_menu_main_display, 3, &C_badge_back, "Back", NULL, 61, 40}, - UX_MENU_END}; +const ux_menu_entry_t ui_menu_info[] = { + {NULL, NULL, -1, NULL, "OpenPGP Card", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "(c) Ledger SAS", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "Spec " XSTR(SPEC_VERSION), NULL, 0, 0}, + {NULL, NULL, -1, NULL, "App " XSTR(OPENPGP_VERSION), NULL, 0, 0}, + {NULL, ui_menu_main_display, 3, &C_badge_back, "Back", NULL, 61, 40}, + UX_MENU_END}; #undef STR #undef XSTR /* --------------------------------- MAIN UX --------------------------------- */ -const ux_menu_entry_t ui_menu_main[] = {{NULL, NULL, 0, NULL, "", "", 0, 0}, +const ux_menu_entry_t ui_menu_main[] = { + {NULL, NULL, 0, NULL, "", "", 0, 0}, #if GPG_MULTISLOT - {NULL, ui_menu_slot_display, 0, NULL, "Select slot", NULL, 0, 0}, + {NULL, ui_menu_slot_display, 0, NULL, "Select slot", NULL, 0, 0}, #endif - {ui_menu_settings, NULL, 0, NULL, "Settings", NULL, 0, 0}, - {ui_menu_info, NULL, 0, NULL, "About", NULL, 0, 0}, - {NULL, (void*)os_sched_exit, 0, &C_icon_dashboard, "Quit app", NULL, 50, 29}, - UX_MENU_END}; -const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, bagl_element_t *element) { - if (entry == &ui_menu_main[0]) { - if (element->component.userid == 0x21) { - memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); - memmove(G_gpg_vstate.menu, N_gpg_pstate->name.value, 12); - if (G_gpg_vstate.menu[0] == 0) { - memmove(G_gpg_vstate.menu, "", 9); - } else { - for (int i = 0; i < 12; i++) { - if (G_gpg_vstate.menu[i] == 0x3c) { - G_gpg_vstate.menu[i] = ' '; - } + {ui_menu_settings, NULL, 0, NULL, "Settings", NULL, 0, 0}, + {ui_menu_info, NULL, 0, NULL, "About", NULL, 0, 0}, + {NULL, (void *) os_sched_exit, 0, &C_icon_dashboard, "Quit app", NULL, 50, 29}, + UX_MENU_END}; +const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, + bagl_element_t *element) { + if (entry == &ui_menu_main[0]) { + if (element->component.userid == 0x21) { + memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + memmove(G_gpg_vstate.menu, N_gpg_pstate->name.value, 12); + if (G_gpg_vstate.menu[0] == 0) { + memmove(G_gpg_vstate.menu, "", 9); + } else { + for (int i = 0; i < 12; i++) { + if (G_gpg_vstate.menu[i] == 0x3c) { + G_gpg_vstate.menu[i] = ' '; + } + } + } } - } - } - if (element->component.userid == 0x22) { - unsigned int serial; - serial = (G_gpg_vstate.kslot->serial[0] << 24) | (G_gpg_vstate.kslot->serial[1] << 16) | - (G_gpg_vstate.kslot->serial[2] << 8) | (G_gpg_vstate.kslot->serial[3]); - memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + if (element->component.userid == 0x22) { + unsigned int serial; + serial = (G_gpg_vstate.kslot->serial[0] << 24) | (G_gpg_vstate.kslot->serial[1] << 16) | + (G_gpg_vstate.kslot->serial[2] << 8) | (G_gpg_vstate.kslot->serial[3]); + memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); #if GPG_MULTISLOT - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "ID: %x / %d", serial, G_gpg_vstate.slot + 1); + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "ID: %x / %d", + serial, + G_gpg_vstate.slot + 1); #else - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "ID: %x", serial); + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "ID: %x", serial); #endif + } + element->text = G_gpg_vstate.menu; } - element->text = G_gpg_vstate.menu; - } - return element; + return element; } void ui_menu_main_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_main, ui_menu_main_preprocessor); + UX_MENU_DISPLAY(value, ui_menu_main, ui_menu_main_preprocessor); } void ui_init(void) { - ui_menu_main_display(0); - // setup the first screen changing - UX_CALLBACK_SET_INTERVAL(1000); + ui_menu_main_display(0); + // setup the first screen changing + UX_CALLBACK_SET_INTERVAL(1000); } void io_seproxyhal_display(const bagl_element_t *element) { - io_seproxyhal_display_default((bagl_element_t *)element); + io_seproxyhal_display_default((bagl_element_t *) element); } #endif diff --git a/src/gpg_ux_nanos.h b/src/gpg_ux_nanos.h index cf33333..1236858 100644 --- a/src/gpg_ux_nanos.h +++ b/src/gpg_ux_nanos.h @@ -22,4 +22,4 @@ void ui_main_display(unsigned int value); void ui_menu_pinconfirm_display(unsigned int value); void ui_menu_pinentry_display(unsigned int value); void ui_menu_uifconfirm_display(unsigned int value); -#endif \ No newline at end of file +#endif diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index db085a2..0a914b8 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -49,46 +49,49 @@ void ui_menu_slot_action(unsigned int value); void ui_menu_main_display(unsigned int value); -void ui_menu_pinconfirm_action(unsigned int value); +void ui_menu_pinconfirm_action(unsigned int value); unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); unsigned int ui_pinconfirm_prepro(const bagl_element_t *element); const bagl_element_t ui_pinentry_nanos[]; -void ui_menu_pinentry_display(unsigned int value); -void ui_menu_pinentry_action(unsigned int value); -unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); -unsigned int ui_pinentry_prepro(const bagl_element_t *element); -static unsigned int validate_pin(); +void ui_menu_pinentry_display(unsigned int value); +void ui_menu_pinentry_action(unsigned int value); +unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); +unsigned int ui_pinentry_prepro(const bagl_element_t *element); +static unsigned int validate_pin(); /* ------------------------------- Helpers UX ------------------------------- */ -#define ui_flow_display(f, i) \ - if ((i) < ARRAYLEN(f)) \ - ux_flow_init(0, f, f[i]); \ - else \ - ux_flow_init(0, f, NULL) +#define ui_flow_display(f, i) \ + if ((i) < ARRAYLEN(f)) \ + ux_flow_init(0, f, f[i]); \ + else \ + ux_flow_init(0, f, NULL) void ui_CCID_reset(void) { #ifdef HAVE_USB_CLASS_CCID - io_usb_ccid_set_card_inserted(0); - io_usb_ccid_set_card_inserted(1); + io_usb_ccid_set_card_inserted(0); + io_usb_ccid_set_card_inserted(1); #endif } -UX_STEP_CB(ux_menu_popup_1_step, bnnn_paging, ui_menu_main_display(0), {.title = "Info", .text = G_gpg_vstate.menu}); +UX_STEP_CB(ux_menu_popup_1_step, + bnnn_paging, + ui_menu_main_display(0), + {.title = "Info", .text = G_gpg_vstate.menu}); UX_FLOW(ux_flow_popup, &ux_menu_popup_1_step); void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { - UNUSED(menu_display); - UNUSED(value); - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s. %s", msg1, msg2); - ux_flow_init(0, ux_flow_popup, NULL); + UNUSED(menu_display); + UNUSED(value); + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s. %s", msg1, msg2); + ux_flow_init(0, ux_flow_popup, NULL); }; /* ------------------------------ UIF CONFIRM UX ----------------------------- */ unsigned int ui_uifconfirm_action(unsigned int value); -void ui_menu_uifconfirm_predisplay(void); +void ui_menu_uifconfirm_predisplay(void); UX_STEP_NOCB_INIT(ux_menu_uifconfirm_1_step, nnn, @@ -99,80 +102,84 @@ UX_STEP_CB(ux_menu_uifconfirm_2_step, pb, ui_uifconfirm_action(0), {&C_icon_cros UX_STEP_CB(ux_menu_uifconfirm_3_step, pb, ui_uifconfirm_action(1), {&C_icon_validate_14, "Yes"}); -UX_FLOW(ux_flow_uifconfirm, &ux_menu_uifconfirm_1_step, &ux_menu_uifconfirm_3_step, &ux_menu_uifconfirm_2_step); +UX_FLOW(ux_flow_uifconfirm, + &ux_menu_uifconfirm_1_step, + &ux_menu_uifconfirm_3_step, + &ux_menu_uifconfirm_2_step); void ui_menu_uifconfirm_predisplay() { - unsigned int uif_case = (G_gpg_vstate.io_ins << 16) | (G_gpg_vstate.io_p1 << 8) | (G_gpg_vstate.io_p2); - switch (uif_case) { - case 0x002A9E9A: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); - break; - case 0x002A8680: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); - break; - case 0x002A8086: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); - break; - case 0x00880000: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Authentication"); - break; - default: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); - } + unsigned int uif_case = + (G_gpg_vstate.io_ins << 16) | (G_gpg_vstate.io_p1 << 8) | (G_gpg_vstate.io_p2); + switch (uif_case) { + case 0x002A9E9A: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); + break; + case 0x002A8680: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); + break; + case 0x002A8086: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); + break; + case 0x00880000: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Authentication"); + break; + default: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); + } } void ui_menu_uifconfirm_display(unsigned int value) { - ui_flow_display(ux_flow_uifconfirm, value); + ui_flow_display(ux_flow_uifconfirm, value); } unsigned int ui_uifconfirm_action(unsigned int value) { - unsigned int sw; - - sw = 0x6985; - if (value == 1) { - BEGIN_TRY { - TRY { - G_gpg_vstate.UIF_flags = 1; - if (G_gpg_vstate.io_ins == INS_PSO) { - sw = gpg_apdu_pso(); - } else if (G_gpg_vstate.io_ins == INS_INTERNAL_AUTHENTICATE) { - sw = gpg_apdu_internal_authenticate(); - } else { - gpg_io_discard(1); - sw = 0x6985; + unsigned int sw; + + sw = 0x6985; + if (value == 1) { + BEGIN_TRY { + TRY { + G_gpg_vstate.UIF_flags = 1; + if (G_gpg_vstate.io_ins == INS_PSO) { + sw = gpg_apdu_pso(); + } else if (G_gpg_vstate.io_ins == INS_INTERNAL_AUTHENTICATE) { + sw = gpg_apdu_internal_authenticate(); + } else { + gpg_io_discard(1); + sw = 0x6985; + } + } + CATCH_OTHER(e) { + gpg_io_discard(1); + if ((e & 0xFFFF0000) || (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { + gpg_io_insert_u32(e); + sw = 0x6f42; + } else { + sw = e; + } + } + FINALLY { + G_gpg_vstate.UIF_flags = 0; + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); + } } - } - CATCH_OTHER(e) { + END_TRY; + } else { gpg_io_discard(1); - if ((e & 0xFFFF0000) || (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { - gpg_io_insert_u32(e); - sw = 0x6f42; - } else { - sw = e; - } - } - FINALLY { - G_gpg_vstate.UIF_flags = 0; gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); ui_menu_main_display(0); - } + sw = 0x6985; } - END_TRY; - } else { - gpg_io_discard(1); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - sw = 0x6985; - } - return 0; + return 0; } /* ------------------------------ PIN CONFIRM UX ----------------------------- */ unsigned int ui_pinconfirm_action(unsigned int value); -void ui_menu_pinconfirm_predisplay(void); -void ui_menu_pinconfirm_display(unsigned int value); +void ui_menu_pinconfirm_predisplay(void); +void ui_menu_pinconfirm_display(unsigned int value); UX_STEP_NOCB_INIT(ux_menu_pinconfirm_1_step, nnn, @@ -195,246 +202,300 @@ UX_STEP_CB(ux_menu_pinconfirm_3_step, "Yes", }); -UX_FLOW(ux_flow_pinconfirm, &ux_menu_pinconfirm_1_step, &ux_menu_pinconfirm_2_step, &ux_menu_pinconfirm_3_step); +UX_FLOW(ux_flow_pinconfirm, + &ux_menu_pinconfirm_1_step, + &ux_menu_pinconfirm_2_step, + &ux_menu_pinconfirm_3_step); void ui_menu_pinconfirm_predisplay() { - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || (G_gpg_vstate.io_p2 == 0x83)) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s %x", G_gpg_vstate.io_p2 == 0x83 ? "Admin" : "User", - G_gpg_vstate.io_p2); - } else { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); - } + if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || + (G_gpg_vstate.io_p2 == 0x83)) { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s %x", + G_gpg_vstate.io_p2 == 0x83 ? "Admin" : "User", + G_gpg_vstate.io_p2); + } else { + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); + } } void ui_menu_pinconfirm_display(unsigned int value) { - UNUSED(value); - ux_flow_init(0, ux_flow_pinconfirm, NULL); + UNUSED(value); + ux_flow_init(0, ux_flow_pinconfirm, NULL); } unsigned int ui_pinconfirm_action(unsigned int value) { - unsigned int sw; - - sw = 0x6985; - if (value == 1) { - gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); - sw = 0x9000; - } else { - gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); + unsigned int sw; + sw = 0x6985; - } - gpg_io_discard(0); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - return 0; + if (value == 1) { + gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); + sw = 0x9000; + } else { + gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); + sw = 0x6985; + } + gpg_io_discard(0); + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); + return 0; } /* ------------------------------- PIN ENTRY UX ------------------------------ */ const bagl_element_t ui_pinentry_nanos[] = { - // type userid x y w h str rad fill fg bg font_id icon_id + // type userid x y w h str rad fill fg bg + // font_id icon_id // clear screen {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 64, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, // left/rights icons {{BAGL_ICON, 0x00, 0, 30, 7, 4, 0, 0, 0, 0xFFFFFF, 0x000000, 0, 0}, - (const char *)&C_icon_down}, + (const char *) &C_icon_down}, {{BAGL_ICON, 0x00, 120, 30, 7, 4, 0, 0, 0, 0xFFFFFF, 0x000000, 0, 0}, - (const char *)&C_icon_up}, + (const char *) &C_icon_up}, // PIN text identifier - {{BAGL_LABELINE, 0x01, 10, 25, 117, 15, 0, 0, 0, 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, + {{BAGL_LABELINE, + 0x01, + 10, + 25, + 117, + 15, + 0, + 0, + 0, + 0xFFFFFF, + 0x000000, + BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, + 0}, G_gpg_vstate.menu}, // PIN Value - {{BAGL_LABELINE, 0x02, 10, 45, 117, 15, 0, 0, 0, 0xFFFFFF, 0x000000, - BAGL_FONT_OPEN_SANS_LIGHT_16px | BAGL_FONT_ALIGNMENT_CENTER, 0}, - G_gpg_vstate.menu} -}; + {{BAGL_LABELINE, + 0x02, + 10, + 45, + 117, + 15, + 0, + 0, + 0, + 0xFFFFFF, + 0x000000, + BAGL_FONT_OPEN_SANS_LIGHT_16px | BAGL_FONT_ALIGNMENT_CENTER, + 0}, + G_gpg_vstate.menu}}; static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '<', 'A', 'V'}; void ui_menu_pinentry_display(unsigned int value) { - if (value == 0) { - memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); - G_gpg_vstate.ux_pinentry[0] = 1; - G_gpg_vstate.ux_pinentry[1] = 5; - } - UX_DISPLAY(ui_pinentry_nanos, (void *)ui_pinentry_prepro); + if (value == 0) { + memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + G_gpg_vstate.ux_pinentry[0] = 1; + G_gpg_vstate.ux_pinentry[1] = 5; + } + UX_DISPLAY(ui_pinentry_nanos, (void *) ui_pinentry_prepro); } unsigned int ui_pinentry_prepro(const bagl_element_t *element) { - if (element->component.userid == 1) { - if (G_gpg_vstate.io_ins == 0x24) { - switch (G_gpg_vstate.io_p1) { - case 0: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Current %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - break; - case 1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "New %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - break; - case 2: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - break; - default: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "WAT %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - break; - } - } else { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s PIN", (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); - } - } else if (element->component.userid == 2) { - unsigned int i; - G_gpg_vstate.menu[0] = ' '; + if (element->component.userid == 1) { + if (G_gpg_vstate.io_ins == 0x24) { + switch (G_gpg_vstate.io_p1) { + case 0: + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "Current %s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + break; + case 1: + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "New %s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + break; + case 2: + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "Confirm %s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + break; + default: + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "WAT %s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + break; + } + } else { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s PIN", + (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + } + } else if (element->component.userid == 2) { + unsigned int i; + G_gpg_vstate.menu[0] = ' '; #if 0 for (i = 1; i <= G_gpg_vstate.ux_pinentry[0]; i++) { G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; } #else - for (i = 1; i < G_gpg_vstate.ux_pinentry[0]; i++) { - G_gpg_vstate.menu[i] = '*'; - } - G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; - i++; + for (i = 1; i < G_gpg_vstate.ux_pinentry[0]; i++) { + G_gpg_vstate.menu[i] = '*'; + } + G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; + i++; #endif - for (; i <= GPG_MAX_PW_LENGTH; i++) { - G_gpg_vstate.menu[i] = '-'; + for (; i <= GPG_MAX_PW_LENGTH; i++) { + G_gpg_vstate.menu[i] = '-'; + } + G_gpg_vstate.menu[i] = 0; } - G_gpg_vstate.menu[i] = 0; - } - return 1; + return 1; } unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { - unsigned int offset = G_gpg_vstate.ux_pinentry[0]; - char digit; + unsigned int offset = G_gpg_vstate.ux_pinentry[0]; + char digit; UNUSED(button_mask_counter); - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down - if (G_gpg_vstate.ux_pinentry[offset]) { - G_gpg_vstate.ux_pinentry[offset]--; - } else { - G_gpg_vstate.ux_pinentry[offset] = sizeof(C_pin_digit) - 1; - } - ui_menu_pinentry_display(1); - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // up - G_gpg_vstate.ux_pinentry[offset]++; - if (G_gpg_vstate.ux_pinentry[offset] == sizeof(C_pin_digit)) { - G_gpg_vstate.ux_pinentry[offset] = 0; + switch (button_mask) { + case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down + if (G_gpg_vstate.ux_pinentry[offset]) { + G_gpg_vstate.ux_pinentry[offset]--; + } else { + G_gpg_vstate.ux_pinentry[offset] = sizeof(C_pin_digit) - 1; + } + ui_menu_pinentry_display(1); + break; + + case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // up + G_gpg_vstate.ux_pinentry[offset]++; + if (G_gpg_vstate.ux_pinentry[offset] == sizeof(C_pin_digit)) { + G_gpg_vstate.ux_pinentry[offset] = 0; + } + ui_menu_pinentry_display(1); + break; + + case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: + digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; + // next digit + if ((digit >= '0') && (digit <= '9')) { + offset++; + G_gpg_vstate.ux_pinentry[0] = offset; + if (offset == GPG_MAX_PW_LENGTH + 1) { + validate_pin(); + } else { + G_gpg_vstate.ux_pinentry[offset] = 5; + ui_menu_pinentry_display(1); + } + } + // cancel digit + else if (digit == '<') { + if (offset > 1) { + offset--; + G_gpg_vstate.ux_pinentry[0] = offset; + } + ui_menu_pinentry_display(1); + } + // validate pin + else if (digit == 'V') { + G_gpg_vstate.ux_pinentry[0] = offset - 1; + validate_pin(); + } + // cancel input without check + else { //(digit == 'A') + gpg_io_discard(0); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); + } + break; } - ui_menu_pinentry_display(1); - break; - - case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: - digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; - // next digit - if ((digit >= '0') && (digit <= '9')) { - offset++; - G_gpg_vstate.ux_pinentry[0] = offset; - if (offset == GPG_MAX_PW_LENGTH + 1) { - validate_pin(); - } else { - G_gpg_vstate.ux_pinentry[offset] = 5; - ui_menu_pinentry_display(1); - } - } - // cancel digit - else if (digit == '<') { - if (offset > 1) { - offset--; - G_gpg_vstate.ux_pinentry[0] = offset; - } - ui_menu_pinentry_display(1); - } - // validate pin - else if (digit == 'V') { - G_gpg_vstate.ux_pinentry[0] = offset - 1; - validate_pin(); - } - // cancel input without check - else { //(digit == 'A') - gpg_io_discard(0); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - } - break; - } - return 0; + return 0; } // >= 0 static unsigned int validate_pin() { - unsigned int offset, len, sw; - gpg_pin_t * pin; + unsigned int offset, len, sw; + gpg_pin_t *pin; - for (offset = 1; offset <= G_gpg_vstate.ux_pinentry[0]; offset++) { - G_gpg_vstate.menu[offset] = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; - } - - if (G_gpg_vstate.io_ins == 0x20) { - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - sw = gpg_pin_check(pin, G_gpg_vstate.io_p2, (unsigned char *)(G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); - gpg_io_discard(1); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - if (sw != SW_OK) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display, 0); - } else { - ui_menu_main_display(0); + for (offset = 1; offset <= G_gpg_vstate.ux_pinentry[0]; offset++) { + G_gpg_vstate.menu[offset] = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; } - } - if (G_gpg_vstate.io_ins == 0x24) { - if (G_gpg_vstate.io_p1 <= 2) { - gpg_io_insert_u8(G_gpg_vstate.ux_pinentry[0]); - gpg_io_insert((unsigned char *)(G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); - G_gpg_vstate.io_p1++; - } - if (G_gpg_vstate.io_p1 == 3) { - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - if (gpg_pin_check(pin, G_gpg_vstate.io_p2, G_gpg_vstate.work.io_buffer + 1, G_gpg_vstate.work.io_buffer[0]) != - SW_OK) { - gpg_io_discard(1); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, NULL, ui_menu_main_display, 0); - return 0; - } - offset = 1 + G_gpg_vstate.work.io_buffer[0]; - len = G_gpg_vstate.work.io_buffer[offset]; - if ((len != G_gpg_vstate.work.io_buffer[offset + 1 + len]) || - (memcmp(G_gpg_vstate.work.io_buffer + offset + 1, G_gpg_vstate.work.io_buffer + offset + 1 + len + 1, - len) != 0)) { + if (G_gpg_vstate.io_ins == 0x20) { + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + sw = gpg_pin_check(pin, + G_gpg_vstate.io_p2, + (unsigned char *) (G_gpg_vstate.menu + 1), + G_gpg_vstate.ux_pinentry[0]); gpg_io_discard(1); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_info(PIN_DIFFERS, NULL, ui_menu_main_display, 0); - } else { - gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), G_gpg_vstate.work.io_buffer + offset + 1, len); - gpg_io_discard(1); - gpg_io_insert_u16(SW_OK); + gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); - // ui_info(PIN_CHANGED, NULL, ui_menu_main_display, 0); - ui_menu_main_display(0); - } - return 0; - } else { - ui_menu_pinentry_display(0); + if (sw != SW_OK) { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + " %d tries remaining", + pin->counter); + ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display, 0); + } else { + ui_menu_main_display(0); + } + } + + if (G_gpg_vstate.io_ins == 0x24) { + if (G_gpg_vstate.io_p1 <= 2) { + gpg_io_insert_u8(G_gpg_vstate.ux_pinentry[0]); + gpg_io_insert((unsigned char *) (G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); + G_gpg_vstate.io_p1++; + } + if (G_gpg_vstate.io_p1 == 3) { + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + if (gpg_pin_check(pin, + G_gpg_vstate.io_p2, + G_gpg_vstate.work.io_buffer + 1, + G_gpg_vstate.work.io_buffer[0]) != SW_OK) { + gpg_io_discard(1); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + " %d tries remaining", + pin->counter); + ui_info(WRONG_PIN, NULL, ui_menu_main_display, 0); + return 0; + } + offset = 1 + G_gpg_vstate.work.io_buffer[0]; + len = G_gpg_vstate.work.io_buffer[offset]; + if ((len != G_gpg_vstate.work.io_buffer[offset + 1 + len]) || + (memcmp(G_gpg_vstate.work.io_buffer + offset + 1, + G_gpg_vstate.work.io_buffer + offset + 1 + len + 1, + len) != 0)) { + gpg_io_discard(1); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_info(PIN_DIFFERS, NULL, ui_menu_main_display, 0); + } else { + gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), + G_gpg_vstate.work.io_buffer + offset + 1, + len); + gpg_io_discard(1); + gpg_io_insert_u16(SW_OK); + gpg_io_do(IO_RETURN_AFTER_TX); + // ui_info(PIN_CHANGED, NULL, ui_menu_main_display, 0); + ui_menu_main_display(0); + } + return 0; + } else { + ui_menu_pinentry_display(0); + } } - } - return 0; + return 0; } /* ------------------------------- template UX ------------------------------- */ @@ -442,56 +503,63 @@ static unsigned int validate_pin() { #define LABEL_AUT "Authentication" #define LABEL_DEC "Decryption" -#define LABEL_RSA2048 "RSA 2048" -#define LABEL_RSA3072 "RSA 3072" -#define LABEL_RSA4096 "RSA 4096" -#define LABEL_SECP256K1 "SEPC 256K1" -#define LABEL_Ed25519 "Ed25519" +#define LABEL_RSA2048 "RSA 2048" +#define LABEL_RSA3072 "RSA 3072" +#define LABEL_RSA4096 "RSA 4096" +#define LABEL_SECP256K1 "SECP 256K1" +#define LABEL_Ed25519 "Ed25519" const char *const tmpl_key_getter_values[] = {LABEL_SIG, LABEL_DEC, LABEL_AUT}; const unsigned int tmpl_key_getter_values_map[] = {1, 2, 3}; const char *tmpl_key_getter(unsigned int idx) { - if (idx < ARRAYLEN(tmpl_key_getter_values)) { - return tmpl_key_getter_values[idx]; - } - return NULL; + if (idx < ARRAYLEN(tmpl_key_getter_values)) { + return tmpl_key_getter_values[idx]; + } + return NULL; } void tmpl_key_selector(unsigned int idx) { - if (idx < ARRAYLEN(tmpl_key_getter_values)) { - idx = tmpl_key_getter_values_map[idx]; - } else { - idx = 0; - } - G_gpg_vstate.ux_key = idx; - ui_menu_template_display(0); + if (idx < ARRAYLEN(tmpl_key_getter_values)) { + idx = tmpl_key_getter_values_map[idx]; + } else { + idx = 0; + } + G_gpg_vstate.ux_key = idx; + ui_menu_template_display(0); } -const char *const tmpl_type_getter_values[] = {LABEL_RSA2048, LABEL_RSA3072, LABEL_RSA4096, LABEL_SECP256K1, +const char *const tmpl_type_getter_values[] = {LABEL_RSA2048, + LABEL_RSA3072, + LABEL_RSA4096, + LABEL_SECP256K1, LABEL_Ed25519}; -const unsigned int tmpl_type_getter_values_map[] = {2048, 3072, 4096, CX_CURVE_SECP256R1, CX_CURVE_Ed25519}; +const unsigned int tmpl_type_getter_values_map[] = {2048, + 3072, + 4096, + CX_CURVE_SECP256R1, + CX_CURVE_Ed25519}; const char *tmpl_type_getter(unsigned int idx) { - if (idx < ARRAYLEN(tmpl_type_getter_values)) { - return tmpl_type_getter_values[idx]; - } - return NULL; + if (idx < ARRAYLEN(tmpl_type_getter_values)) { + return tmpl_type_getter_values[idx]; + } + return NULL; } void tmpl_type_selector(unsigned int idx) { - if (idx < ARRAYLEN(tmpl_type_getter_values)) { - idx = tmpl_type_getter_values_map[idx]; - } else { - idx = 0; - } - G_gpg_vstate.ux_type = idx; - ui_menu_template_display(1); + if (idx < ARRAYLEN(tmpl_type_getter_values)) { + idx = tmpl_type_getter_values_map[idx]; + } else { + idx = 0; + } + G_gpg_vstate.ux_type = idx; + ui_menu_template_display(1); } -#define KEY_KEY G_gpg_vstate.ux_buff1 +#define KEY_KEY G_gpg_vstate.ux_buff1 #define KEY_TYPE G_gpg_vstate.ux_buff2 void ui_menu_templet_action(); @@ -515,7 +583,10 @@ UX_STEP_CB_INIT(ux_menu_template_2_step, KEY_TYPE, }); -UX_STEP_CB(ux_menu_template_3_step, nnbnn, ui_menu_tmpl_set_action(0), {NULL, NULL, "Set Template", NULL, NULL}); +UX_STEP_CB(ux_menu_template_3_step, + nnbnn, + ui_menu_tmpl_set_action(0), + {NULL, NULL, "Set Template", NULL, NULL}); UX_STEP_CB(ux_menu_template_4_step, pb, @@ -532,121 +603,121 @@ UX_FLOW(ux_flow_template, &ux_menu_template_4_step); void ui_menu_template_predisplay() { - switch (G_gpg_vstate.ux_key) { - case 1: - snprintf(KEY_KEY, sizeof(KEY_KEY), "%s", LABEL_SIG); - break; - case 2: - snprintf(KEY_KEY, sizeof(KEY_KEY), "%s", LABEL_DEC); - break; - case 3: - snprintf(KEY_KEY, sizeof(KEY_KEY), "%s", LABEL_AUT); - break; - default: - snprintf(KEY_KEY, sizeof(KEY_KEY), "Choose key..."); - break; - } - - switch (G_gpg_vstate.ux_type) { - case 2048: - snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA2048); - break; - case 3072: - snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA3072); - break; - case 4096: - snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA4096); - break; - case CX_CURVE_SECP256R1: - snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_SECP256K1); - break; - case CX_CURVE_Ed25519: - snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_Ed25519); - break; - default: - snprintf(KEY_TYPE, sizeof(KEY_TYPE), "Choose type..."); - break; - } + switch (G_gpg_vstate.ux_key) { + case 1: + snprintf(KEY_KEY, sizeof(KEY_KEY), "%s", LABEL_SIG); + break; + case 2: + snprintf(KEY_KEY, sizeof(KEY_KEY), "%s", LABEL_DEC); + break; + case 3: + snprintf(KEY_KEY, sizeof(KEY_KEY), "%s", LABEL_AUT); + break; + default: + snprintf(KEY_KEY, sizeof(KEY_KEY), "Choose key..."); + break; + } + + switch (G_gpg_vstate.ux_type) { + case 2048: + snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA2048); + break; + case 3072: + snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA3072); + break; + case 4096: + snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA4096); + break; + case CX_CURVE_SECP256R1: + snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_SECP256K1); + break; + case CX_CURVE_Ed25519: + snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_Ed25519); + break; + default: + snprintf(KEY_TYPE, sizeof(KEY_TYPE), "Choose type..."); + break; + } } void ui_menu_template_display(unsigned int value) { - ui_flow_display(ux_flow_template, value); + ui_flow_display(ux_flow_template, value); } void ui_menu_tmpl_set_action(unsigned int value) { - LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); - gpg_key_t * dest; - const char * err; - const unsigned char *oid; - unsigned int oid_len; - err = NULL; + LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); + gpg_key_t *dest; + const char *err; + const unsigned char *oid; + unsigned int oid_len; + err = NULL; UNUSED(value); - memset(&attributes, 0, sizeof(attributes)); - switch (G_gpg_vstate.ux_type) { - case 2048: - case 3072: - case 4096: - attributes.value[0] = 0x01; - attributes.value[1] = (G_gpg_vstate.ux_type >> 8) & 0xFF; - attributes.value[2] = G_gpg_vstate.ux_type & 0xFF; - attributes.value[3] = 0x00; - attributes.value[4] = 0x20; - attributes.value[5] = 0x01; - attributes.length = 6; - break; - - case CX_CURVE_SECP256R1: - if (G_gpg_vstate.ux_key == 2) { - attributes.value[0] = 18; // ecdh - } else { - attributes.value[0] = 19; // ecdsa + memset(&attributes, 0, sizeof(attributes)); + switch (G_gpg_vstate.ux_type) { + case 2048: + case 3072: + case 4096: + attributes.value[0] = 0x01; + attributes.value[1] = (G_gpg_vstate.ux_type >> 8) & 0xFF; + attributes.value[2] = G_gpg_vstate.ux_type & 0xFF; + attributes.value[3] = 0x00; + attributes.value[4] = 0x20; + attributes.value[5] = 0x01; + attributes.length = 6; + break; + + case CX_CURVE_SECP256R1: + if (G_gpg_vstate.ux_key == 2) { + attributes.value[0] = 18; // ecdh + } else { + attributes.value[0] = 19; // ecdsa + } + oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); + memmove(attributes.value + 1, oid, sizeof(oid_len)); + attributes.length = 1 + oid_len; + break; + + case CX_CURVE_Ed25519: + if (G_gpg_vstate.ux_key == 2) { + attributes.value[0] = 18; // ecdh + memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); + attributes.length = 1 + sizeof(C_OID_cv25519); + } else { + attributes.value[0] = 22; // eddsa + memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); + attributes.length = 1 + sizeof(C_OID_Ed25519); + } + break; + + default: + err = TEMPLATE_TYPE; + goto ERROR; } - oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); - memmove(attributes.value + 1, oid, sizeof(oid_len)); - attributes.length = 1 + oid_len; - break; - - case CX_CURVE_Ed25519: - if (G_gpg_vstate.ux_key == 2) { - attributes.value[0] = 18; // ecdh - memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); - attributes.length = 1 + sizeof(C_OID_cv25519); - } else { - attributes.value[0] = 22; // eddsa - memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); - attributes.length = 1 + sizeof(C_OID_Ed25519); + + dest = NULL; + switch (G_gpg_vstate.ux_key) { + case 1: + dest = &G_gpg_vstate.kslot->sig; + break; + case 2: + dest = &G_gpg_vstate.kslot->dec; + break; + case 3: + dest = &G_gpg_vstate.kslot->aut; + break; + default: + err = TEMPLATE_KEY; + goto ERROR; } - break; - - default: - err = TEMPLATE_TYPE; - goto ERROR; - } - - dest = NULL; - switch (G_gpg_vstate.ux_key) { - case 1: - dest = &G_gpg_vstate.kslot->sig; - break; - case 2: - dest = &G_gpg_vstate.kslot->dec; - break; - case 3: - dest = &G_gpg_vstate.kslot->aut; - break; - default: - err = TEMPLATE_KEY; - goto ERROR; - } - - gpg_nvm_write(dest, NULL, sizeof(gpg_key_t)); - gpg_nvm_write(&dest->attributes, &attributes, sizeof(attributes)); - ui_info(OK, NULL, ui_menu_template_display, 0); - return; + + gpg_nvm_write(dest, NULL, sizeof(gpg_key_t)); + gpg_nvm_write(&dest->attributes, &attributes, sizeof(attributes)); + ui_info(OK, NULL, ui_menu_template_display, 0); + return; ERROR: - ui_info(INVALID_SELECTION, err, ui_menu_template_display, 0); + ui_info(INVALID_SELECTION, err, ui_menu_template_display, 0); } #undef KEY_KEY @@ -687,21 +758,21 @@ UX_STEP_CB(ux_menu_seedmode_2_step, UX_FLOW(ux_flow_seedmode, &ux_menu_seedmode_1_step, &ux_menu_seedmode_2_step); void ui_menu_seedmode_predisplay() { - snprintf(CUR_SEED_MODE, sizeof(CUR_SEED_MODE), "%s", G_gpg_vstate.seed_mode ? "ON" : "OFF"); + snprintf(CUR_SEED_MODE, sizeof(CUR_SEED_MODE), "%s", G_gpg_vstate.seed_mode ? "ON" : "OFF"); } void ui_menu_seedmode_display(unsigned int value) { - ui_flow_display(ux_flow_seedmode, value); + ui_flow_display(ux_flow_seedmode, value); } void ui_menu_seed_action(unsigned int value) { - UNUSED(value); - if (G_gpg_vstate.seed_mode) { - G_gpg_vstate.seed_mode = 0; - } else { - G_gpg_vstate.seed_mode = 1; - } - ui_menu_seedmode_display(0); + UNUSED(value); + if (G_gpg_vstate.seed_mode) { + G_gpg_vstate.seed_mode = 0; + } else { + G_gpg_vstate.seed_mode = 1; + } + ui_menu_seedmode_display(0); } #undef CUR_SEED_MODE @@ -765,23 +836,31 @@ UX_FLOW(ux_flow_pinmode, &ux_menu_pinmode_7_step); void ui_menu_pinmode_predisplay() { - snprintf(ONHST_BUFF, 5, "%s", PIN_MODE_HOST == G_gpg_vstate.pinmode ? "ON" : "OFF"); - snprintf(ONSCR_BUFF, 5, "%s", PIN_MODE_SCREEN == G_gpg_vstate.pinmode ? "ON" : "OFF"); - snprintf(CONFI_BUFF, 5, "%s", PIN_MODE_CONFIRM == G_gpg_vstate.pinmode ? "ON" : "OFF"); - snprintf(TRUST_BUFF, 5, "%s", PIN_MODE_TRUST == G_gpg_vstate.pinmode ? "ON" : "OFF"); - - snprintf(ONHST_BUFF + 5, sizeof(ONHST_BUFF) - 5, "%s", - PIN_MODE_HOST == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); - snprintf(ONSCR_BUFF + 5, sizeof(ONSCR_BUFF) - 5, "%s", - PIN_MODE_SCREEN == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); - snprintf(CONFI_BUFF + 5, sizeof(CONFI_BUFF) - 5, "%s", - PIN_MODE_CONFIRM == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); - snprintf(TRUST_BUFF + 5, sizeof(TRUST_BUFF) - 5, "%s", - PIN_MODE_TRUST == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); + snprintf(ONHST_BUFF, 5, "%s", PIN_MODE_HOST == G_gpg_vstate.pinmode ? "ON" : "OFF"); + snprintf(ONSCR_BUFF, 5, "%s", PIN_MODE_SCREEN == G_gpg_vstate.pinmode ? "ON" : "OFF"); + snprintf(CONFI_BUFF, 5, "%s", PIN_MODE_CONFIRM == G_gpg_vstate.pinmode ? "ON" : "OFF"); + snprintf(TRUST_BUFF, 5, "%s", PIN_MODE_TRUST == G_gpg_vstate.pinmode ? "ON" : "OFF"); + + snprintf(ONHST_BUFF + 5, + sizeof(ONHST_BUFF) - 5, + "%s", + PIN_MODE_HOST == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); + snprintf(ONSCR_BUFF + 5, + sizeof(ONSCR_BUFF) - 5, + "%s", + PIN_MODE_SCREEN == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); + snprintf(CONFI_BUFF + 5, + sizeof(CONFI_BUFF) - 5, + "%s", + PIN_MODE_CONFIRM == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); + snprintf(TRUST_BUFF + 5, + sizeof(TRUST_BUFF) - 5, + "%s", + PIN_MODE_TRUST == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); } void ui_menu_pinmode_display(unsigned int value) { - ui_flow_display(ux_flow_pinmode, value); + ui_flow_display(ux_flow_pinmode, value); } #undef ONHST_BUFF @@ -790,67 +869,67 @@ void ui_menu_pinmode_display(unsigned int value) { #undef TRUST_BUFF void ui_menu_pinmode_action(unsigned int value) { - unsigned char s; - if (value == 128) { - if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { - if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { - ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display, 0); - return; - } - // set new mode - s = G_gpg_vstate.pinmode; - gpg_nvm_write((void *)(&N_gpg_pstate->config_pin[0]), &s, 1); - // disactivate pinpad if any - if (G_gpg_vstate.pinmode == PIN_MODE_HOST) { - s = 0; - } else { - s = 3; - } - //#warning USBD_CCID_activate_pinpad commented - USBD_CCID_activate_pinpad(s); - value = G_gpg_vstate.pinmode; + unsigned char s; + if (value == 128) { + if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { + if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { + ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display, 0); + return; + } + // set new mode + s = G_gpg_vstate.pinmode; + gpg_nvm_write((void *) (&N_gpg_pstate->config_pin[0]), &s, 1); + // disactivate pinpad if any + if (G_gpg_vstate.pinmode == PIN_MODE_HOST) { + s = 0; + } else { + s = 3; + } + // #warning USBD_CCID_activate_pinpad commented + USBD_CCID_activate_pinpad(s); + value = G_gpg_vstate.pinmode; + } + } else { + switch (value) { + case PIN_MODE_HOST: + case PIN_MODE_SCREEN: + case PIN_MODE_CONFIRM: + if (!gpg_pin_is_verified(PIN_ID_PW2)) { + ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display, 0); + return; + } + break; + + case PIN_MODE_TRUST: + if (!gpg_pin_is_verified(PIN_ID_PW3)) { + ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display, 0); + return; + } + break; + default: + ui_info(INVALID_SELECTION, NULL, ui_menu_pinmode_display, 0); + return; + } + G_gpg_vstate.pinmode = value; } - } else { + // redisplay active pin mode entry switch (value) { - case PIN_MODE_HOST: - case PIN_MODE_SCREEN: - case PIN_MODE_CONFIRM: - if (!gpg_pin_is_verified(PIN_ID_PW2)) { - ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display, 0); - return; - } - break; - - case PIN_MODE_TRUST: - if (!gpg_pin_is_verified(PIN_ID_PW3)) { - ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display, 0); - return; - } - break; - default: - ui_info(INVALID_SELECTION, NULL, ui_menu_pinmode_display, 0); - return; + case PIN_MODE_HOST: + ui_menu_pinmode_display(0); + break; + case PIN_MODE_SCREEN: + ui_menu_pinmode_display(1); + break; + case PIN_MODE_CONFIRM: + ui_menu_pinmode_display(2); + break; + case PIN_MODE_TRUST: + ui_menu_pinmode_display(3); + break; + default: + ui_menu_pinmode_display(0); + break; } - G_gpg_vstate.pinmode = value; - } - // redisplay active pin mode entry - switch (value) { - case PIN_MODE_HOST: - ui_menu_pinmode_display(0); - break; - case PIN_MODE_SCREEN: - ui_menu_pinmode_display(1); - break; - case PIN_MODE_CONFIRM: - ui_menu_pinmode_display(2); - break; - case PIN_MODE_TRUST: - ui_menu_pinmode_display(3); - break; - default: - ui_menu_pinmode_display(0); - break; - } } /* ------------------------------- UIF MODE UX ------------------------------ */ @@ -888,16 +967,20 @@ UX_STEP_CB(ux_menu_uif_4_step, "Back", }); -UX_FLOW(ux_flow_uif, &ux_menu_uif_1_step, &ux_menu_uif_2_step, &ux_menu_uif_3_step, &ux_menu_uif_4_step); +UX_FLOW(ux_flow_uif, + &ux_menu_uif_1_step, + &ux_menu_uif_2_step, + &ux_menu_uif_3_step, + &ux_menu_uif_4_step); void ui_menu_uifmode_predisplay() { - snprintf(SIG_BUFF, sizeof(SIG_BUFF), "%s", G_gpg_vstate.kslot->sig.UIF[0] ? "ON" : "OFF"); - snprintf(DEC_BUFF, sizeof(DEC_BUFF), "%s", G_gpg_vstate.kslot->dec.UIF[0] ? "ON" : "OFF"); - snprintf(AUT_BUFF, sizeof(AUT_BUFF), "%s", G_gpg_vstate.kslot->aut.UIF[0] ? "ON" : "OFF"); + snprintf(SIG_BUFF, sizeof(SIG_BUFF), "%s", G_gpg_vstate.kslot->sig.UIF[0] ? "ON" : "OFF"); + snprintf(DEC_BUFF, sizeof(DEC_BUFF), "%s", G_gpg_vstate.kslot->dec.UIF[0] ? "ON" : "OFF"); + snprintf(AUT_BUFF, sizeof(AUT_BUFF), "%s", G_gpg_vstate.kslot->aut.UIF[0] ? "ON" : "OFF"); } void ui_menu_uifmode_display(unsigned int value) { - ui_flow_display(ux_flow_uif, value); + ui_flow_display(ux_flow_uif, value); } #undef SIG_BUFF @@ -905,117 +988,124 @@ void ui_menu_uifmode_display(unsigned int value) { #undef AUT_BUFF void ui_menu_uifmode_action(unsigned int value) { - unsigned char *uif; - unsigned char new_uif; - switch (value) { - case 0: - uif = &G_gpg_vstate.kslot->sig.UIF[0]; - break; - case 1: - uif = &G_gpg_vstate.kslot->dec.UIF[0]; - break; - case 2: - uif = &G_gpg_vstate.kslot->aut.UIF[0]; - break; - default: - ui_info(INVALID_SELECTION, NULL, ui_menu_uifmode_display, 0); - return; - } - if (uif[0] == 0) { - new_uif = 1; - gpg_nvm_write(&uif[0], &new_uif, 1); - } else if (uif[0] == 1) { - new_uif = 0; - gpg_nvm_write(&uif[0], &new_uif, 1); - } else /*if (uif[0] == 2 )*/ { - ui_info(UIF_LOCKED, NULL, ui_menu_uifmode_display, 0); - return; - } - ui_menu_uifmode_display(value); + unsigned char *uif; + unsigned char new_uif; + switch (value) { + case 0: + uif = &G_gpg_vstate.kslot->sig.UIF[0]; + break; + case 1: + uif = &G_gpg_vstate.kslot->dec.UIF[0]; + break; + case 2: + uif = &G_gpg_vstate.kslot->aut.UIF[0]; + break; + default: + ui_info(INVALID_SELECTION, NULL, ui_menu_uifmode_display, 0); + return; + } + if (uif[0] == 0) { + new_uif = 1; + gpg_nvm_write(&uif[0], &new_uif, 1); + } else if (uif[0] == 1) { + new_uif = 0; + gpg_nvm_write(&uif[0], &new_uif, 1); + } else /*if (uif[0] == 2 )*/ { + ui_info(UIF_LOCKED, NULL, ui_menu_uifmode_display, 0); + return; + } + ui_menu_uifmode_display(value); } /* -------------------------------- RESET UX --------------------------------- */ void ui_menu_reset_action(unsigned int value); -UX_STEP_CB(ux_menu_reset_1_step, bnn, ui_menu_settings_display(4), {"Ooops, NO!", "Do not reset", "the application"}); +UX_STEP_CB(ux_menu_reset_1_step, + bnn, + ui_menu_settings_display(4), + {"Ooops, NO!", "Do not reset", "the application"}); UX_STEP_CB(ux_menu_reset_2_step, bn, ui_menu_reset_action(0), {"YES!", "Reset the application"}); UX_FLOW(ux_flow_reset, &ux_menu_reset_1_step, &ux_menu_reset_2_step); void ui_menu_reset_display(unsigned int value) { - ux_flow_init(value, ux_flow_reset, NULL); + ux_flow_init(value, ux_flow_reset, NULL); } void ui_menu_reset_action(unsigned int value) { - UNUSED(value); - unsigned char magic[4]; - magic[0] = 0; - magic[1] = 0; - magic[2] = 0; - magic[3] = 0; - gpg_nvm_write((void *)(N_gpg_pstate->magic), magic, 4); - gpg_init(); - ui_CCID_reset(); - ui_menu_main_display(0); + UNUSED(value); + unsigned char magic[4]; + magic[0] = 0; + magic[1] = 0; + magic[2] = 0; + magic[3] = 0; + gpg_nvm_write((void *) (N_gpg_pstate->magic), magic, 4); + gpg_init(); + ui_CCID_reset(); + ui_menu_main_display(0); } /* ------------------------------ RESET SLOT UX ------------------------------ */ void ui_menu_reset_slot_action(unsigned int value); -UX_STEP_CB(ux_menu_reset_slot_1_step, bnn, ui_menu_settings_display(4), {"Ooops, NO!", "Do not reset", "the key slot"}); +UX_STEP_CB(ux_menu_reset_slot_1_step, + bnn, + ui_menu_settings_display(4), + {"Ooops, NO!", "Do not reset", "the key slot"}); UX_STEP_CB(ux_menu_reset_slot_2_step, bn, ui_menu_reset_slot_action(0), {"YES!", "Reset the slot"}); UX_FLOW(ux_flow_reset_slot, &ux_menu_reset_slot_1_step, &ux_menu_reset_slot_2_step); void ui_menu_reset_slot_display(unsigned int value) { - ux_flow_init(value, ux_flow_reset_slot, NULL); + ux_flow_init(value, ux_flow_reset_slot, NULL); } void ui_menu_reset_slot_action(unsigned int value) { - UNUSED(value); - gpg_install_slot(G_gpg_vstate.kslot); - ui_menu_main_display(0); + UNUSED(value); + gpg_install_slot(G_gpg_vstate.kslot); + ui_menu_main_display(0); } /* ------------------------------- SETTINGS UX ------------------------------- */ -const char *const settings_getter_values[] = {"Key template", "Seed mode", "PIN mode", "UIF mode", "Reset", "Back"}; +const char *const settings_getter_values[] = + {"Key template", "Seed mode", "PIN mode", "UIF mode", "Reset", "Back"}; const char *settings_getter(unsigned int idx) { - if (idx < ARRAYLEN(settings_getter_values)) { - return settings_getter_values[idx]; - } - return NULL; + if (idx < ARRAYLEN(settings_getter_values)) { + return settings_getter_values[idx]; + } + return NULL; } void settings_selector(unsigned int idx) { - switch (idx) { - case 0: - ui_menu_template_display(0); - break; - case 1: - ui_menu_seedmode_display(0); - break; - case 2: - ui_menu_pinmode_display(0); - break; - case 3: - ui_menu_uifmode_display(0); - break; - case 4: - ui_menu_reset_display(0); - break; - default: - ui_menu_main_display(1); - break; - } + switch (idx) { + case 0: + ui_menu_template_display(0); + break; + case 1: + ui_menu_seedmode_display(0); + break; + case 2: + ui_menu_pinmode_display(0); + break; + case 3: + ui_menu_uifmode_display(0); + break; + case 4: + ui_menu_reset_display(0); + break; + default: + ui_menu_main_display(1); + break; + } } void ui_menu_settings_display(unsigned int value) { - ux_menulist_init_select(G_ux.stack_count - 1, settings_getter, settings_selector, value); + ux_menulist_init_select(G_ux.stack_count - 1, settings_getter, settings_selector, value); } /* --------------------------------- SLOT UX --------------------------------- */ @@ -1032,15 +1122,30 @@ void ui_menu_slot_predisplay(void); #define SLOT2 G_gpg_vstate.ux_buff2 #define SLOT3 G_gpg_vstate.ux_buff3 -UX_STEP_CB_INIT(ux_menu_slot_1_step, bn, ui_menu_slot_predisplay(), ui_menu_slot_action(1), {"Select Slot", SLOT1}); +UX_STEP_CB_INIT(ux_menu_slot_1_step, + bn, + ui_menu_slot_predisplay(), + ui_menu_slot_action(1), + {"Select Slot", SLOT1}); -UX_STEP_CB_INIT(ux_menu_slot_2_step, bn, ui_menu_slot_predisplay(), ui_menu_slot_action(2), {"Select Slot", SLOT2}); +UX_STEP_CB_INIT(ux_menu_slot_2_step, + bn, + ui_menu_slot_predisplay(), + ui_menu_slot_action(2), + {"Select Slot", SLOT2}); -UX_STEP_CB_INIT(ux_menu_slot_3_step, bn, ui_menu_slot_predisplay(), ui_menu_slot_action(3), {"Select Slot", SLOT3}); +UX_STEP_CB_INIT(ux_menu_slot_3_step, + bn, + ui_menu_slot_predisplay(), + ui_menu_slot_action(3), + {"Select Slot", SLOT3}); -UX_STEP_CB(ux_menu_slot_4_step, bn, ui_menu_slot_action(128), {"Set selected Slot", "as default slot"}); +UX_STEP_CB(ux_menu_slot_4_step, + bn, + ui_menu_slot_action(128), + {"Set selected Slot", "as default slot"}); - UX_STEP_CB(ux_menu_slot_5_step, +UX_STEP_CB(ux_menu_slot_5_step, pn, ui_menu_main_display(1), { @@ -1056,16 +1161,25 @@ UX_FLOW(ux_flow_slot, &ux_menu_slot_5_step); void ui_menu_slot_predisplay() { - snprintf(SLOT1, sizeof(SLOT1), "1 %s %s", 1 == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", - 1 == G_gpg_vstate.slot + 1 ? "+" : " "); - snprintf(SLOT2, sizeof(SLOT2), "2 %s %s", 2 == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", - 2 == G_gpg_vstate.slot + 1 ? "+" : " "); - snprintf(SLOT3, sizeof(SLOT3), "3 %s %s", 3 == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", - 3 == G_gpg_vstate.slot + 1 ? "+" : " "); + snprintf(SLOT1, + sizeof(SLOT1), + "1 %s %s", + 1 == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", + 1 == G_gpg_vstate.slot + 1 ? "+" : " "); + snprintf(SLOT2, + sizeof(SLOT2), + "2 %s %s", + 2 == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", + 2 == G_gpg_vstate.slot + 1 ? "+" : " "); + snprintf(SLOT3, + sizeof(SLOT3), + "3 %s %s", + 3 == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", + 3 == G_gpg_vstate.slot + 1 ? "+" : " "); } void ui_menu_slot_display(unsigned int value) { - ui_flow_display(ux_flow_slot, value); + ui_flow_display(ux_flow_slot, value); } #undef SLOT1 @@ -1073,27 +1187,27 @@ void ui_menu_slot_display(unsigned int value) { #undef SLOT3 void ui_menu_slot_action(unsigned int value) { - unsigned char s; - - if (value == 128) { - s = G_gpg_vstate.slot; - gpg_nvm_write((void *) &N_gpg_pstate->config_slot[1], &s, 1); - } else { - s = (unsigned char)(value - 1); - if (s != G_gpg_vstate.slot) { - G_gpg_vstate.slot = s; - G_gpg_vstate.kslot = (gpg_key_slot_t *) &N_gpg_pstate->keys[G_gpg_vstate.slot]; - gpg_mse_reset(); - ui_CCID_reset(); + unsigned char s; + + if (value == 128) { + s = G_gpg_vstate.slot; + gpg_nvm_write((void *) &N_gpg_pstate->config_slot[1], &s, 1); + } else { + s = (unsigned char) (value - 1); + if (s != G_gpg_vstate.slot) { + G_gpg_vstate.slot = s; + G_gpg_vstate.kslot = (gpg_key_slot_t *) &N_gpg_pstate->keys[G_gpg_vstate.slot]; + gpg_mse_reset(); + ui_CCID_reset(); + } } - } - ui_menu_slot_display(G_gpg_vstate.slot); + ui_menu_slot_display(G_gpg_vstate.slot); } #endif /* --------------------------------- INFO UX --------------------------------- */ -#define STR(x) #x +#define STR(x) #x #define XSTR(x) STR(x) UX_STEP_NOCB(ux_menu_info_1_step, @@ -1116,8 +1230,8 @@ UX_STEP_CB(ux_menu_info_2_step, UX_FLOW(ux_flow_info, &ux_menu_info_1_step, &ux_menu_info_2_step); void ui_menu_info_display(unsigned int value) { - UNUSED(value); - ux_flow_init(0, ux_flow_info, NULL); + UNUSED(value); + ux_flow_init(0, ux_flow_info, NULL); } #undef STR @@ -1155,47 +1269,51 @@ UX_FLOW(ux_flow_main, &ux_menu_main_5_step); void ui_menu_main_predisplay() { - memset(G_gpg_vstate.ux_buff1, 0, sizeof(G_gpg_vstate.ux_buff1)); - memmove(G_gpg_vstate.ux_buff1, (void *)(N_gpg_pstate->name.value), 20); - if (G_gpg_vstate.ux_buff1[0] == 0) { - memmove(G_gpg_vstate.ux_buff1, "", 9); - } else { - for (int i = 0; i < 12; i++) { - if (G_gpg_vstate.ux_buff1[i] == 0x3c) { - G_gpg_vstate.ux_buff1[i] = ' '; - } + memset(G_gpg_vstate.ux_buff1, 0, sizeof(G_gpg_vstate.ux_buff1)); + memmove(G_gpg_vstate.ux_buff1, (void *) (N_gpg_pstate->name.value), 20); + if (G_gpg_vstate.ux_buff1[0] == 0) { + memmove(G_gpg_vstate.ux_buff1, "", 9); + } else { + for (int i = 0; i < 12; i++) { + if (G_gpg_vstate.ux_buff1[i] == 0x3c) { + G_gpg_vstate.ux_buff1[i] = ' '; + } + } } - } - unsigned int serial; - serial = (G_gpg_vstate.kslot->serial[0] << 24) | (G_gpg_vstate.kslot->serial[1] << 16) | - (G_gpg_vstate.kslot->serial[2] << 8) | (G_gpg_vstate.kslot->serial[3]); - memset(G_gpg_vstate.ux_buff2, 0, sizeof(G_gpg_vstate.ux_buff2)); + unsigned int serial; + serial = (G_gpg_vstate.kslot->serial[0] << 24) | (G_gpg_vstate.kslot->serial[1] << 16) | + (G_gpg_vstate.kslot->serial[2] << 8) | (G_gpg_vstate.kslot->serial[3]); + memset(G_gpg_vstate.ux_buff2, 0, sizeof(G_gpg_vstate.ux_buff2)); #if GPG_MULTISLOT - snprintf(G_gpg_vstate.ux_buff2, sizeof(G_gpg_vstate.ux_buff2), "ID: %x / %d", serial, G_gpg_vstate.slot + 1); + snprintf(G_gpg_vstate.ux_buff2, + sizeof(G_gpg_vstate.ux_buff2), + "ID: %x / %d", + serial, + G_gpg_vstate.slot + 1); #else - snprintf(G_gpg_vstate.ux_buff2, sizeof(G_gpg_vstate.ux_buff2), "ID: %x", serial); + snprintf(G_gpg_vstate.ux_buff2, sizeof(G_gpg_vstate.ux_buff2), "ID: %x", serial); #endif } void ui_menu_main_display(unsigned int value) { - // reserve a display stack slot if none yet - if (G_ux.stack_count == 0) { - ux_stack_push(); - } + // reserve a display stack slot if none yet + if (G_ux.stack_count == 0) { + ux_stack_push(); + } - ui_flow_display(ux_flow_main, value); + ui_flow_display(ux_flow_main, value); } /* --- INIT --- */ void ui_init(void) { - ui_menu_main_display(0); + ui_menu_main_display(0); } void io_seproxyhal_display(const bagl_element_t *element) { - io_seproxyhal_display_default((bagl_element_t *)element); + io_seproxyhal_display_default((bagl_element_t *) element); } ///----- -#endif // UI_NANOX +#endif // UI_NANOX diff --git a/src/gpg_vars.h b/src/gpg_vars.h index 282d8dd..a497c8a 100644 --- a/src/gpg_vars.h +++ b/src/gpg_vars.h @@ -36,10 +36,10 @@ extern gpg_v_state_t G_gpg_vstate; #ifndef TARGET_NANOS extern const gpg_nv_state_t N_state_pic; -#define N_gpg_pstate ((volatile gpg_nv_state_t *)PIC(&N_state_pic)) +#define N_gpg_pstate ((volatile gpg_nv_state_t *) PIC(&N_state_pic)) #else extern gpg_nv_state_t N_state_pic; -#define N_gpg_pstate ((WIDE gpg_nv_state_t *)PIC(&N_state_pic)) +#define N_gpg_pstate ((WIDE gpg_nv_state_t *) PIC(&N_state_pic)) #endif #ifdef GPG_DEBUG_MAIN @@ -51,5 +51,5 @@ extern ux_state_t ux; #ifdef HAVE_RSA #include "cx_ram.h" extern union cx_u G_cx; -#endif // HAVE_RSA +#endif // HAVE_RSA #endif From d72445db42c873b85b1a06fc0b14edaa98a14c9a Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 18 Oct 2023 18:25:20 +0200 Subject: [PATCH 09/75] Remove aplha channel from icons --- glyphs/icon_pgp.gif | Bin 83 -> 83 bytes images/icon_pgp.gif | Bin 88 -> 88 bytes images/icon_pgp_nanox.gif | Bin 83 -> 83 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/glyphs/icon_pgp.gif b/glyphs/icon_pgp.gif index 732270e4453448e49ebfad0ab37b4187464da9e7..800539bad9474bfdc3a474b1172e035c83c63f03 100644 GIT binary patch delta 38 ocmWFzR&e)pv#?C$W8h=>$N&QW|NjTm42nNl7`PZ1CMp;M0I!({g#Z8m delta 38 ocmWFzR&e)pv#?C$W8h<0$N&QW|NjTm42nNl7`YgjCMp;M0H@dpH~;_u diff --git a/images/icon_pgp.gif b/images/icon_pgp.gif index 857cfbfa6ac03f1f45d1b4ea909fe0510a3cb9d9..2e20e47717e3673dc7c36eb31ee08c912f2703e8 100644 GIT binary patch delta 38 lcma!uP;mEjv#?AQU=U#V$jAT$|6xG!Ckq1?1H(iG3jhLJ4wC=? delta 38 lcma!uP;mEjv#?AQU=Uzf$jAT$|6xG!CkrDN1JgtW3jq3y4n_a~ diff --git a/images/icon_pgp_nanox.gif b/images/icon_pgp_nanox.gif index 732270e4453448e49ebfad0ab37b4187464da9e7..800539bad9474bfdc3a474b1172e035c83c63f03 100644 GIT binary patch delta 38 ocmWFzR&e)pv#?C$W8h=>$N&QW|NjTm42nNl7`PZ1CMp;M0I!({g#Z8m delta 38 ocmWFzR&e)pv#?C$W8h<0$N&QW|NjTm42nNl7`YgjCMp;M0H@dpH~;_u From 1b7e959b1b8a4a1353801c036c0be94fcdc7964b Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 18 Oct 2023 18:25:54 +0200 Subject: [PATCH 10/75] Fix scan-build issues --- src/gpg_data.c | 5 +++-- src/gpg_io.c | 9 +++------ src/gpg_pso.c | 3 +++ src/gpg_ux_nanox.c | 2 -- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index 14bbd5b..65af816 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -409,11 +409,13 @@ int gpg_apdu_put_data(unsigned int ref) { pkey_size = sizeof(cx_rsa_4096_private_key_t); pq = G_gpg_vstate.work.rsa.public4096.n; break; + default: + THROW(SW_WRONG_DATA); + return 0; } ksz = ksz >> 1; // fetch e - e = 0; switch (len_e) { case 4: e = gpg_io_fetch_u32(); @@ -465,7 +467,6 @@ int gpg_apdu_put_data(unsigned int ref) { (keygpg->attributes.value[0] == 22)) { unsigned int curve; - ksz = 0; curve = gpg_oid2curve(&keygpg->attributes.value[1], keygpg->attributes.length - 1); if (curve == 0) { THROW(SW_WRONG_DATA); diff --git a/src/gpg_io.c b/src/gpg_io.c index edcf085..1551299 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -261,7 +261,7 @@ int gpg_io_do(unsigned int io_flags) { xx = G_gpg_vstate.io_length - 2; } G_io_apdu_buffer[tx + 1] = xx; - rx = gpg_io_exchange(CHANNEL_APDU, tx + 2); + gpg_io_exchange(CHANNEL_APDU, tx + 2); // check get response if ((G_io_apdu_buffer[0] != 0x00) || (G_io_apdu_buffer[1] != 0xc0) || (G_io_apdu_buffer[2] != 0x00) || (G_io_apdu_buffer[3] != 0x00)) { @@ -274,11 +274,10 @@ int gpg_io_do(unsigned int io_flags) { G_gpg_vstate.io_length); if (io_flags & IO_RETURN_AFTER_TX) { - rx = gpg_io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, G_gpg_vstate.io_length); + gpg_io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, G_gpg_vstate.io_length); return 0; - } else { - rx = gpg_io_exchange(CHANNEL_APDU, G_gpg_vstate.io_length); } + rx = io_exchange(CHANNEL_APDU, G_gpg_vstate.io_length); } //--- full in chaining --- @@ -288,7 +287,6 @@ int gpg_io_do(unsigned int io_flags) { } if (rx == 4) { G_io_apdu_buffer[4] = 0; - rx = 4; } G_gpg_vstate.io_offset = 0; G_gpg_vstate.io_length = 0; @@ -343,7 +341,6 @@ int gpg_io_do(unsigned int io_flags) { } if (rx == 4) { G_io_apdu_buffer[4] = 0; - rx = 4; } G_gpg_vstate.io_cla = G_io_apdu_buffer[0]; G_gpg_vstate.io_lc = G_io_apdu_buffer[4]; diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 64fa73b..7f90a56 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -85,6 +85,9 @@ static int gpg_sign(gpg_key_t *sigkey) { case 4096 / 8: key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa4096; break; + default: + THROW(SW_DATA_INVALID); + return 0; } if (key->size != ksz) { THROW(SW_CONDITIONS_NOT_SATISFIED); diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 0a914b8..227d842 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -171,7 +171,6 @@ unsigned int ui_uifconfirm_action(unsigned int value) { gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); ui_menu_main_display(0); - sw = 0x6985; } return 0; } @@ -228,7 +227,6 @@ void ui_menu_pinconfirm_display(unsigned int value) { unsigned int ui_pinconfirm_action(unsigned int value) { unsigned int sw; - sw = 0x6985; if (value == 1) { gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); sw = 0x9000; From e8e46d79900a2134c6ebbfbce418a710f8c90ee6 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 17 Oct 2023 16:01:16 +0200 Subject: [PATCH 11/75] Fix crypto deprecated warnings --- src/gpg_challenge.c | 45 +++++++++------ src/gpg_data.c | 103 +++++++++++++++++++++------------- src/gpg_gen.c | 74 ++++++++++++++++--------- src/gpg_pin.c | 26 ++++++--- src/gpg_pso.c | 132 +++++++++++++++++++++++++------------------- 5 files changed, 234 insertions(+), 146 deletions(-) diff --git a/src/gpg_challenge.c b/src/gpg_challenge.c index b6f61ca..960623e 100644 --- a/src/gpg_challenge.c +++ b/src/gpg_challenge.c @@ -18,9 +18,11 @@ #include "gpg_types.h" #include "gpg_api.h" #include "gpg_vars.h" +#include "cx_errors.h" int gpg_apdu_get_challenge() { unsigned int olen, hlen; + cx_err_t error = CX_INTERNAL_ERROR; if ((G_gpg_vstate.io_p1 & 0x80) == 0x80) { olen = G_gpg_vstate.io_p2; @@ -35,39 +37,46 @@ int gpg_apdu_get_challenge() { if ((G_gpg_vstate.io_p1 & 0x82) == 0x82) { unsigned int path[2]; unsigned char chain[32]; - unsigned char Sr[32]; + unsigned char Sr[64]; memset(chain, 0, 32); path[0] = 0x80475047; path[1] = 0x0F0F0F0F; - os_perso_derive_node_bip32(CX_CURVE_SECP256K1, path, 2, Sr, chain); + CX_CHECK(os_derive_bip32_no_throw(CX_CURVE_SECP256K1, path, 2, Sr, chain)); chain[0] = 'r'; chain[1] = 'n'; chain[2] = 'd'; cx_sha256_init(&G_gpg_vstate.work.md.sha256); - cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, Sr, 32, NULL, 0); - cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, chain, 3, NULL, 0); - hlen = cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, - CX_LAST, - G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length, - G_gpg_vstate.work.io_buffer, - 32); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, Sr, 32, NULL, 0)); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, chain, 3, NULL, 0)); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, + CX_LAST, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length, + G_gpg_vstate.work.io_buffer, + 32)); + hlen = cx_hash_get_size((const cx_hash_t *) &G_gpg_vstate.work.md.sha256); - cx_sha3_xof_init(&G_gpg_vstate.work.md.sha3, 256, olen); - cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha3, - CX_LAST, - G_gpg_vstate.work.io_buffer, - hlen, - G_gpg_vstate.work.io_buffer, - olen); + CX_CHECK(cx_sha3_xof_init_no_throw(&G_gpg_vstate.work.md.sha3, 256, olen)); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha3, + CX_LAST, + G_gpg_vstate.work.io_buffer, + hlen, + G_gpg_vstate.work.io_buffer, + olen)); } else { cx_rng(G_gpg_vstate.work.io_buffer, olen); + error = CX_OK; } if ((G_gpg_vstate.io_p1 & 0x81) == 0x81) { - cx_math_next_prime(G_gpg_vstate.work.io_buffer, olen); + CX_CHECK(cx_math_next_prime_no_throw(G_gpg_vstate.work.io_buffer, olen)); + } + +end: + if (error != CX_OK) { + THROW(error); } gpg_io_discard(0); gpg_io_inserted(olen); diff --git a/src/gpg_data.c b/src/gpg_data.c index 65af816..dc37190 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -18,6 +18,7 @@ #include "gpg_types.h" #include "gpg_api.h" #include "gpg_vars.h" +#include "cx_errors.h" int gpg_apdu_select_data(unsigned int ref, int record) { G_gpg_vstate.DO_current = ref; @@ -224,6 +225,7 @@ int gpg_apdu_put_data(unsigned int ref) { unsigned int t, l, sw; unsigned int *ptr_l; unsigned char *ptr_v; + cx_err_t error = CX_INTERNAL_ERROR; G_gpg_vstate.DO_current = ref; sw = SW_OK; @@ -452,7 +454,7 @@ int gpg_apdu_put_data(unsigned int ref) { _e[1] = e >> 16; _e[2] = e >> 8; _e[3] = e >> 0; - cx_rsa_generate_pair(ksz << 1, rsa_pub, rsa_priv, _e, 4, pq); + CX_CHECK(cx_rsa_generate_pair_no_throw(ksz << 1, rsa_pub, rsa_priv, _e, 4, pq)); // write keys nvm_write(&keygpg->pub_key.rsa, rsa_pub->e, 4); @@ -479,10 +481,10 @@ int gpg_apdu_put_data(unsigned int ref) { memmove(G_gpg_vstate.work.ecfp.private.d, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, ksz); - cx_ecfp_generate_pair(curve, - &G_gpg_vstate.work.ecfp.public, - &G_gpg_vstate.work.ecfp.private, - 1); + CX_CHECK(cx_ecfp_generate_pair_no_throw(curve, + &G_gpg_vstate.work.ecfp.public, + &G_gpg_vstate.work.ecfp.private, + 1)); nvm_write(&keygpg->pub_key.ecfp, &G_gpg_vstate.work.ecfp.public, sizeof(cx_ecfp_public_key_t)); @@ -682,17 +684,21 @@ int gpg_apdu_put_data(unsigned int ref) { pkey = &G_gpg_vstate.kslot->AES_dec; goto init_aes_key; init_aes_key: - cx_aes_init_key(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key); + CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length, + &aes_key)); gpg_nvm_write(pkey, &aes_key, sizeof(cx_aes_key_t)); break; /* AES key: one shot */ case 0xF4: - cx_aes_init_key(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key); + CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length, + &aes_key)); gpg_nvm_write((void *) &N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); - cx_aes_init_key(G_gpg_vstate.work.io_buffer + 16, - G_gpg_vstate.io_length, - &aes_key); + CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer + 16, + G_gpg_vstate.io_length, + &aes_key)); gpg_nvm_write((void *) &N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); break; } @@ -744,14 +750,22 @@ int gpg_apdu_put_data(unsigned int ref) { gpg_io_discard(1); return sw; +end: + THROW(error); } static void gpg_init_keyenc(cx_aes_key_t *keyenc) { unsigned char seed[32]; + cx_err_t error = CX_INTERNAL_ERROR; gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); gpg_pso_derive_key_seed(seed, (unsigned char *) PIC("key "), 1, seed, 16); - cx_aes_init_key(seed, 16, keyenc); + CX_CHECK(cx_aes_init_key_no_throw(seed, 16, keyenc)); + +end: + if (error != CX_OK) { + THROW(error); + } } // cmd @@ -761,6 +775,7 @@ int gpg_apdu_get_key_data(unsigned int ref) { gpg_key_t *keygpg; unsigned int len = 0; gpg_init_keyenc(&keyenc); + cx_err_t error = CX_INTERNAL_ERROR; switch (ref) { case 0x00B6: @@ -780,8 +795,13 @@ int gpg_apdu_get_key_data(unsigned int ref) { gpg_io_discard(1); // clear part gpg_io_insert_u32(TARGET_ID); - gpg_io_insert_u32(CX_APILEVEL); - gpg_io_insert_u32(CX_COMPAT_APILEVEL); + + // TODO; Check + // gpg_io_insert_u32(CX_APILEVEL); + // gpg_io_insert_u32(CX_COMPAT_APILEVEL); + gpg_io_insert_u32(get_api_level()); + gpg_io_insert_u32(get_api_level()); + // encrypted part switch (keygpg->attributes.value[0]) { case 0x01: // RSA @@ -791,12 +811,13 @@ int gpg_apdu_get_key_data(unsigned int ref) { // insert privkey gpg_io_mark(); - len = cx_aes(&keyenc, - CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, - (unsigned char *) &keygpg->priv_key.rsa4096, - sizeof(cx_rsa_4096_private_key_t), - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset); + len = GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset; + CX_CHECK(cx_aes_no_throw(&keyenc, + CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, + (unsigned char *) &keygpg->priv_key.rsa4096, + sizeof(cx_rsa_4096_private_key_t), + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + &len)); gpg_io_inserted(len); gpg_io_set_offset(IO_OFFSET_MARK); gpg_io_insert_u32(len); @@ -813,12 +834,13 @@ int gpg_apdu_get_key_data(unsigned int ref) { // insert privkey gpg_io_mark(); - len = cx_aes(&keyenc, - CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, - (unsigned char *) &keygpg->priv_key.ecfp640, - sizeof(cx_ecfp_640_private_key_t), - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset); + len = GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset; + CX_CHECK(cx_aes_no_throw(&keyenc, + CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, + (unsigned char *) &keygpg->priv_key.ecfp640, + sizeof(cx_ecfp_640_private_key_t), + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + &len)); gpg_io_inserted(len); gpg_io_set_offset(IO_OFFSET_MARK); gpg_io_insert_u32(len); @@ -830,6 +852,8 @@ int gpg_apdu_get_key_data(unsigned int ref) { return SW_REFERENCED_DATA_NOT_FOUND; } return SW_OK; +end: + THROW(error); } // cmd TID API COMPAT len_pub len_priv priv @@ -840,6 +864,7 @@ int gpg_apdu_put_key_data(unsigned int ref) { unsigned int len; unsigned int offset; gpg_init_keyenc(&keyenc); + cx_err_t error = CX_INTERNAL_ERROR; switch (ref) { case 0xB6: @@ -881,12 +906,13 @@ int gpg_apdu_put_key_data(unsigned int ref) { } offset = G_gpg_vstate.io_offset; gpg_io_discard(0); - len = cx_aes(&keyenc, - CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, - G_gpg_vstate.work.io_buffer + offset, - len, - G_gpg_vstate.work.io_buffer, - GPG_IO_BUFFER_LENGTH); + len = GPG_IO_BUFFER_LENGTH; + CX_CHECK(cx_aes_no_throw(&keyenc, + CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, + G_gpg_vstate.work.io_buffer + offset, + len, + G_gpg_vstate.work.io_buffer, + &len)); if (len != sizeof(cx_rsa_4096_private_key_t)) { THROW(SW_WRONG_DATA); } @@ -915,12 +941,13 @@ int gpg_apdu_put_key_data(unsigned int ref) { offset = G_gpg_vstate.io_offset; gpg_io_discard(0); - len = cx_aes(&keyenc, - CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, - G_gpg_vstate.work.io_buffer + offset, - len, - G_gpg_vstate.work.io_buffer, - GPG_IO_BUFFER_LENGTH); + len = GPG_IO_BUFFER_LENGTH; + CX_CHECK(cx_aes_no_throw(&keyenc, + CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, + G_gpg_vstate.work.io_buffer + offset, + len, + G_gpg_vstate.work.io_buffer, + &len)); if (len != sizeof(cx_ecfp_640_private_key_t)) { THROW(SW_WRONG_DATA); return SW_WRONG_DATA; @@ -936,4 +963,6 @@ int gpg_apdu_put_key_data(unsigned int ref) { } gpg_io_discard(1); return SW_OK; +end: + THROW(error); } diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 1273d23..189dd43 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -18,6 +18,7 @@ #include "gpg_types.h" #include "gpg_api.h" #include "gpg_vars.h" +#include "cx_errors.h" /* @in slot slot num [0 ; GPG_KEYS_SLOTS[ * @out seed 32 bytes master seed for given slot @@ -25,11 +26,17 @@ void gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { unsigned int path[2]; unsigned char chain[32]; + cx_err_t error = CX_INTERNAL_ERROR; memset(chain, 0, 32); path[0] = 0x80475047; path[1] = slot + 1; - os_perso_derive_node_bip32(CX_CURVE_SECP256K1, path, 2, seed, chain); + CX_CHECK(os_derive_bip32_no_throw(CX_CURVE_SECP256K1, path, 2, seed, chain)); + +end: + if (error != CX_OK) { + THROW(error); + } } /* @in Sn master seed slot number @@ -44,21 +51,31 @@ void gpg_pso_derive_key_seed(unsigned char *Sn, unsigned char *Ski, unsigned int Ski_len) { unsigned char h[32]; + cx_err_t error = CX_INTERNAL_ERROR; h[0] = idx >> 8; h[1] = idx; cx_sha256_init(&G_gpg_vstate.work.md.sha256); - cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, Sn, 32, NULL, 0); - cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, (unsigned char *) key_name, 4, NULL, 0); - cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, CX_LAST, h, 2, h, 32); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, Sn, 32, NULL, 0)); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, + 0, + (unsigned char *) key_name, + 4, + NULL, + 0)); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, CX_LAST, h, 2, h, 32)); #ifdef GPG_SHAKE256 - cx_shake256_init(&G_gpg_vstate.work.md.sha3, Ski_len); - cx_sha3_update(&G_gpg_vstate.work.md.sha3, h, 32); - cx_sha3_final(&G_gpg_vstate.work.md.sha3, Ski); + CX_CHECK(cx_shake256_init_no_throw(&G_gpg_vstate.work.md.sha3, Ski_len)); + CX_CHECK(cx_sha3_update(&G_gpg_vstate.work.md.sha3, h, 32)); + CX_CHECK(cx_sha3_final(&G_gpg_vstate.work.md.sha3, Ski)); #else - cx_sha3_xof_init(&G_gpg_vstate.work.md.sha3, 256, Ski_len); - cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha3, CX_LAST, h, 32, Ski, Ski_len); + CX_CHECK(cx_sha3_xof_init_no_throw(&G_gpg_vstate.work.md.sha3, 256, Ski_len)); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha3, CX_LAST, h, 32, Ski, Ski_len)); #endif +end: + if (error != CX_OK) { + THROW(error); + } } /* assume command is fully received */ @@ -67,6 +84,7 @@ int gpg_apdu_gen() { gpg_key_t *keygpg; unsigned char seed[66]; unsigned char *name; + cx_err_t error = CX_INTERNAL_ERROR; switch ((G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2) { case 0x8000: @@ -147,16 +165,17 @@ int gpg_apdu_gen() { gpg_pso_derive_key_seed(seed, name, 2, pq + size, size); *pq |= 0x80; *(pq + size) |= 0x80; - cx_math_next_prime(pq, size); - cx_math_next_prime(pq + size, size); + CX_CHECK(cx_math_next_prime_no_throw(pq, size)); + CX_CHECK(cx_math_next_prime_no_throw(pq + size, size)); } - cx_rsa_generate_pair(ksz, - rsa_pub, - rsa_priv, - (const unsigned char *) N_gpg_pstate->default_RSA_exponent, - 4, - pq); + CX_CHECK(cx_rsa_generate_pair_no_throw( + ksz, + rsa_pub, + rsa_priv, + (const unsigned char *) N_gpg_pstate->default_RSA_exponent, + 4, + pq)); nvm_write(pkey, rsa_priv, pkey_size); nvm_write(&keygpg->pub_key.rsa[0], rsa_pub->e, 4); @@ -182,14 +201,17 @@ int gpg_apdu_gen() { ksz = gpg_curve2domainlen(curve); gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); gpg_pso_derive_key_seed(seed, name, 1, seed, ksz); - cx_ecfp_init_private_key(curve, seed, ksz, &G_gpg_vstate.work.ecfp.private); + CX_CHECK(cx_ecfp_init_private_key_no_throw(curve, + seed, + ksz, + &G_gpg_vstate.work.ecfp.private)); keepprivate = 1; } - cx_ecfp_generate_pair(curve, - &G_gpg_vstate.work.ecfp.public, - &G_gpg_vstate.work.ecfp.private, - keepprivate); + CX_CHECK(cx_ecfp_generate_pair_no_throw(curve, + &G_gpg_vstate.work.ecfp.public, + &G_gpg_vstate.work.ecfp.private, + keepprivate)); nvm_write(&keygpg->priv_key.ecfp, &G_gpg_vstate.work.ecfp.private, sizeof(cx_ecfp_private_key_t)); @@ -272,9 +294,9 @@ int gpg_apdu_gen() { memmove(G_gpg_vstate.work.io_buffer + 128, keygpg->pub_key.ecfp256.W, keygpg->pub_key.ecfp256.W_len); - cx_edward_compress_point(CX_CURVE_Ed25519, - G_gpg_vstate.work.io_buffer + 128, - 65); + CX_CHECK(cx_edwards_compress_point_no_throw(CX_CURVE_Ed25519, + G_gpg_vstate.work.io_buffer + 128, + 65)); gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 129); // 129: discard 02 @@ -301,4 +323,6 @@ int gpg_apdu_gen() { THROW(SW_WRONG_DATA); return SW_WRONG_DATA; +end: + THROW(error); } diff --git a/src/gpg_pin.c b/src/gpg_pin.c index 80e2295..6b5b712 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -50,6 +50,7 @@ static int gpg_pin_get_state_index(unsigned int pinref) { static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pin_len) { unsigned int counter; + cx_err_t error = CX_INTERNAL_ERROR; if (pin->counter == 0) { return SW_PIN_BLOCKED; @@ -58,12 +59,12 @@ static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pi counter = pin->counter - 1; gpg_nvm_write(&(pin->counter), &counter, sizeof(int)); cx_sha256_init(&G_gpg_vstate.work.md.sha256); - cx_hash((cx_hash_t *) &G_gpg_vstate.work.md.sha256, - CX_LAST, - pin_val, - pin_len, - G_gpg_vstate.work.md.H, - sizeof(G_gpg_vstate.work.md.H)); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, + CX_LAST, + pin_val, + pin_len, + G_gpg_vstate.work.md.H, + sizeof(G_gpg_vstate.work.md.H))); if (memcmp(G_gpg_vstate.work.md.H, pin->value, 32)) { return SW_SECURITY_STATUS_NOT_SATISFIED; } @@ -71,6 +72,11 @@ static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pi counter = 3; gpg_nvm_write(&(pin->counter), &counter, sizeof(int)); return SW_OK; +end: + if (error != CX_OK) { + THROW(error); + } + return SW_UNKNOWN; } static void gpg_pin_check_throw(gpg_pin_t *pin, int pinID, unsigned char *pin_val, int pin_len) { @@ -97,15 +103,19 @@ int gpg_pin_check(gpg_pin_t *pin, int pinID, unsigned char *pin_val, unsigned in void gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len) { cx_sha256_t sha256; - + cx_err_t error = CX_INTERNAL_ERROR; gpg_pin_t newpin; cx_sha256_init(&sha256); - cx_hash((cx_hash_t *) &sha256, CX_LAST, pin_val, pin_len, newpin.value, 32); + CX_CHECK(cx_hash_no_throw((cx_hash_t *) &sha256, CX_LAST, pin_val, pin_len, newpin.value, 32)); newpin.length = pin_len; newpin.counter = 3; gpg_nvm_write(pin, &newpin, sizeof(gpg_pin_t)); +end: + if (error != CX_OK) { + THROW(error); + } } int gpg_pin_set_verified(int pinID, int verified) { diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 7f90a56..c09f7bf 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -19,6 +19,7 @@ #include "gpg_api.h" #include "gpg_vars.h" #include "gpg_ux_nanos.h" +#include "cx_errors.h" const unsigned char gpg_oid_sha256[] = {0x30, 0x31, @@ -67,6 +68,7 @@ static void gpg_pso_reset_PW1() { static int gpg_sign(gpg_key_t *sigkey) { // --- RSA + cx_err_t error = CX_INTERNAL_ERROR; if (sigkey->attributes.value[0] == 1) { cx_rsa_private_key_t *key; unsigned int ksz, l; @@ -106,13 +108,13 @@ static int gpg_sign(gpg_key_t *sigkey) { G_gpg_vstate.work.io_buffer[0] = 0; G_gpg_vstate.work.io_buffer[1] = 1; G_gpg_vstate.work.io_buffer[l - 1] = 0; - ksz = cx_rsa_decrypt(key, - CX_PAD_NONE, - CX_NONE, - G_gpg_vstate.work.io_buffer, - ksz, - G_gpg_vstate.work.io_buffer, - ksz); + CX_CHECK(cx_rsa_decrypt_no_throw(key, + CX_PAD_NONE, + CX_NONE, + G_gpg_vstate.work.io_buffer, + ksz, + G_gpg_vstate.work.io_buffer, + &ksz)); // send gpg_io_discard(0); gpg_io_inserted(ksz); @@ -122,7 +124,8 @@ static int gpg_sign(gpg_key_t *sigkey) { // --- ECDSA/EdDSA if ((sigkey->attributes.value[0] == 19) || (sigkey->attributes.value[0] == 22)) { cx_ecfp_private_key_t *key; - unsigned int sz, i, rs_len, info; + size_t sz; + unsigned int s_len, i, rs_len, info; unsigned char *rs; key = &sigkey->priv_key.ecfp; @@ -135,15 +138,16 @@ static int gpg_sign(gpg_key_t *sigkey) { THROW(SW_CONDITIONS_NOT_SATISFIED); return SW_CONDITIONS_NOT_SATISFIED; } - sz = cx_ecdsa_sign(key, - CX_RND_TRNG, - CX_NONE, - G_gpg_vstate.work.io_buffer, - sz, - RS, - 256, - &info); - // reencode r,s in MPI format + s_len = 256; + CX_CHECK(cx_ecdsa_sign_no_throw(key, + CX_RND_TRNG, + CX_NONE, + G_gpg_vstate.work.io_buffer, + sz, + RS, + &s_len, + &info)); + // re-encode r,s in MPI format gpg_io_discard(0); rs_len = RS[3]; @@ -161,16 +165,15 @@ static int gpg_sign(gpg_key_t *sigkey) { rs += 2; } } else { - sz = cx_eddsa_sign(key, - CX_NONE, - CX_SHA512, - G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length, - NULL, - 0, - RS, - 256, - NULL); + sz = 256; + CX_CHECK(cx_eddsa_sign_no_throw(key, + CX_SHA512, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length, + RS, + sz)); + CX_CHECK(cx_ecdomain_parameters_length(key->curve, &sz)); + sz *= 2; gpg_io_discard(0); gpg_io_insert(RS, sz); } @@ -183,6 +186,8 @@ static int gpg_sign(gpg_key_t *sigkey) { // --- PSO:CDS NOT SUPPORTED THROW(SW_REFERENCED_DATA_NOT_FOUND); return SW_REFERENCED_DATA_NOT_FOUND; +end: + THROW(error); } int gpg_apdu_pso() { @@ -190,6 +195,7 @@ int gpg_apdu_pso() { unsigned int pso; unsigned int sz; + cx_err_t error = CX_INTERNAL_ERROR; pso = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; @@ -239,12 +245,13 @@ int gpg_apdu_pso() { return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = cx_aes(key, - CX_ENCRYPT | CX_CHAIN_CBC | CX_LAST, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - msg_len, - G_gpg_vstate.work.io_buffer + 1, - GPG_IO_BUFFER_LENGTH - 1); + sz = GPG_IO_BUFFER_LENGTH - 1; + CX_CHECK(cx_aes_no_throw(key, + CX_ENCRYPT | CX_CHAIN_CBC | CX_LAST, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + msg_len, + G_gpg_vstate.work.io_buffer + 1, + &sz)); // send gpg_io_discard(0); G_gpg_vstate.work.io_buffer[0] = 0x02; @@ -290,13 +297,15 @@ int gpg_apdu_pso() { return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = cx_rsa_decrypt(key, - CX_PAD_PKCS1_1o5, - CX_NONE, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - msg_len, - G_gpg_vstate.work.io_buffer, - ksz); + sz = ksz; + CX_CHECK(cx_rsa_decrypt_no_throw( + key, + CX_PAD_PKCS1_1o5, + CX_NONE, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + msg_len, + G_gpg_vstate.work.io_buffer, + &sz)); // send gpg_io_discard(0); gpg_io_inserted(sz); @@ -312,12 +321,13 @@ int gpg_apdu_pso() { return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = cx_aes(key, - CX_DECRYPT | CX_CHAIN_CBC | CX_LAST, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - msg_len, - G_gpg_vstate.work.io_buffer, - GPG_IO_BUFFER_LENGTH); + sz = GPG_IO_BUFFER_LENGTH; + CX_CHECK(cx_aes_no_throw(key, + CX_DECRYPT | CX_CHAIN_CBC | CX_LAST, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + msg_len, + G_gpg_vstate.work.io_buffer, + &sz)); // send gpg_io_discard(0); gpg_io_inserted(sz); @@ -360,24 +370,28 @@ int gpg_apdu_pso() { (G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset)[31 - i]; } G_gpg_vstate.work.io_buffer[511] = 0x02; - sz = cx_ecdh(key, - CX_ECDH_X, - G_gpg_vstate.work.io_buffer + 511, - 65, - G_gpg_vstate.work.io_buffer + 256, - 160); + CX_CHECK(cx_ecdh_no_throw(key, + CX_ECDH_X, + G_gpg_vstate.work.io_buffer + 511, + 65, + G_gpg_vstate.work.io_buffer + 256, + 160)); + CX_CHECK(cx_ecdomain_parameters_length(key->curve, &sz)); + for (i = 0; i <= 31; i++) { G_gpg_vstate.work.io_buffer[128 + i] = G_gpg_vstate.work.io_buffer[287 - i]; } sz = 32; } else { - sz = cx_ecdh(key, - CX_ECDH_X, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - 65, - G_gpg_vstate.work.io_buffer + 128, - 160); + CX_CHECK( + cx_ecdh_no_throw(key, + CX_ECDH_X, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + 65, + G_gpg_vstate.work.io_buffer + 128, + 160)); + CX_CHECK(cx_ecdomain_parameters_length(key->curve, &sz)); } // send gpg_io_discard(0); @@ -399,6 +413,8 @@ int gpg_apdu_pso() { } THROW(SW_REFERENCED_DATA_NOT_FOUND); return SW_REFERENCED_DATA_NOT_FOUND; +end: + THROW(error); } int gpg_apdu_internal_authenticate() { From bebae9bfa91958fb4bea1bdb42731786607664fa Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 17 Oct 2023 16:21:01 +0200 Subject: [PATCH 12/75] Use the latest SDK - Update the Makefile - Fix glyphs and use those from sdk - Remove hardcoded files --- Makefile | 306 ++--- Makefile.rules | 39 - glyphs/badge_back.gif | Bin 74 -> 0 bytes glyphs/gpg_16px.gif | 1 + glyphs/icon_back.gif | Bin 1123 -> 0 bytes glyphs/icon_certificate.gif | Bin 1133 -> 0 bytes glyphs/icon_coggle.gif | Bin 1128 -> 0 bytes glyphs/icon_crossmark.gif | Bin 1131 -> 0 bytes glyphs/icon_dashboard.gif | Bin 1133 -> 0 bytes glyphs/icon_dashboard_x.gif | Bin 1126 -> 0 bytes glyphs/icon_down.gif | Bin 1100 -> 0 bytes glyphs/icon_left.gif | Bin 1101 -> 0 bytes glyphs/icon_right.gif | Bin 1100 -> 0 bytes glyphs/icon_up.gif | Bin 1100 -> 0 bytes glyphs/icon_validate_14.gif | Bin 1125 -> 0 bytes glyphs/icon_warning.gif | Bin 1130 -> 0 bytes glyphs/icon_pgp.gif => icons/gpg_14px.gif | Bin images/icon_pgp.gif => icons/gpg_16px.gif | Bin images/LICENSE | 10 - images/icon_pgp_nanox.gif | Bin 83 -> 0 bytes images/manager_gnupg.png | Bin 4111 -> 0 bytes src/gpg_api.h | 21 +- src/gpg_challenge.c | 27 +- src/gpg_data.c | 106 +- src/gpg_dispatch.c | 4 - src/gpg_gen.c | 18 +- src/gpg_init.c | 70 +- src/gpg_io.c | 16 +- src/gpg_main.c | 14 +- src/gpg_mse.c | 4 - src/gpg_nvram.c | 4 - src/gpg_pin.c | 11 +- src/gpg_pso.c | 4 - src/gpg_ram.c | 10 - src/gpg_select.c | 5 +- src/gpg_types.h | 6 +- src/gpg_ux_nanos.c | 53 +- src/gpg_ux_nanox.c | 43 +- src/gpg_vars.h | 5 - src/sdk/usbd_ccid_cmd.c | 1057 --------------- src/sdk/usbd_ccid_if.c | 619 --------- src/sdk/usbd_ccid_impl.h | 48 - src/sdk/usbd_hid_impl.h | 63 - src/sdk/usbd_impl.c | 1455 --------------------- src/sdk/usbd_impl.h | 7 - 45 files changed, 264 insertions(+), 3762 deletions(-) delete mode 100644 Makefile.rules delete mode 100644 glyphs/badge_back.gif create mode 120000 glyphs/gpg_16px.gif delete mode 100644 glyphs/icon_back.gif delete mode 100644 glyphs/icon_certificate.gif delete mode 100644 glyphs/icon_coggle.gif delete mode 100644 glyphs/icon_crossmark.gif delete mode 100644 glyphs/icon_dashboard.gif delete mode 100644 glyphs/icon_dashboard_x.gif delete mode 100644 glyphs/icon_down.gif delete mode 100644 glyphs/icon_left.gif delete mode 100644 glyphs/icon_right.gif delete mode 100644 glyphs/icon_up.gif delete mode 100644 glyphs/icon_validate_14.gif delete mode 100644 glyphs/icon_warning.gif rename glyphs/icon_pgp.gif => icons/gpg_14px.gif (100%) rename images/icon_pgp.gif => icons/gpg_16px.gif (100%) delete mode 100644 images/LICENSE delete mode 100644 images/icon_pgp_nanox.gif delete mode 100644 images/manager_gnupg.png delete mode 100755 src/sdk/usbd_ccid_cmd.c delete mode 100755 src/sdk/usbd_ccid_if.c delete mode 100644 src/sdk/usbd_ccid_impl.h delete mode 100644 src/sdk/usbd_hid_impl.h delete mode 100644 src/sdk/usbd_impl.c delete mode 100644 src/sdk/usbd_impl.h diff --git a/Makefile b/Makefile index b1e005d..cd58b05 100644 --- a/Makefile +++ b/Makefile @@ -1,32 +1,33 @@ -#******************************************************************************* -# Ledger App -# (c) 2016-2019 Ledger +# **************************************************************************** +# Ledger App OpenPGP +# (c) 2016-2024 Ledger SAS. # -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#******************************************************************************* - --include Makefile.env +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# **************************************************************************** + ifeq ($(BOLOS_SDK),) $(error Environment variable BOLOS_SDK is not set) endif -include $(BOLOS_SDK)/Makefile.defines -APP_LOAD_PARAMS=--appFlags 0x240 --path "2152157255'" --curve secp256k1 $(COMMON_LOAD_PARAMS) +include $(BOLOS_SDK)/Makefile.defines +######################################## +# Mandatory configuration # +######################################## +# Application name ifeq ($(APPNAME),) APPNAME = OpenPGP endif - ifeq ($(APPNAME),OpenPGP) ifeq ($(TARGET_NAME),TARGET_NANOS) GPG_MULTISLOT:=0 @@ -35,203 +36,120 @@ GPG_MULTISLOT:=1 endif else ifeq ($(APPNAME),OpenPGP.XL) GPG_MULTISLOT:=1 -APPNAME:=OpenPGP.XL else $(error APPNAME ($(APPNAME)) is not set or unknown) endif -ifeq ($(TARGET_NAME),TARGET_NANOS) -ICONNAME = images/icon_pgp.gif -else -ICONNAME = images/icon_pgp_nanox.gif -endif +APPVERSION_M = 2 +APPVERSION_N = 0 +APPVERSION_P = 0 +APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" -APPVERSION_M:=1 -APPVERSION_N:=4 -APPVERSION_P:=4 -APPVERSION:=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) SPECVERSION:="3.3.1" - -DEFINES += $(OPENPGP_CONFIG) -DEFINES += OPENPGP_VERSION_MAJOR=$(APPVERSION_M) OPENPGP_VERSION_MINOR=$(APPVERSION_N) OPENPGP_VERSION_MICRO=$(APPVERSION_P) -DEFINES += OPENPGP_VERSION=$(APPVERSION) -DEFINES += OPENPGP_NAME=$(APPNAME) DEFINES += SPEC_VERSION=$(SPECVERSION) -DEFINES += GPG_MULTISLOT=$(GPG_MULTISLOT) -#DEFINES += GPG_LOG - -ifeq ($(TARGET_NAME),TARGET_NANOS) -DEFINES += UI_NANO_S -else -DEFINES += UI_NANO_X -DEFINES += GPG_SHAKE256 -endif +# Application source files +APP_SOURCE_PATH += src +APP_SOURCE_FILES += $(BOLOS_SDK)/lib_cxng/src/cx_rsa.c +APP_SOURCE_FILES += $(BOLOS_SDK)/lib_cxng/src/cx_pkcs1.c +APP_SOURCE_FILES += $(BOLOS_SDK)/lib_cxng/src/cx_utils.c +INCLUDES_PATH += $(BOLOS_SDK)/lib_cxng/src -################ -# Default rule # -################ - -.PHONY: allvariants listvariants - -all: default - mkdir -p release - cp -a bin/app.elf release/$(APPNAME).elf - cp -a bin/app.hex release/$(APPNAME).hex - cp -a debug/app.asm release/$(APPNAME).asm - cp -a debug/app.map release/$(APPNAME).map - - +# Application icons following guidelines: +# https://developers.ledger.com/docs/embedded-app/design-requirements/#device-icon +ICON_NANOS = icons/gpg_16px.gif +ICON_NANOX = icons/gpg_14px.gif +ICON_NANOSP = icons/gpg_14px.gif + +# Application allowed derivation curves. +# Possibles curves are: secp256k1, secp256r1, ed25519 and bls12381g1 +# If your app needs it, you can specify multiple curves by using: +# `CURVE_APP_LOAD_PARAMS = ` +CURVE_APP_LOAD_PARAMS = secp256k1 + +# Application allowed derivation paths. +# You should request a specific path for your app. +# This serve as an isolation mechanism. +# Most application will have to request a path according to the BIP-0044 +# and SLIP-0044 standards. +# If your app needs it, you can specify multiple path by using: +# `PATH_APP_LOAD_PARAMS = "44'/1'" "45'/1'"` +PATH_APP_LOAD_PARAMS = "2152157255'" + +# Setting to allow building variant applications +# - is the name of the parameter which should be set +# to specify the variant that should be build. +# - a list of variant that can be build using this app code. +# * It must at least contains one value. +# * Values can be the app ticker or anything else but should be unique. +VARIANT_PARAM = APPNAME ifeq ($(TARGET_NAME),TARGET_NANOS) -VARIANTS = OpenPGP OpenPGP.XL +VARIANT_VALUES = OpenPGP OpenPGP.XL else -VARIANTS = OpenPGP +VARIANT_VALUES = OpenPGP +endif + +# Enabling DEBUG flag will enable PRINTF and disable optimizations +#DEBUG = 1 + +######################################## +# Application custom permissions # +######################################## +# See SDK `include/appflags.h` for the purpose of each permission +#HAVE_APPLICATION_FLAG_DERIVE_MASTER = 1 +#HAVE_APPLICATION_FLAG_GLOBAL_PIN = 1 +#HAVE_APPLICATION_FLAG_BOLOS_SETTINGS = 1 +#HAVE_APPLICATION_FLAG_LIBRARY = 1 + +######################################## +# Application communication interfaces # +######################################## +#ENABLE_BLUETOOTH = 1 +#ENABLE_NFC = 1 + +######################################## +# NBGL custom features # +######################################## +#ENABLE_NBGL_QRCODE = 1 +#ENABLE_NBGL_KEYBOARD = 1 +#ENABLE_NBGL_KEYPAD = 1 + +######################################## +# Features disablers # +######################################## +# These advanced settings allow to disable some feature that are by +# default enabled in the SDK `Makefile.standard_app`. +DISABLE_STANDARD_APP_FILES = 1 +#DISABLE_DEFAULT_IO_SEPROXY_BUFFER_SIZE = 1 # To allow custom size declaration +#DISABLE_STANDARD_APP_DEFINES = 1 # Will set all the following disablers +#DISABLE_STANDARD_SNPRINTF = 1 +#DISABLE_STANDARD_USB = 1 +DISABLE_STANDARD_WEBUSB = 1 +ifeq ($(TARGET_NAME),TARGET_NANOS) +DISABLE_STANDARD_BAGL_UX_FLOW = 1 endif +#DISABLE_DEBUG_LEDGER_ASSERT = 1 +#DISABLE_DEBUG_THROW = 1 -listvariants: - @echo VARIANTS APPNAME $(VARIANTS) - -allvariants: - make MULTISLOT=0 clean all - make MULTISLOT=1 clean all - -############ -# Platform # -############ -#SCRIPT_LD := script.ld +######################################## +# Main app configuration # +######################################## -ifneq ($(NO_CONSENT),) -DEFINES += NO_CONSENT -endif - -DEFINES += OS_IO_SEPROXYHAL -DEFINES += HAVE_BAGL HAVE_SPRINTF -DEFINES += HAVE_IO_USB HAVE_L4_USBLIB IO_USB_MAX_ENDPOINTS=4 IO_HID_EP_LENGTH=64 HAVE_USB_APDU +DEFINES += GPG_MULTISLOT=$(GPG_MULTISLOT) DEFINES += CUSTOM_IO_APDU_BUFFER_SIZE=\(255+5+64\) DEFINES += HAVE_LEGACY_PID - -DEFINES += USB_SEGMENT_SIZE=64 -DEFINES += U2F_PROXY_MAGIC=\"MOON\" -#DEFINES += HAVE_IO_U2F HAVE_U2F - -#DEFINES += UNUSED\(x\)=\(void\)x -DEFINES += APPVERSION=\"$(APPVERSION)\" - DEFINES += HAVE_USB_CLASS_CCID - -ifeq ($(NO_CXNG),) -INCLUDES_PATH += $(BOLOS_SDK)/lib_cxng/include -endif - -# RSA addition. -DEFINES += HAVE_RSA -INCLUDES_PATH += $(BOLOS_SDK)/lib_cxng/src -SOURCE_PATH += $(BOLOS_SDK)/lib_cxng/src/cx_rsa.c -SOURCE_PATH += $(BOLOS_SDK)/lib_cxng/src/cx_pkcs1.c -SOURCE_PATH += $(BOLOS_SDK)/lib_cxng/src/cx_utils.c -# RSA - End - -ifeq ($(TARGET_NAME),TARGET_NANOX) -DEFINES += HAVE_BLE BLE_COMMAND_TIMEOUT_MS=2000 -DEFINES += HAVE_BLE_APDU # basic ledger apdu transport over BLE -endif +DEFINES += HAVE_RSA ifeq ($(TARGET_NAME),TARGET_NANOS) -DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=128 -else -DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=300 -DEFINES += HAVE_GLO096 -DEFINES += HAVE_BAGL BAGL_WIDTH=128 BAGL_HEIGHT=64 -DEFINES += HAVE_BAGL_ELLIPSIS # long label truncation feature -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_REGULAR_11PX -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX -DEFINES += HAVE_UX_FLOW -endif - -# Enabling debug PRINTF -DEBUG = 0 -ifneq ($(DEBUG),0) - - ifeq ($(TARGET_NAME),TARGET_NANOS) - DEFINES += HAVE_PRINTF PRINTF=screen_printf - else - DEFINES += HAVE_PRINTF PRINTF=mcu_usb_printf - endif - DEFINES += PLINE="PRINTF(\"FILE:%s..LINE:%d\n\",__FILE__,__LINE__)" -else - DEFINES += PRINTF\(...\)= - DEFINES += PLINE\(...\)= -endif - - -############## -# Compiler # -############## -ifneq ($(BOLOS_ENV),) -$(info BOLOS_ENV=$(BOLOS_ENV)) -CLANGPATH := $(BOLOS_ENV)/clang-arm-fropi/bin/ -GCCPATH := $(BOLOS_ENV)/gcc-arm-none-eabi-5_3-2016q1/bin/ +DEFINES += UI_NANO_S else -$(info BOLOS_ENV is not set: falling back to CLANGPATH and GCCPATH) -endif -ifeq ($(CLANGPATH),) -$(info CLANGPATH is not set: clang will be used from PATH) -endif -ifeq ($(GCCPATH),) -$(info GCCPATH is not set: arm-none-eabi-* will be used from PATH) -endif -CC := $(CLANGPATH)clang - -#CFLAGS += -O0 -gdwarf-2 -gstrict-dwarf -CFLAGS += -O3 -Os -#CFLAGS += -fno-jump-tables -fno-lookup-tables -fsave-optimization-record -#$(info $(CFLAGS)) - -AS := $(GCCPATH)arm-none-eabi-gcc - -LD := $(GCCPATH)arm-none-eabi-gcc -#LDFLAGS += -O0 -gdwarf-2 -gstrict-dwarf -LDFLAGS += -O3 -Os -LDLIBS += -lm -lgcc -lc - -# import rules to compile glyphs(/pone) -include $(BOLOS_SDK)/Makefile.glyphs - -### variables processed by the common makefile.rules of the SDK to grab source files and include dirs -APP_SOURCE_PATH += src -SDK_SOURCE_PATH += lib_stusb lib_stusb_impl -SDK_SOURCE_PATH += lib_ux -ifeq ($(TARGET_NAME),TARGET_NANOX) -SDK_SOURCE_PATH += lib_blewbxx lib_blewbxx_impl +DEFINES += UI_NANO_X +DEFINES += GPG_SHAKE256 endif +######################### -cformat: - clang-format -i src/*.c src/*.h - -load: all - cp -a release/$(APPNAME).elf bin/app.elf - cp -a release/$(APPNAME).hex bin/app.hex - cp -a release/$(APPNAME).asm debug/app.asm - cp -a release/$(APPNAME).map debug/app.map - python -m ledgerblue.loadApp $(APP_LOAD_PARAMS) - -run: - python -m ledgerblue.runApp --appName $(APPNAME) - -exit: - echo -e "0020008206313233343536\n0002000000" |scriptor -r "Ledger Nano S [Nano S] (0001) 01 00" - -delete: - python -m ledgerblue.deleteApp $(COMMON_DELETE_PARAMS) - - - -# import generic rules from the user and SDK --include Makefile.rules -#include $(BOLOS_SDK)/Makefile.rules - -#add dependency on custom makefile filename -dep/%.d: %.c Makefile +# Import generic rules from the SDK +include $(BOLOS_SDK)/Makefile.standard_app diff --git a/Makefile.rules b/Makefile.rules deleted file mode 100644 index c524513..0000000 --- a/Makefile.rules +++ /dev/null @@ -1,39 +0,0 @@ -#******************************************************************************* -# Ledger SDK -# (c) 2017 Ledger -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#******************************************************************************* - -# temporary redef, to ensure wider compliance of the SDK with pre-1.6 apps -ifeq ($(TARGET_NAME),$(filter $(TARGET_NAME),TARGET_NANOX TARGET_NANOS2)) -SDK_SOURCE_PATH += lib_bagl -else -SDK_SOURCE_PATH += lib_bagl lib_ux -endif - -# adding the correct target header to sources -SDK_SOURCE_PATH += target/$(TARGET)/include - -# Expose all SDK header files with their full relative path to the SDK root folder -INCLUDES_PATH += ${BOLOS_SDK} - -SOURCE_PATH += $(dir $(foreach libdir, $(APP_SOURCE_PATH), $(dir $(shell find $(libdir) -name '*.[csS]')))) $(BOLOS_SDK)/src $(foreach libdir, $(SDK_SOURCE_PATH), $(dir $(shell find $(BOLOS_SDK)/$(libdir) -name '*.[csS]'))) -SOURCE_FILES := $(foreach path, $(SOURCE_PATH),$(shell find $(path) -name '*.[csS]') ) $(GLYPH_DESTC) -INCLUDES_PATH += $(dir $(foreach libdir, $(SDK_SOURCE_PATH), $(dir $(shell find $(BOLOS_SDK)/$(libdir) -name '*.h')))) include $(BOLOS_SDK)/include $(BOLOS_SDK)/include/arm $(dir $(shell find $(APP_SOURCE_PATH) -name '*.h')) $(GLYPH_SRC_DIR) - -VPATH += $(dir $(SOURCE_FILES)) -OBJECT_FILES += $(sort $(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(basename $(notdir $(SOURCE_FILES)))))) -DEPEND_FILES += $(sort $(addprefix $(DEP_DIR)/, $(addsuffix .d, $(basename $(notdir $(SOURCE_FILES)))))) - -include $(BOLOS_SDK)/Makefile.rules_generic diff --git a/glyphs/badge_back.gif b/glyphs/badge_back.gif deleted file mode 100644 index a2a7e6d4fa290e4875992d4024e988d14b91df26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmZ?wbhEHbh+i z#(Mch>H3D2mX`VkM*2oZxP`3=Lf^oD9vKom`v^ z4IGV}EX^$3V0vBhlS^|`^GaZPQxJOHaOwpmh};68%`T}$nPsUdZbkXI3Sf_0W#V>= zGfwlMdQ)(_#RaEceV}9XLD7p8-7q0w8Uiuli5JL$C;!wuV45!iCT_<6|Nj2@{p;tC z@87({PcxqRv3h4bgmo;iK$ z#u35cm<%;FYmM&SmXyJnS^XAT( zJ!|HS>C>i8nLKIYg#NzXp6;&Bj`p_Jmgc6$hWfhNn(C^`it@73lH#Jmg8aPPob0U3 zjP$hBl;otug!s7FnCPg;i14t`kl>)e0DnJUA8#*D4|g|LV6Zqk*xT9KSX)_In46iJ z7#kTH=@}C@U!{$jiyfNJ~jdh>MAe2nz`c@bmHVaC32Tu(PqUFf%a% wONgH=z;c3tK?g*D$_@r5iJtzIs~KwUGz+zPEiKD<-x8T<*15Dbij~0{0O2}{jsO4v diff --git a/glyphs/icon_certificate.gif b/glyphs/icon_certificate.gif deleted file mode 100644 index 89b529f792aeb77c8cc3b4d4782d8280b3c6c204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1133 zcmZ?wbhEHbh+i z#(Mch>H3D2mX`VkM*2oZxP`3=Lf^oD9vKom`v^ z4IGV}EX^$3V0vBhlS^|`^GaZPQxJOHaOwpmh};68%`T}$nPsUdZbkXI3Sf_0W#V>= zGfwlMdQ)(_#RaEceV}9XLD7p8-7q0w8Uiuli5JL$C;!wuV45!iCT_<6|Nj2@{p;tC z@87({PcxqRv3h4bgmo;iK$ z#u35cm<%;FYmM&SmXyJnS^XAT( zJ!|HS>C>i8nLKIYg#NzXp6;&Bj`p_Jmgc6$hWfhNn(C^`it@73lH#Jmg8aPPob0U3 zjP$hBl;otug!s7FnCPg;i14t`kl>)e0DnJUA8#*D4|g|LV6Zqk*xT9KSX)_In46iJ z7#kTH=@}C@U!{$jiyfNJ~jdh>MAe2nz`c@bmHVaC32Tu(PqUFf%a% zONgH=z;c3tK?g*D$_@r5rJnxG17}|h+i z#(Mch>H3D2mX`VkM*2oZx= z8BX({dQ)(_1?YGj{?G?HMjsTtNYM=w0;VAl6P|d19C-3i%>$zB`;K7M%r?(Lh`uU@`*{_N?K$B!O9xPR~No!hr=-nf44>XplvE?zi)?(CV< zr%s+Ye(dOx!-ozY*uQV@p5424?%2L<>z2)%Hf~tIZta@Yt5&X9zHI4|#fug$m_Kjs zoY}Kx&X_)J>XgZoCQj(@>+R|8>g;H5Yi((6YHX;ltF5W7s;nq4D=jH5DlEv)%gxEo z%FIYlOHD~mN=%54i;annii`*k3k?Yl3Jmb~^Y!ue^7L?bb9Hfca&)k_v$e6dva~Qa zGc_?bGBnWF)78<|($r8_Q&mw`QdE$ala-N{l9Uh^6BQ8_5)|O)h+i z#(Mch>H3D2mX`VkM*2oZxP`3=Lf^oD9vKom`v^ z4IGV}EX^$3V0vBhlS^|`^GaZPQxJMxaOwpmh};68%`T}$nPsUdZbkXI3Sf_0W#V>= zBTn<6dQ)(_#R;cgeV}9XLD7p8-7q0w8Uiuli5JL$C;!wuV45!iCT_<6|Nj2@{p;tC z@87({PcxqRv3h4bgmo;iK$ z#u35cm<%;FYmM&SmXyJnS^XAT( zJ!|HS>C>i8nLKIYg#NzXp6;&Bj`p_Jmgc6$hWfhNn(C^`it@73lH#Jmg8aPPob0U3 zjP$hBl;otug!s7FnCPg;i14t`kl>)e0DnJUA8#*D4|g|LU=%qz*xT9KSX)_In46iJ z7#kTH=@}C@U!{$jiyfNJ~jdh>MAe2nz`c@bmHVaC32Tu(PqUFf%a% zONgH=z;c3tK?g*D$_@r5g`R%S3EQ{LsG1P=G9yPZ?_TW!_O_JIo#INXvMrLH1~M>M F0{{d^jh+i z#(Mch>H3D2mX`VkM*2oZx|Z5PF?(>IEf;+ybD@E~!PCWvMA{Mftf3V2@j6;&zJ# zPV=C8Q*gV*5~p5$pkwqw(Tfz_Fd<+X0x{u<7s!Dp|I|ESnlAz-ZpQ!r{{H#>>*tT} z-@bnN{ORL|_wU}mdHw3;i|5atK6(7;;e-44?%uh5>*kH?*REcZ;0$^0LyB;-bQW{Jh+p?5xa; z^t9BJ|cQ;oTXD3GodplbjYb#3&b2C#D zVqwaWPR5VIe^Qem-6vZZ1v^b~aWPW+p~p z3GtH!SWYl7=zs`N*}=f1)WgepeBpkH7I)L>0efyf`cv6&*0!WWPeHu$lGW7Enz_D= G4Aua{vX6rR diff --git a/glyphs/icon_dashboard_x.gif b/glyphs/icon_dashboard_x.gif deleted file mode 100644 index 33d9b0a74a263937a8cbb3b7c4ccfd4bd4fd2a3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1126 zcmZ?wbhEHbh+i z#(Mch>H3D2mX`VkM*2oZx= z5l-`({PcxqRv3h4bgmo;iK$ z#u35cm<%;FYmM&SmXyJnS^XAT( zJ!|HS>C>i8nLKIYg#NzXp6;&Bj`p_Jmgc6$hWfhNn(C^`it@73lH#Jmg8aPPob0U3 zjP$hBl;otug!s7FnCPg;i14t`kl>)e0DnJUA8#*D4|g|L7iT9&2YWkP8*3{|3v)A5 z6JsMo1ARSR9c?X54RtkD6=fww1$jAH8EGj=32`w|5n&-g0e(JS9&Rp94t6$H7G@?! zUc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*btCX0MpOk6^Wap-qB64UF}T4Rno+txOE8OpFwuK*`RgC?(A*$i)q66_97Elu=SrV5P5L zUS6(Ou9shwu5V~*X{m2uq;F)T3sj(6T$u;-oo-&SvJ%j-AOl=di<65o3raHc^Aw8G ztP+#*OG|8(lob9$J&;=fH#M(V59}GeYG-AXPsowK%`DC^;3VTp46jft7PnYGO%#QAmD%4lD=*GV)9Ei!<^I z6r7#GL8hSLo0y!L2NcundS0ve;2nVDi`Y;NgdWMu4QWZ>pz zXy|I@XlQBVYUE;UXz6Nc_}|je8K&7KKe;qFHLnDwIR&BF8LAmYFGwpWEr5aq7{EoD zWvMA{Mftf3V1HX>!rg-I6icj50lNgEH3i8fKwls^#1W@feV|kH(V`kA1WZ04CM4AY z(t84%^TORUA=Po(!~qs&z(JU`qar2$B!L7a`@1}1N-;w-Lrew&K=vgZQZhY z)5ZeMTG_VdAT{+S(zE>X{jm6Nr?&Zaj`McQIQehVWA};$o%uI|73_73^0#s@+FtPL0rFC}Ia4}c|0Jk%O AU;qFB diff --git a/glyphs/icon_left.gif b/glyphs/icon_left.gif deleted file mode 100644 index 524226ba11247d9c5f797801400fd630071a049a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmZ?wbhEHbWMN=u_`m=H|NsA2{K*1lD*orL$SqJvNi0bO(*Nx%3KEmEQ%e+*Qqwc@ zY?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*btCX0MpOk6^Wap-qB64UF}T4Rno+txOE8OpFwuK*`RgC?(A*$i)q66_97Elu=SrV5P5L zUS6(Ou9shwu5V~*X{m2uq;F)T3sj(6T$u;-oo-&SvJ%j-AOl=di<65o3raHc^Aw8G ztP+#*OG|8(lob9$J&;=fH#M(V59}GeYG-AXPsowK%`DC^;3VTp46jft7PnYGO%#QAmD%4lD=*GV)9Ei!<^I z6r7#GL8hSLo0y!L2NcundS0ve;2nVDkcY~W;U?r3IeWZ>*# zXy|I@XlQBVYUE;UXz6Nc_}|je8K&7KKe;qFHLnDwIR&BF45}GLFGwpWEr5aq7{EoD zWvMA{Mftf3V1HX>!rg-I6l1JT0lNgEH3i8fKwls^!~~~SeV|kH(V`kA1WZ04CM4AY z(t84%^TORUA=Po(!~qs&z(JU`qar2$B!L7a`@1}1N-;w-Lrew&K=vgZQZhY z)5ZeMTG_VdAT{+S(zE>X{jm6Nr?&Zaj`McQIQehVWA};$o%uI|73_73^0#s@+FmbdLb7tJW=fuch4FGsN BgIfRq diff --git a/glyphs/icon_right.gif b/glyphs/icon_right.gif deleted file mode 100644 index 15ff3cf5994421fbd6e7d593aae8e438310f33ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmZ?wbhEHbWMN=u_`m=H|NsA2{K*1lD*orL$SqJvNi0bO(*Nx%3KEmEQ%e+*Qqwc@ zY?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*btCX0MpOk6^Wap-qB64UF}T4Rno+txOE8OpFwuK*`RgC?(A*$i)q66_97Elu=SrV5P5L zUS6(Ou9shwu5V~*X{m2uq;F)T3sj(6T$u;-oo-&SvJ%j-AOl=di<65o3raHc^Aw8G ztP+#*OG|8(lob9$J&;=fH#M(V59}GeYG-AXPsowK%`DC^;3VTp46jft7PnYGO%#QAmD%4lD=*GV)9Ei!<^I z6r7#GL8hSLo0y!L2NcundS0ve;2nVDkcY~W;U?r3IcWZ>*# zXy|I@XlQBVYUE;UXz6Nc_}|je8K&7KKe;qFHLnDwIR&BF2&x%HFGwpWEr5aq7{EoD zWvMA{Mftf3V1HX>!rg-A6jL{>P64|FqBRA{B|u*wIm7^`R(+sT^wFXkCIn1AASNW$ z0@Eju15Nk;OB7P`fT_I*n5-H9|NHyr_phHnzJL4r<@2Wx@87+B^ZM1x7tfzPee(Fx z!w2{8-Mw@B*3BE&uU)-z`O?J;=g*xzbNbZD6UUDoJ#zTa!2|pE?cK9`*UlZ=w{6|B zdDF%X>({MavwGFa70Z_`U9x!5!Ugl^&7CuQ*322xr%jzQdD6rQ{e8VX-Cdm>?QN|s z%}tFB^>wv1)m4=h1nAc$w`R`@o}*+(NU2R;bEa6!9jrm z{(inb-d>&_?ryFw&Q6XF_I9>5)>f7l=4PfQ#zuw)`g*!L+FF_#>T0Sg%1Vj~@^Z2= z(o&KV;$osA!a{-q{CvDTJltHI9PDhYEX+)d3=BG;5&~3eFfg(6@U>OF>g8gv1_1YR Bf|mdQ diff --git a/glyphs/icon_up.gif b/glyphs/icon_up.gif deleted file mode 100644 index 4e13c064f7605feb2e6e04a48a3133e5c95912cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmZ?wbhEHbWM^Pu_`m=H|NsA2{K*1lD*orL$SqJvNi0bO(*Nx%3KEmEQ%e+*Qqwc@ zY?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*btCX0MpOk6^Wap-qB64UF}T4Rno+txOE8OpFwuK*`RgC?(A*$i)q66_97Elu=SrV5P5L zUS6(Ou9shwu5V~*X{m2uq;F)T3sj(6T$u;-oo-&SvJ%j-AOl=di<65o3raHc^Aw8G ztP+#*OG|8(lob9$J&;=fH#M(V59}GeYG-AXPsowK%`DC^;3VTp46jft7PnYGO%#QAmD%4lD=*GV)9Ei!<^I z6r7#GL8hSLo0y!L2NcundS0ve;2nVDi`Y;NgdWMu4SWZ>pz zXy|I@XlQBVYUE;UXz6Nc_}|je8K&7KKe;qFHLnDwIR&oS!~m)pMK4GzC@p}31Q@_Y znPsUdZbkXI3SfU*Wy0Np?i3fSP64|FqBRA{B|u*w9AfN>Q>#AEDf(zp4HE(;9}p9g zYJuq!$bqK&|0N2kdBD_O1WeY9|Ns5{^ZVD&AK$-y{qp(KhxhN^zIpxX<%{Rfo<4c} z=;4F=_wL@gee33p>({PcxqRv3h4bgmo;iK$#u35cm<%;FYmM&SmXyJnS^XAT(J!|HS>C>i8nLKIYg#NzXp6;&Bj`p_J zmgc6$hWfhNn(C^`it@73lH#Jmg8aPPob0U3jP$hBl;otug!s7FnCPg;i14t`kl>)e z0DnJUA8#*D4|g|L7iT9&2YWkP8*3{|3v)A56JsMo1ARSR9c?X54RtkD6=fww1$jAH z8EGj=32`w|5n&-g0e(JS9v*HkP7Zc9Ru*O^Mg|5QPzeDlH5i!KTar5~xYlqnSOWmI C)q;Qk diff --git a/glyphs/icon_validate_14.gif b/glyphs/icon_validate_14.gif deleted file mode 100644 index ccb5cabe38d16ff857d540b64742e4b8346a6949..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1125 zcmZ?wbhEHbh+i z#(Mch>H3D2mX`VkM*2oZx= z0Z#LvdQ)(_#So`neV}9XLD7p8-7q0w8Uiuli5JL$C;!wuV45!iCT_<6|Nj2@{p;tC z@87({PcxqRv3h4bgmo;iK$ z#u35cm<%;FYmM&SmXyJnS^XAT( zJ!|HS>C>i8nLKIYg#NzXp6;&Bj`p_Jmgc6$hWfhNn(C^`it@73lH#Jmg8aPPob0U3 zjP$hBl;otug!s7FnCPg;i14t`kl>)e0DnJUA8#*D4|g|L7iT9&2YWkP8*3{|3v)A5 z6JsMo1ARSR9c?X54RtkD6=fww1$jAH8EGj=32`w|5n&-g0e(JS9&Rp94t6$H7G@?! zUh+i z#(Mch>H3D2mX`VkM*2oZxP`3=Lf^oD9vKom`v^ z4IGV}EX^$3V0vBhlS^|`^GaZPQxJMhaOwpmh};68%`T}$nPsUdZbkXI3Sf_0W#V>= zAx`t4dQ)(_#R#WfeV}9XLD7p8-7q0w8Uiuli5JL$C;!wuV45!iCT_<6|Nj2@{p;tC z@87({PcxqRv3h4bgmo;iK$ z#u35cm<%;FYmM&SmXyJnS^XAT( zJ!|HS>C>i8nLKIYg#NzXp6;&Bj`p_Jmgc6$hWfhNn(C^`it@73lH#Jmg8aPPob0U3 zjP$hBl;otug!s7FnCPg;i14t`kl>)e0DnJUA8#*D4|g|L7iT9&2YWkP8*3{|3v)A5 z6JsMo1ARSR9c?X54RtkD6=fww1$jAH8EGj=32`w|5n&-g0e(JS9&Rp94t6$H7G@?! zUG}%Y*tiBv=`&0a@1=QUCw| diff --git a/images/manager_gnupg.png b/images/manager_gnupg.png deleted file mode 100644 index 0291cb9f1b8c345da392e6acf28c14adbd159d08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4111 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, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - 3); + nvm_write((void *) N_gpg_pstate->config_slot, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + 3); break; case 0x01F2: @@ -513,12 +509,12 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write((void *) N_gpg_pstate->name.value, - G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length); - gpg_nvm_write((void *) &N_gpg_pstate->name.length, - &G_gpg_vstate.io_length, - sizeof(unsigned int)); + nvm_write((void *) N_gpg_pstate->name.value, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + nvm_write((void *) &N_gpg_pstate->name.length, + &G_gpg_vstate.io_length, + sizeof(unsigned int)); break; /* Login data */ case 0x5E: @@ -526,12 +522,12 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write((void *) N_gpg_pstate->login.value, - G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length); - gpg_nvm_write((void *) &N_gpg_pstate->login.length, - &G_gpg_vstate.io_length, - sizeof(unsigned int)); + nvm_write((void *) N_gpg_pstate->login.value, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + nvm_write((void *) &N_gpg_pstate->login.length, + &G_gpg_vstate.io_length, + sizeof(unsigned int)); break; /* Language preferences */ case 0x5F2D: @@ -539,12 +535,12 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write((void *) N_gpg_pstate->lang.value, - G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length); - gpg_nvm_write((void *) &N_gpg_pstate->lang.length, - &G_gpg_vstate.io_length, - sizeof(unsigned int)); + nvm_write((void *) N_gpg_pstate->lang.value, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + nvm_write((void *) &N_gpg_pstate->lang.length, + &G_gpg_vstate.io_length, + sizeof(unsigned int)); break; /* Sex */ case 0x5F35: @@ -552,9 +548,9 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write((void *) N_gpg_pstate->sex, - G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length); + nvm_write((void *) N_gpg_pstate->sex, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); break; /* Uniform resource locator */ case 0x5F50: @@ -562,12 +558,12 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write((void *) N_gpg_pstate->url.value, - G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length); - gpg_nvm_write((void *) &N_gpg_pstate->url.length, - &G_gpg_vstate.io_length, - sizeof(unsigned int)); + nvm_write((void *) N_gpg_pstate->url.value, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + nvm_write((void *) &N_gpg_pstate->url.length, + &G_gpg_vstate.io_length, + sizeof(unsigned int)); break; /* ----------------- Cardholder certificate ----------------- */ @@ -594,8 +590,8 @@ int gpg_apdu_put_data(unsigned int ref) { if (G_gpg_vstate.io_length > GPG_EXT_CARD_HOLDER_CERT_LENTH) { THROW(SW_WRONG_LENGTH); } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); + nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); break; /* ----------------- Algorithm attributes ----------------- */ @@ -616,8 +612,8 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - gpg_nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); + nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); break; /* ----------------- PWS status ----------------- */ @@ -649,7 +645,7 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 20); + nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 20); break; /* ----------------- Generation date/time ----------------- */ @@ -667,7 +663,7 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 4); + nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 4); break; /* ----------------- AES key ----------------- */ @@ -687,7 +683,7 @@ int gpg_apdu_put_data(unsigned int ref) { CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key)); - gpg_nvm_write(pkey, &aes_key, sizeof(cx_aes_key_t)); + nvm_write(pkey, &aes_key, sizeof(cx_aes_key_t)); break; /* AES key: one shot */ @@ -695,11 +691,11 @@ int gpg_apdu_put_data(unsigned int ref) { CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, &aes_key)); - gpg_nvm_write((void *) &N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); + nvm_write((void *) &N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer + 16, G_gpg_vstate.io_length, &aes_key)); - gpg_nvm_write((void *) &N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); + nvm_write((void *) &N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); break; } @@ -709,7 +705,7 @@ int gpg_apdu_put_data(unsigned int ref) { pin = gpg_pin_get_pin(PIN_ID_RC); if (G_gpg_vstate.io_length == 0) { - gpg_nvm_write(pin, NULL, sizeof(gpg_pin_t)); + nvm_write(pin, NULL, sizeof(gpg_pin_t)); } else if ((G_gpg_vstate.io_length > GPG_MAX_PW_LENGTH) || (G_gpg_vstate.io_length < 8)) { @@ -739,7 +735,7 @@ int gpg_apdu_put_data(unsigned int ref) { THROW(SW_WRONG_LENGTH); return 0; } - gpg_nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 2); + nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 2); break; /* ----------------- WAT ----------------- */ @@ -916,9 +912,9 @@ int gpg_apdu_put_key_data(unsigned int ref) { if (len != sizeof(cx_rsa_4096_private_key_t)) { THROW(SW_WRONG_DATA); } - gpg_nvm_write((unsigned char *) &keygpg->priv_key.rsa4096, - G_gpg_vstate.work.io_buffer, - len); + nvm_write((unsigned char *) &keygpg->priv_key.rsa4096, + G_gpg_vstate.work.io_buffer, + len); break; // ECC @@ -952,9 +948,9 @@ int gpg_apdu_put_key_data(unsigned int ref) { THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } - gpg_nvm_write((unsigned char *) &keygpg->priv_key.ecfp640, - G_gpg_vstate.work.io_buffer, - len); + nvm_write((unsigned char *) &keygpg->priv_key.ecfp640, + G_gpg_vstate.work.io_buffer, + len); break; default: diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index d6825b7..d3bc82f 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -13,10 +13,6 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" void gpg_check_access_ins() { diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 189dd43..21f12ca 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -13,11 +13,8 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" +#include "cx_ram.h" #include "cx_errors.h" /* @in slot slot num [0 ; GPG_KEYS_SLOTS[ @@ -58,11 +55,11 @@ void gpg_pso_derive_key_seed(unsigned char *Sn, cx_sha256_init(&G_gpg_vstate.work.md.sha256); CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, Sn, 32, NULL, 0)); CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, - 0, - (unsigned char *) key_name, - 4, - NULL, - 0)); + 0, + (unsigned char *) key_name, + 4, + NULL, + 0)); CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, CX_LAST, h, 2, h, 32)); #ifdef GPG_SHAKE256 CX_CHECK(cx_shake256_init_no_throw(&G_gpg_vstate.work.md.sha3, Ski_len)); @@ -70,7 +67,8 @@ void gpg_pso_derive_key_seed(unsigned char *Sn, CX_CHECK(cx_sha3_final(&G_gpg_vstate.work.md.sha3, Ski)); #else CX_CHECK(cx_sha3_xof_init_no_throw(&G_gpg_vstate.work.md.sha3, 256, Ski_len)); - CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha3, CX_LAST, h, 32, Ski, Ski_len)); + CX_CHECK( + cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha3, CX_LAST, h, 32, Ski, Ski_len)); #endif end: if (error != CX_OK) { diff --git a/src/gpg_init.c b/src/gpg_init.c index f79a147..5b016df 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -13,11 +13,9 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" +#include "usbd_ccid_if.h" +#include "ox_ec.h" #define SHORT(x) ((x) >> 8) & 0xFF, (x) &0xFF /* ----------------------*/ @@ -340,7 +338,7 @@ void gpg_init() { // first init ? if (memcmp((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)) != 0) { gpg_install(STATE_ACTIVATE); - gpg_nvm_write((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)); + nvm_write((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)); memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); } @@ -366,78 +364,74 @@ void gpg_install_slot(gpg_key_slot_t *slot) { unsigned char tmp[4]; unsigned int l; - gpg_nvm_write(slot, 0, sizeof(gpg_key_slot_t)); + nvm_write(slot, 0, sizeof(gpg_key_slot_t)); cx_rng(tmp, 4); - gpg_nvm_write((void *) (slot->serial), tmp, 4); + nvm_write((void *) (slot->serial), tmp, 4); l = sizeof(C_default_AlgoAttr_sig); - gpg_nvm_write((void *) (&slot->sig.attributes.value), (void *) C_default_AlgoAttr_sig, l); - gpg_nvm_write((void *) (&slot->sig.attributes.length), &l, sizeof(unsigned int)); - gpg_nvm_write((void *) (&slot->aut.attributes.value), (void *) C_default_AlgoAttr_sig, l); - gpg_nvm_write((void *) (&slot->aut.attributes.length), &l, sizeof(unsigned int)); + nvm_write((void *) (&slot->sig.attributes.value), (void *) C_default_AlgoAttr_sig, l); + nvm_write((void *) (&slot->sig.attributes.length), &l, sizeof(unsigned int)); + nvm_write((void *) (&slot->aut.attributes.value), (void *) C_default_AlgoAttr_sig, l); + nvm_write((void *) (&slot->aut.attributes.length), &l, sizeof(unsigned int)); l = sizeof(C_default_AlgoAttr_dec); - gpg_nvm_write((void *) (&slot->dec.attributes.value), (void *) C_default_AlgoAttr_dec, l); - gpg_nvm_write((void *) (&slot->dec.attributes.length), &l, sizeof(unsigned int)); + nvm_write((void *) (&slot->dec.attributes.value), (void *) C_default_AlgoAttr_dec, l); + nvm_write((void *) (&slot->dec.attributes.length), &l, sizeof(unsigned int)); tmp[0] = 0x00; tmp[1] = 0x20; - gpg_nvm_write((void *) (&slot->sig.UIF), &tmp, 2); - gpg_nvm_write((void *) (&slot->dec.UIF), &tmp, 2); - gpg_nvm_write((void *) (&slot->aut.UIF), &tmp, 2); + nvm_write((void *) (&slot->sig.UIF), &tmp, 2); + nvm_write((void *) (&slot->dec.UIF), &tmp, 2); + nvm_write((void *) (&slot->aut.UIF), &tmp, 2); } void gpg_install(unsigned char app_state) { gpg_pin_t pin; // full reset data - gpg_nvm_write((void *) (N_gpg_pstate), NULL, sizeof(gpg_nv_state_t)); + nvm_write((void *) (N_gpg_pstate), NULL, sizeof(gpg_nv_state_t)); // historical bytes memmove(G_gpg_vstate.work.io_buffer, C_default_Histo, sizeof(C_default_Histo)); G_gpg_vstate.work.io_buffer[7] = app_state; - gpg_nvm_write((void *) (N_gpg_pstate->histo), - G_gpg_vstate.work.io_buffer, - sizeof(C_default_Histo)); + nvm_write((void *) (N_gpg_pstate->histo), G_gpg_vstate.work.io_buffer, sizeof(C_default_Histo)); // AID memmove(G_gpg_vstate.work.io_buffer, C_default_AID, sizeof(C_default_AID)); - gpg_nvm_write((void *) (N_gpg_pstate->AID), - &G_gpg_vstate.work.io_buffer, - sizeof(C_default_AID)); + nvm_write((void *) (N_gpg_pstate->AID), &G_gpg_vstate.work.io_buffer, sizeof(C_default_AID)); if (app_state == STATE_ACTIVATE) { // default sex: none G_gpg_vstate.work.io_buffer[0] = 0x39; - gpg_nvm_write((void *) (&N_gpg_pstate->sex), G_gpg_vstate.work.io_buffer, 1); + nvm_write((void *) (&N_gpg_pstate->sex), G_gpg_vstate.work.io_buffer, 1); // default PW1/PW2: 1 2 3 4 5 6 memmove(pin.value, C_sha256_PW1, sizeof(C_sha256_PW1)); pin.length = 6; pin.counter = 3; pin.ref = PIN_ID_PW1; - gpg_nvm_write((void *) (&N_gpg_pstate->PW1), &pin, sizeof(gpg_pin_t)); + nvm_write((void *) (&N_gpg_pstate->PW1), &pin, sizeof(gpg_pin_t)); // default PW3: 1 2 3 4 5 6 7 8 memmove(pin.value, C_sha256_PW2, sizeof(C_sha256_PW2)); pin.length = 8; pin.counter = 3; pin.ref = PIN_ID_PW3; - gpg_nvm_write((void *) (&N_gpg_pstate->PW3), &pin, sizeof(gpg_pin_t)); + nvm_write((void *) (&N_gpg_pstate->PW3), &pin, sizeof(gpg_pin_t)); // PWs status G_gpg_vstate.work.io_buffer[0] = 1; G_gpg_vstate.work.io_buffer[1] = GPG_MAX_PW_LENGTH; G_gpg_vstate.work.io_buffer[2] = GPG_MAX_PW_LENGTH; G_gpg_vstate.work.io_buffer[3] = GPG_MAX_PW_LENGTH; - gpg_nvm_write((void *) (&N_gpg_pstate->PW_status), G_gpg_vstate.work.io_buffer, 4); + nvm_write((void *) (&N_gpg_pstate->PW_status), G_gpg_vstate.work.io_buffer, 4); // config slot G_gpg_vstate.work.io_buffer[0] = GPG_KEYS_SLOTS; G_gpg_vstate.work.io_buffer[1] = 0; G_gpg_vstate.work.io_buffer[2] = 3; // 3: selection by APDU and screen - gpg_nvm_write((void *) (&N_gpg_pstate->config_slot), G_gpg_vstate.work.io_buffer, 3); + nvm_write((void *) (&N_gpg_pstate->config_slot), G_gpg_vstate.work.io_buffer, 3); // config rsa pub G_gpg_vstate.work.io_buffer[0] = (GPG_RSA_DEFAULT_PUB >> 24) & 0xFF; @@ -448,8 +442,8 @@ void gpg_install(unsigned char app_state) { // config pin G_gpg_vstate.work.io_buffer[0] = PIN_MODE_CONFIRM; - gpg_nvm_write((void *) (&N_gpg_pstate->config_pin), G_gpg_vstate.work.io_buffer, 1); - USBD_CCID_activate_pinpad(3); + nvm_write((void *) (&N_gpg_pstate->config_pin), G_gpg_vstate.work.io_buffer, 1); + gpg_activate_pinpad(3); // default key template: RSA 2048) for (int s = 0; s < GPG_KEYS_SLOTS; s++) { @@ -458,16 +452,8 @@ void gpg_install(unsigned char app_state) { } } -// TODO: Check if needed -void USBD_CCID_activate_pinpad(int enabled) { -#ifdef HAVE_USB_CLASS_CCID - //unsigned short length = 0; - //uint8_t *cfgDesc = NULL; - unsigned char e; - e = enabled ? 3 : 0; - //cfgDesc = USBD_GetCfgDesc_impl(&length); - //nvm_write(cfgDesc + (length - 16), &e, 1); -#else - UNUSED(enabled); -#endif +void gpg_activate_pinpad(uint8_t enabled) { + uint8_t e = enabled ? 3 : 0; + + io_usb_ccid_configure_pinpad(e); } diff --git a/src/gpg_io.c b/src/gpg_io.c index 1551299..8ecf276 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -13,10 +13,6 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" /* @@ -214,7 +210,7 @@ int gpg_io_fetch_tl(unsigned int *T, unsigned int *L) { } int gpg_io_fetch_nv(unsigned char *buffer, int len) { - gpg_nvm_write(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); + nvm_write(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); G_gpg_vstate.io_offset += len; return len; } @@ -242,8 +238,8 @@ int gpg_io_do(unsigned int io_flags) { if (io_flags & IO_ASYNCH_REPLY) { // if IO_ASYNCH_REPLY has been set, - // gpg_io_exchange will return when IO_RETURN_AFTER_TX will set in ui - rx = gpg_io_exchange(CHANNEL_APDU | IO_ASYNCH_REPLY, 0); + // io_exchange will return when IO_RETURN_AFTER_TX will set in ui + rx = io_exchange(CHANNEL_APDU | IO_ASYNCH_REPLY, 0); } else { // --- full out chaining --- G_gpg_vstate.io_offset = 0; @@ -261,7 +257,7 @@ int gpg_io_do(unsigned int io_flags) { xx = G_gpg_vstate.io_length - 2; } G_io_apdu_buffer[tx + 1] = xx; - gpg_io_exchange(CHANNEL_APDU, tx + 2); + io_exchange(CHANNEL_APDU, tx + 2); // check get response if ((G_io_apdu_buffer[0] != 0x00) || (G_io_apdu_buffer[1] != 0xc0) || (G_io_apdu_buffer[2] != 0x00) || (G_io_apdu_buffer[3] != 0x00)) { @@ -274,7 +270,7 @@ int gpg_io_do(unsigned int io_flags) { G_gpg_vstate.io_length); if (io_flags & IO_RETURN_AFTER_TX) { - gpg_io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, G_gpg_vstate.io_length); + io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, G_gpg_vstate.io_length); return 0; } rx = io_exchange(CHANNEL_APDU, G_gpg_vstate.io_length); @@ -330,7 +326,7 @@ int gpg_io_do(unsigned int io_flags) { while (G_gpg_vstate.io_cla & 0x10) { G_io_apdu_buffer[0] = 0x90; G_io_apdu_buffer[1] = 0x00; - rx = gpg_io_exchange(CHANNEL_APDU, 2); + rx = io_exchange(CHANNEL_APDU, 2); in_chaining: if ((rx < 4) || ((G_io_apdu_buffer[0] & 0xEF) != (G_gpg_vstate.io_cla & 0xEF)) || (G_io_apdu_buffer[1] != G_gpg_vstate.io_ins) || diff --git a/src/gpg_main.c b/src/gpg_main.c index 65f8d5f..8609b78 100644 --- a/src/gpg_main.c +++ b/src/gpg_main.c @@ -13,19 +13,9 @@ * limitations under the License. */ -#ifndef GPG_DEBUG_MAIN - -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" - #include "gpg_ux_nanos.h" - -#include "os_io_seproxyhal.h" -#include "string.h" -#include "glyphs.h" +#include "usbd_ccid_if.h" /* ----------------------------------------------------------------------- */ /* --- Application Entry --- */ @@ -188,5 +178,3 @@ __attribute__((section(".boot"))) int main(void) { } app_exit(); } - -#endif diff --git a/src/gpg_mse.c b/src/gpg_mse.c index 831e338..8406462 100644 --- a/src/gpg_mse.c +++ b/src/gpg_mse.c @@ -13,10 +13,6 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" static int gpg_mse_set(int crt, int ref) { diff --git a/src/gpg_nvram.c b/src/gpg_nvram.c index a7af005..b10dc62 100644 --- a/src/gpg_nvram.c +++ b/src/gpg_nvram.c @@ -13,10 +13,6 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" #ifndef TARGET_NANOS diff --git a/src/gpg_pin.c b/src/gpg_pin.c index 6b5b712..2ae8474 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -13,12 +13,7 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" - #include "gpg_ux_nanos.h" gpg_pin_t *gpg_pin_get_pin(int pinref) { @@ -57,7 +52,7 @@ static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pi } counter = pin->counter - 1; - gpg_nvm_write(&(pin->counter), &counter, sizeof(int)); + nvm_write(&(pin->counter), &counter, sizeof(int)); cx_sha256_init(&G_gpg_vstate.work.md.sha256); CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, CX_LAST, @@ -70,7 +65,7 @@ static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pi } counter = 3; - gpg_nvm_write(&(pin->counter), &counter, sizeof(int)); + nvm_write(&(pin->counter), &counter, sizeof(int)); return SW_OK; end: if (error != CX_OK) { @@ -111,7 +106,7 @@ void gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len) { newpin.length = pin_len; newpin.counter = 3; - gpg_nvm_write(pin, &newpin, sizeof(gpg_pin_t)); + nvm_write(pin, &newpin, sizeof(gpg_pin_t)); end: if (error != CX_OK) { THROW(error); diff --git a/src/gpg_pso.c b/src/gpg_pso.c index c09f7bf..226ee75 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -13,10 +13,6 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" #include "gpg_ux_nanos.h" #include "cx_errors.h" diff --git a/src/gpg_ram.c b/src/gpg_ram.c index 721d55c..e2d9484 100644 --- a/src/gpg_ram.c +++ b/src/gpg_ram.c @@ -13,12 +13,7 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" -#include "os_io_seproxyhal.h" #ifndef TARGET_NANOS #include "ux.h" @@ -28,12 +23,7 @@ bolos_ux_params_t G_ux_params; ux_state_t ux; #endif -#ifndef GPG_DEBUG_MAIN unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; -#else -extern unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; -int apdu_n; -#endif gpg_v_state_t G_gpg_vstate; diff --git a/src/gpg_select.c b/src/gpg_select.c index 0285fb1..ae577d8 100644 --- a/src/gpg_select.c +++ b/src/gpg_select.c @@ -13,11 +13,8 @@ * limitations under the License. */ -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" + const unsigned char C_MF[] = {0x3F, 0x00}; int gpg_apdu_select() { diff --git a/src/gpg_types.h b/src/gpg_types.h index 27b7bb2..2672892 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -16,8 +16,7 @@ #ifndef GPG_TYPES_H #define GPG_TYPES_H -#include "os_io_seproxyhal.h" -#include "ux.h" +#include "lcx_sha3.h" /* cannot send more that F0 bytes in CCID, why? do not know for now * So set up length to F0 minus 2 bytes for SW @@ -280,9 +279,6 @@ struct gpg_v_state_s { #ifdef GPG_LOG unsigned char log_buffer[32]; #endif -#ifdef GPG_DEBUG - unsigned char print; -#endif }; typedef struct gpg_v_state_s gpg_v_state_t; diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index a66a583..5af5994 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -15,17 +15,9 @@ #ifdef UI_NANO_S -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" - #include "gpg_ux_msg.h" -#include "os_io_seproxyhal.h" -#include "usbd_ccid_impl.h" -#include "string.h" -#include "glyphs.h" +#include "usbd_ccid_if.h" /* ----------------------------------------------------------------------- */ /* --- NanoS UI layout --- */ @@ -585,7 +577,7 @@ const ux_menu_entry_t ui_menu_template[] = { {ui_menu_tmpl_key, NULL, -1, NULL, "Choose key...", NULL, 0, 0}, {ui_menu_tmpl_type, NULL, -1, NULL, "Choose type...", NULL, 0, 0}, {NULL, ui_menu_tmpl_set_action, -1, NULL, "Set template", NULL, 0, 0}, - {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + {ui_menu_settings, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; void ui_menu_template_display(unsigned int value) { @@ -736,8 +728,8 @@ void ui_menu_tmpl_set_action(unsigned int value) { goto ERROR; } - gpg_nvm_write(dest, NULL, sizeof(gpg_key_t)); - gpg_nvm_write(&dest->attributes, &attributes, sizeof(attributes)); + nvm_write(dest, NULL, sizeof(gpg_key_t)); + nvm_write(&dest->attributes, &attributes, sizeof(attributes)); ui_info(OK, NULL, ui_menu_template_display, 0); return; @@ -749,7 +741,7 @@ const ux_menu_entry_t ui_menu_tmpl_key[] = { {NULL, ui_menu_tmpl_key_action, 1, NULL, LABEL_SIG, NULL, 0, 0}, {NULL, ui_menu_tmpl_key_action, 2, NULL, LABEL_DEC, NULL, 0, 0}, {NULL, ui_menu_tmpl_key_action, 3, NULL, LABEL_AUT, NULL, 0, 0}, - {ui_menu_template, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; void ui_menu_tmpl_key_action(unsigned int value) { @@ -771,7 +763,7 @@ const ux_menu_entry_t ui_menu_tmpl_type[] = { // CX_CURVE_BrainPoolP384R1, NULL, LABEL_BPOOL384R1, NULL, 0, 0}, {NULL, // ui_menu_tmpl_type_action, CX_CURVE_BrainPoolP512R1, NULL, LABEL_BPOOL512R1, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, CX_CURVE_Ed25519, NULL, LABEL_Ed25519, NULL, 0, 0}, - {ui_menu_template, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; void ui_menu_tmpl_type_action(unsigned int value) { @@ -785,7 +777,7 @@ const ux_menu_entry_t ui_menu_seed[] = { {NULL, NULL, 0, NULL, "", NULL, 0, 0}, {NULL, ui_menu_seed_action, 1, NULL, "Set on", NULL, 0, 0}, {NULL, ui_menu_seed_action, 0, NULL, "Set off", NULL, 0, 0}, - {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + {ui_menu_settings, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; void ui_menu_seed_display(unsigned int value) { @@ -825,7 +817,7 @@ const ux_menu_entry_t ui_menu_pinmode[] = { {NULL, ui_menu_pinmode_action, 0x8000 | PIN_MODE_CONFIRM, NULL, "Confirm only", NULL, 0, 0}, {NULL, ui_menu_pinmode_action, 0x8000 | PIN_MODE_TRUST, NULL, "Trust", NULL, 0, 0}, {NULL, ui_menu_pinmode_action, 128, NULL, "Set Default", NULL, 0, 0}, - {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + {ui_menu_settings, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; void ui_menu_pinmode_display(unsigned int value) { @@ -862,15 +854,14 @@ void ui_menu_pinmode_action(unsigned int value) { } // set new mode s = G_gpg_vstate.pinmode; - gpg_nvm_write(&N_gpg_pstate->config_pin[0], &s, 1); + nvm_write((void *) (&N_gpg_pstate->config_pin[0]), &s, 1); // disactivate pinpad if any if (G_gpg_vstate.pinmode == PIN_MODE_HOST) { s = 0; } else { s = 3; } - // #warning USBD_CCID_activate_pinpad commented - USBD_CCID_activate_pinpad(s); + gpg_activate_pinpad(s); } } else { switch (value) { @@ -911,7 +902,7 @@ const ux_menu_entry_t ui_menu_uifmode[] = { {NULL, ui_menu_uifmode_action, 1, NULL, "Signature", NULL, 0, 0}, {NULL, ui_menu_uifmode_action, 2, NULL, "Decryption", NULL, 0, 0}, {NULL, ui_menu_uifmode_action, 3, NULL, "Authentication", NULL, 0, 0}, - {ui_menu_settings, NULL, 0, &C_badge_back, "Back", NULL, 61, 40}, + {ui_menu_settings, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; void ui_menu_uifmode_display(unsigned int value) { @@ -967,10 +958,10 @@ void ui_menu_uifmode_action(unsigned int value) { } if (uif[0] == 0) { new_uif = 1; - gpg_nvm_write(&uif[0], &new_uif, 1); + nvm_write(&uif[0], &new_uif, 1); } else if (uif[0] == 1) { new_uif = 0; - gpg_nvm_write(&uif[0], &new_uif, 1); + nvm_write(&uif[0], &new_uif, 1); } else /*if (uif[0] == 2 )*/ { ui_info(UIF_LOCKED, NULL, ui_menu_uifmode_display, 0); return; @@ -982,7 +973,7 @@ void ui_menu_uifmode_action(unsigned int value) { const ux_menu_entry_t ui_menu_reset[] = { {NULL, NULL, 0, NULL, "Really Reset ?", NULL, 0, 0}, - {NULL, ui_menu_main_display, 0, &C_badge_back, "No", NULL, 61, 40}, + {NULL, ui_menu_main_display, 0, &C_icon_back, "No", NULL, 61, 40}, {NULL, ui_menu_reset_action, 0, NULL, "Yes", NULL, 0, 0}, UX_MENU_END}; @@ -993,7 +984,7 @@ void ui_menu_reset_action(unsigned int value) { magic[1] = 0; magic[2] = 0; magic[3] = 0; - gpg_nvm_write(N_gpg_pstate->magic, magic, 4); + nvm_write((void *) (N_gpg_pstate->magic), magic, 4); gpg_init(); ui_CCID_reset(); ui_menu_main_display(0); @@ -1004,7 +995,7 @@ void ui_menu_reset_slot_action(unsigned int value); const ux_menu_entry_t ui_menu_reset_slot[] = { {NULL, NULL, 0, NULL, "Really Reset ?", NULL, 0, 0}, - {NULL, ui_menu_main_display, 0, &C_badge_back, "No", NULL, 61, 40}, + {NULL, ui_menu_main_display, 0, &C_icon_back, "No", NULL, 61, 40}, {NULL, ui_menu_reset_slot_action, 0, NULL, "Yes", NULL, 0, 0}, UX_MENU_END}; @@ -1023,7 +1014,7 @@ const ux_menu_entry_t ui_menu_settings[] = { {NULL, ui_menu_uifmode_display, 0, NULL, "UIF mode", NULL, 0, 0}, {ui_menu_reset, NULL, 0, NULL, "Reset App", NULL, 0, 0}, {ui_menu_reset_slot, NULL, 0, NULL, "Reset Slot", NULL, 0, 0}, - {NULL, ui_menu_main_display, 2, &C_badge_back, "Back", NULL, 61, 40}, + {NULL, ui_menu_main_display, 2, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; /* --------------------------------- SLOT UX --------------------------------- */ @@ -1039,7 +1030,7 @@ const ux_menu_entry_t ui_menu_slot[] = { {NULL, ui_menu_slot_action, 2, NULL, "", NULL, 0, 0}, {NULL, ui_menu_slot_action, 3, NULL, "", NULL, 0, 0}, {NULL, ui_menu_slot_action, 128, NULL, "Set Default", NULL, 0, 0}, - {NULL, ui_menu_main_display, 1, &C_badge_back, "Back", NULL, 61, 40}, + {NULL, ui_menu_main_display, 1, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; void ui_menu_slot_display(unsigned int value) { UX_MENU_DISPLAY(value, ui_menu_slot, ui_menu_slot_preprocessor); @@ -1071,7 +1062,7 @@ void ui_menu_slot_action(unsigned int value) { if (value == 128) { s = G_gpg_vstate.slot; - gpg_nvm_write(&N_gpg_pstate->config_slot[1], &s, 1); + nvm_write((void *) (&N_gpg_pstate->config_slot[1]), &s, 1); value = s + 1; } else { s = (unsigned char) (value - 1); @@ -1096,8 +1087,8 @@ const ux_menu_entry_t ui_menu_info[] = { {NULL, NULL, -1, NULL, "OpenPGP Card", NULL, 0, 0}, {NULL, NULL, -1, NULL, "(c) Ledger SAS", NULL, 0, 0}, {NULL, NULL, -1, NULL, "Spec " XSTR(SPEC_VERSION), NULL, 0, 0}, - {NULL, NULL, -1, NULL, "App " XSTR(OPENPGP_VERSION), NULL, 0, 0}, - {NULL, ui_menu_main_display, 3, &C_badge_back, "Back", NULL, 61, 40}, + {NULL, NULL, -1, NULL, "App " XSTR(APPVERSION), NULL, 0, 0}, + {NULL, ui_menu_main_display, 3, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; #undef STR @@ -1119,7 +1110,7 @@ const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, if (entry == &ui_menu_main[0]) { if (element->component.userid == 0x21) { memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); - memmove(G_gpg_vstate.menu, N_gpg_pstate->name.value, 12); + memmove(G_gpg_vstate.menu, (void *) (N_gpg_pstate->name.value), 12); if (G_gpg_vstate.menu[0] == 0) { memmove(G_gpg_vstate.menu, "", 9); } else { diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 227d842..0bd621c 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -15,17 +15,9 @@ #ifdef UI_NANO_X -#include "os.h" -#include "cx.h" -#include "gpg_types.h" -#include "gpg_api.h" #include "gpg_vars.h" - #include "gpg_ux_msg.h" -#include "os_io_seproxyhal.h" -#include "usbd_ccid_impl.h" -#include "string.h" -#include "glyphs.h" +#include "usbd_ccid_if.h" /* ----------------------------------------------------------------------- */ /* --- NanoS UI layout --- */ @@ -590,7 +582,7 @@ UX_STEP_CB(ux_menu_template_4_step, pb, ui_menu_settings_display(0), { - &C_icon_back, + &C_icon_back_x, "Back", }); @@ -709,8 +701,8 @@ void ui_menu_tmpl_set_action(unsigned int value) { goto ERROR; } - gpg_nvm_write(dest, NULL, sizeof(gpg_key_t)); - gpg_nvm_write(&dest->attributes, &attributes, sizeof(attributes)); + nvm_write(dest, NULL, sizeof(gpg_key_t)); + nvm_write(&dest->attributes, &attributes, sizeof(attributes)); ui_info(OK, NULL, ui_menu_template_display, 0); return; @@ -749,7 +741,7 @@ UX_STEP_CB(ux_menu_seedmode_2_step, pb, ui_menu_settings_display(1), { - &C_icon_back, + &C_icon_back_x, "Back", }); @@ -821,7 +813,7 @@ UX_STEP_CB(ux_menu_pinmode_7_step, pb, ui_menu_settings_display(2), { - &C_icon_back, + &C_icon_back_x, "Back", }); @@ -876,15 +868,14 @@ void ui_menu_pinmode_action(unsigned int value) { } // set new mode s = G_gpg_vstate.pinmode; - gpg_nvm_write((void *) (&N_gpg_pstate->config_pin[0]), &s, 1); + nvm_write((void *) (&N_gpg_pstate->config_pin[0]), &s, 1); // disactivate pinpad if any if (G_gpg_vstate.pinmode == PIN_MODE_HOST) { s = 0; } else { s = 3; } - // #warning USBD_CCID_activate_pinpad commented - USBD_CCID_activate_pinpad(s); + gpg_activate_pinpad(s); value = G_gpg_vstate.pinmode; } } else { @@ -961,7 +952,7 @@ UX_STEP_CB(ux_menu_uif_4_step, pb, ui_menu_settings_display(3), { - &C_icon_back, + &C_icon_back_x, "Back", }); @@ -1004,10 +995,10 @@ void ui_menu_uifmode_action(unsigned int value) { } if (uif[0] == 0) { new_uif = 1; - gpg_nvm_write(&uif[0], &new_uif, 1); + nvm_write(&uif[0], &new_uif, 1); } else if (uif[0] == 1) { new_uif = 0; - gpg_nvm_write(&uif[0], &new_uif, 1); + nvm_write(&uif[0], &new_uif, 1); } else /*if (uif[0] == 2 )*/ { ui_info(UIF_LOCKED, NULL, ui_menu_uifmode_display, 0); return; @@ -1039,7 +1030,7 @@ void ui_menu_reset_action(unsigned int value) { magic[1] = 0; magic[2] = 0; magic[3] = 0; - gpg_nvm_write((void *) (N_gpg_pstate->magic), magic, 4); + nvm_write((void *) (N_gpg_pstate->magic), magic, 4); gpg_init(); ui_CCID_reset(); ui_menu_main_display(0); @@ -1147,7 +1138,7 @@ UX_STEP_CB(ux_menu_slot_5_step, pn, ui_menu_main_display(1), { - &C_icon_back, + &C_icon_back_x, "Back", }); @@ -1189,7 +1180,7 @@ void ui_menu_slot_action(unsigned int value) { if (value == 128) { s = G_gpg_vstate.slot; - gpg_nvm_write((void *) &N_gpg_pstate->config_slot[1], &s, 1); + nvm_write((void *) &N_gpg_pstate->config_slot[1], &s, 1); } else { s = (unsigned char) (value - 1); if (s != G_gpg_vstate.slot) { @@ -1214,14 +1205,14 @@ UX_STEP_NOCB(ux_menu_info_1_step, "OpenPGP Card", "(c) Ledger SAS", "Spec " XSTR(SPEC_VERSION), - "App " XSTR(OPENPGP_VERSION), + "App " XSTR(APPVERSION), }); UX_STEP_CB(ux_menu_info_2_step, pb, ui_menu_main_display(0), { - &C_icon_back, + &C_icon_back_x, "Back", }); @@ -1242,7 +1233,7 @@ UX_STEP_NOCB_INIT(ux_menu_main_1_step, pnn, ui_menu_main_predisplay(), { - &C_icon_pgp, + &C_gpg_16px, G_gpg_vstate.ux_buff1, G_gpg_vstate.ux_buff2, }); diff --git a/src/gpg_vars.h b/src/gpg_vars.h index a497c8a..82c7ccb 100644 --- a/src/gpg_vars.h +++ b/src/gpg_vars.h @@ -19,7 +19,6 @@ #include "os.h" #include "cx.h" #include "ux.h" -#include "os_io_seproxyhal.h" #include "gpg_types.h" #include "gpg_api.h" @@ -42,10 +41,6 @@ extern gpg_nv_state_t N_state_pic; #define N_gpg_pstate ((WIDE gpg_nv_state_t *) PIC(&N_state_pic)) #endif -#ifdef GPG_DEBUG_MAIN -extern int apdu_n; -#endif - extern ux_state_t ux; #ifdef HAVE_RSA diff --git a/src/sdk/usbd_ccid_cmd.c b/src/sdk/usbd_ccid_cmd.c deleted file mode 100755 index f8d36ed..0000000 --- a/src/sdk/usbd_ccid_cmd.c +++ /dev/null @@ -1,1057 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_ccid_cmd.c - * @author MCD Application Team - * @version V1.0.1 - * @date 31-January-2014 - * @brief CCID Commands handling - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2014 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -#pragma message "Override SDK source file :" __FILE__ - -#ifdef HAVE_USB_CLASS_CCID - - -/* Includes ------------------------------------------------------------------*/ -#include "usbd_ccid_cmd.h" - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -#define CCID_UpdateCommandStatus(cmd_status,icc_status)\ - G_io_ccid.bulk_header.bulkin.bStatus=(cmd_status|icc_status) - /* - The Above Macro can take any of following Values - #define BM_ICC_PRESENT_ACTIVE 0x00 - #define BM_ICC_PRESENT_INACTIVE 0x01 - #define BM_ICC_NO_ICC_PRESENT 0x02 - - #define BM_COMMAND_STATUS_OFFSET 0x06 - #define BM_COMMAND_STATUS_NO_ERROR 0x00 - #define BM_COMMAND_STATUS_FAILED (0x01 << BM_COMMAND_STATUS_OFFSET) - #define BM_COMMAND_STATUS_TIME_EXTN (0x02 << BM_COMMAND_STATUS_OFFSET) - */ - -/* Private function prototypes -----------------------------------------------*/ -static uint8_t CCID_CheckCommandParams (uint32_t param_type); - -/* Private functions ---------------------------------------------------------*/ - -/** - * @brief PC_to_RDR_IccPowerOn - * PC_TO_RDR_ICCPOWERON message execution, apply voltage and get ATR - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_IccPowerOn(void) -{ - /* Apply the ICC VCC - Fills the Response buffer with ICC ATR - This Command is returned with RDR_to_PC_DataBlock(); - */ - - uint8_t voltage; - uint8_t sc_voltage = 0; - uint8_t error; - - G_io_ccid.bulk_header.bulkin.dwLength = 0; /* Reset Number of Bytes in abData */ - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_DWLENGTH | \ - CHK_PARAM_abRFU2 |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_ABORT ); - if (error != 0) - { - return error; - } - - /* Voltage that is applied to the ICC - 00h – Automatic Voltage Selection - 01h – 5.0 volts - 02h – 3.0 volts - 03h – 1.8 volts - */ - /* G_io_ccid.bulk_header.bulkout.bSpecific_0 Contains bPowerSelect */ - voltage = G_io_ccid.bulk_header.bulkout.bSpecific_0; - if (voltage >= VOLTAGE_SELECTION_1V8) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - return SLOTERROR_BAD_POWERSELECT; /* The Voltage specified is out of Spec */ - } - - /* Correct Voltage Requested by the Host */ - if ((voltage == VOLTAGE_SELECTION_AUTOMATIC) || - (voltage == VOLTAGE_SELECTION_3V)) - { - /* voltage == 00 Voltage Automatic - voltage == 01 Voltage Automatic = 5.0V - voltage == 02 Voltage Automatic = 3V - voltage == 03 Voltage Automatic = 1.8V - */ - sc_voltage = SC_VOLTAGE_3V; - } - else if (voltage == VOLTAGE_SELECTION_5V) - { - sc_voltage = SC_VOLTAGE_5V; - } - - G_io_ccid.bulk_header.bulkin.dwLength = SC_AnswerToReset(sc_voltage, G_io_ccid_data_buffer); - - /* Check if the Card has come to Active State*/ - error = CCID_CheckCommandParams(CHK_ACTIVE_STATE); - if (error != 0) - { - /* Check if Voltage is not Automatic */ - if (voltage != 0) - { /* If Specific Voltage requested by Host i.e 3V or 5V*/ - return error; - } - else - {/* Automatic Voltage selection requested by Host */ - - if (sc_voltage != SC_VOLTAGE_5V) - { /* If voltage selected was Automatic and 5V is not yet tried */ - sc_voltage = SC_VOLTAGE_5V; - G_io_ccid.bulk_header.bulkin.dwLength = SC_AnswerToReset(sc_voltage, G_io_ccid_data_buffer); - - /* Check again the State */ - error = CCID_CheckCommandParams(CHK_ACTIVE_STATE); - if (error != 0) - return error; - - } - else - { /* Voltage requested from Host was 5V already*/ - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_INACTIVE); - return error; - } - } /* Voltage Selection was automatic */ - } /* If Active State */ - - /* ATR is received, No Error Condition Found */ - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - - return SLOT_NO_ERROR; -} - -/** - * @brief PC_to_RDR_IccPowerOff - * Icc VCC is switched Off - * @param None - * @retval uint8_t error: status of the command execution - */ -uint8_t PC_to_RDR_IccPowerOff(void) -{ - /* The response to this command message is the RDR_to_PC_SlotStatus - response message. */ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_abRFU3 |\ - CHK_PARAM_DWLENGTH ); - if (error != 0) - { - return error; - } - - /* Command is ok, Check for Card Presence */ - if (SC_Detect()) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR,BM_ICC_PRESENT_INACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR,BM_ICC_NO_ICC_PRESENT); - } - - /* Power OFF the card */ - SC_Poweroff(); - - return SLOT_NO_ERROR; -} - -/** - * @brief PC_to_RDR_GetSlotStatus - * Provides the Slot status to the host - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_GetSlotStatus(void) -{ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_DWLENGTH |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU3 ); - if (error != 0) - { - return error; - } - - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR,BM_ICC_PRESENT_ACTIVE); - return SLOT_NO_ERROR; -} - - -/** - * @brief PC_to_RDR_XfrBlock - * Handles the Block transfer from Host. - * Response to this command message is the RDR_to_PC_DataBlock - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_XfrBlock(void) -{ - uint16_t expectedLength, reqlen; - - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU3 |\ - CHK_PARAM_ABORT |\ - CHK_ACTIVE_STATE ); - if (error != 0) - return error; - - if (G_io_ccid.bulk_header.bulkout.dwLength > IO_CCID_DATA_BUFFER_SIZE) - { /* Check amount of Data Sent by Host is > than memory allocated ? */ - - return SLOTERROR_BAD_DWLENGTH; - } - - - /* wLevelParameter = Size of expected data to be returned by the - bulk-IN endpoint */ - expectedLength = (G_io_ccid.bulk_header.bulkout.bSpecific_2 << 8) | - G_io_ccid.bulk_header.bulkout.bSpecific_1; - - reqlen = G_io_ccid.bulk_header.bulkout.dwLength; - - G_io_ccid.bulk_header.bulkin.dwLength = (uint16_t)expectedLength; - - - error = SC_XferBlock(&G_io_ccid_data_buffer[0], - reqlen, - &expectedLength); - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - error = SLOT_NO_ERROR; - } - - return error; -} - - -/** - * @brief PC_to_RDR_GetParameters - * Provides the ICC parameters to the host - * Response to this command message is the RDR_to_PC_Parameters - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_GetParameters(void) -{ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_DWLENGTH |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU3 ); - if (error != 0) - return error; - - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - - return SLOT_NO_ERROR; -} - - -/** - * @brief PC_to_RDR_ResetParameters - * Set the ICC parameters to the default - * Response to this command message is the RDR_to_PC_Parameters - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_ResetParameters(void) -{ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_DWLENGTH |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU3 |\ - CHK_ACTIVE_STATE); - if (error != 0) - return error; - - /* This command resets the slot parameters to their default values */ - G_io_ccid.Protocol0_DataStructure.bmFindexDindex = DEFAULT_FIDI; - G_io_ccid.Protocol0_DataStructure.bmTCCKST0 = DEFAULT_T01CONVCHECKSUM; - G_io_ccid.Protocol0_DataStructure.bGuardTimeT0 = DEFAULT_EXTRA_GUARDTIME; - G_io_ccid.Protocol0_DataStructure.bWaitingIntegerT0 = DEFAULT_WAITINGINTEGER; - G_io_ccid.Protocol0_DataStructure.bClockStop = DEFAULT_CLOCKSTOP; - - error = SC_SetParams(&G_io_ccid.Protocol0_DataStructure); - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - error = SLOT_NO_ERROR; - } - - return error; -} - - -/** - * @brief PC_to_RDR_SetParameters - * Set the ICC parameters to the host defined parameters - * Response to this command message is the RDR_to_PC_Parameters - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_SetParameters(void) -{ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU2 |\ - CHK_ACTIVE_STATE); - if (error != 0) - return error; - - error = SLOT_NO_ERROR; - - /* for Protocol T=0 (bProtocolNum=0) (dwLength=00000005h) */ - if ( (G_io_ccid.bulk_header.bulkout.dwLength == 5) && - (G_io_ccid.bulk_header.bulkout.bSpecific_0 != 0)) - error = SLOTERROR_BAD_PROTOCOLNUM; - - /* for Protocol T=1 (bProtocolNum=1) (dwLength=00000007h) */ - if ( (G_io_ccid.bulk_header.bulkout.dwLength == 7) && - (G_io_ccid.bulk_header.bulkout.bSpecific_0 != 1)) - error = SLOTERROR_CMD_NOT_SUPPORTED; - - /* For T0, Waiting Integer 0 supported */ - if (G_io_ccid_data_buffer[3] != 0) - error = SLOTERROR_BAD_WAITINGINTEGER; - - if (G_io_ccid_data_buffer[4] != DEFAULT_CLOCKSTOP) - error = SLOTERROR_BAD_CLOCKSTOP; - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - - os_memmove(&G_io_ccid.Protocol0_DataStructure, (Protocol0_DataStructure_t*)(&(G_io_ccid_data_buffer[0])), sizeof(Protocol0_DataStructure_t)); - error = SC_SetParams(&G_io_ccid.Protocol0_DataStructure); - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - error = SLOT_NO_ERROR; - } - - return error; -} - - -/** - * @brief PC_to_RDR_Escape - * Execute the Escape command. This is user specific Implementation - * Response to this command message is the RDR_to_PC_Escape - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_Escape(void) -{ - uint8_t error; - uint16_t size; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU3 |\ - CHK_PARAM_ABORT |\ - CHK_ACTIVE_STATE); - - if (error != 0) - return error; - - error = SC_ExecuteEscape(&G_io_ccid_data_buffer[0], - G_io_ccid.bulk_header.bulkout.dwLength, - &G_io_ccid_data_buffer[0], - &size); - - G_io_ccid.bulk_header.bulkin.dwLength = size; - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - } - - return error; -} - - -/** - * @brief PC_to_RDR_IccClock - * Execute the Clock specific command from host - * Response to this command message is the RDR_to_PC_SlotStatus - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_IccClock(void) -{ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU2 |\ - CHK_PARAM_DWLENGTH|\ - CHK_ACTIVE_STATE); - if (error != 0) - return error; - - /* bClockCommand • 00h restarts Clock - • 01h Stops Clock in the state shown in the bClockStop - field of the PC_to_RDR_SetParameters command - and RDR_to_PC_Parameters message.*/ - if (G_io_ccid.bulk_header.bulkout.bSpecific_0 > 1) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - return SLOTERROR_BAD_CLOCKCOMMAND; - } - - error = SC_SetClock(G_io_ccid.bulk_header.bulkout.bSpecific_0); - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - } - - return error; -} - - -/** - * @brief PC_to_RDR_Abort - * Execute the Abort command from host, This stops all Bulk transfers - * from host and ICC - * Response to this command message is the RDR_to_PC_SlotStatus - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_to_RDR_Abort(void) -{ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_abRFU3 |\ - CHK_PARAM_DWLENGTH); - if (error != 0) - return error; - - CCID_CmdAbort (G_io_ccid.bulk_header.bulkout.bSlot, G_io_ccid.bulk_header.bulkout.bSeq); - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR,BM_ICC_PRESENT_ACTIVE); - return SLOT_NO_ERROR; -} - -/** - * @brief CCID_CmdAbort - * Execute the Abort command from Bulk EP or from Control EP, - * This stops all Bulk transfers from host and ICC - * @param uint8_t slot: slot number that host wants to abort - * @param uint8_t seq : Seq number for PC_to_RDR_Abort - * @retval uint8_t status of the command execution - */ -uint8_t CCID_CmdAbort(uint8_t slot, uint8_t seq) -{ - /* This function is called for REQUEST_ABORT & PC_to_RDR_Abort */ - - if (slot >= CCID_NUMBER_OF_SLOTS) - { /* This error condition is possible only from CLASS_REQUEST, otherwise - Slot is already checked in parameters from PC_to_RDR_Abort request */ - /* Slot requested is more than supported by Firmware */ - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_NO_ICC_PRESENT); - return SLOTERROR_BAD_SLOT; - } - - if ( G_io_ccid.usb_ccid_param.bAbortRequestFlag == 1) - { /* Abort Command was already received from ClassReq or PC_to_RDR */ - if (( G_io_ccid.usb_ccid_param.bSeq == seq) && (G_io_ccid.usb_ccid_param.bSlot == slot)) - { - /* CLASS Specific request is already Received, Reset the abort flag */ - G_io_ccid.usb_ccid_param.bAbortRequestFlag = 0; - } - } - else - { - /* Abort Command was NOT received from ClassReq or PC_to_RDR, - so save them for next ABORT command to verify */ - G_io_ccid.usb_ccid_param.bAbortRequestFlag = 1; - G_io_ccid.usb_ccid_param.bSeq = seq ; - G_io_ccid.usb_ccid_param.bSlot = slot; - } - - return 0; -} - -/** - * @brief PC_TO_RDR_T0Apdu - * Execute the PC_TO_RDR_T0APDU command from host - * Response to this command message is the RDR_to_PC_SlotStatus - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_TO_RDR_T0Apdu(void) -{ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_DWLENGTH | - CHK_PARAM_ABORT ); - if (error != 0) - return error; - - if (G_io_ccid.bulk_header.bulkout.bSpecific_0 > 0x03) - {/* Bit 0 is associated with field bClassGetResponse - Bit 1 is associated with field bClassEnvelope - Other bits are RFU.*/ - - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - return SLOTERROR_BAD_BMCHANGES; - } - - error = SC_T0Apdu(G_io_ccid.bulk_header.bulkout.bSpecific_0, - G_io_ccid.bulk_header.bulkout.bSpecific_1, - G_io_ccid.bulk_header.bulkout.bSpecific_2); - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - } - - return error; -} - -/** - * @brief PC_TO_RDR_Mechanical - * Execute the PC_TO_RDR_MECHANICAL command from host - * Response to this command message is the RDR_to_PC_SlotStatus - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_TO_RDR_Mechanical(void) -{ - uint8_t error; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU2 |\ - CHK_PARAM_DWLENGTH - ); - if (error != 0) - return error; - - if (G_io_ccid.bulk_header.bulkout.bSpecific_0 > 0x05) - {/* 01h – Accept Card - 02h – Eject Card - 03h – Capture Card - 04h – Lock Card - 05h – Unlock Card*/ - - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - return SLOTERROR_BAD_BFUNCTION_MECHANICAL; - } - - error = SC_Mechanical(G_io_ccid.bulk_header.bulkout.bSpecific_0); - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - } - - return error; -} - -/** - * @brief PC_TO_RDR_SetDataRateAndClockFrequency - * Set the required Card Frequency and Data rate from the host. - * Response to this command message is the - * RDR_to_PC_DataRateAndClockFrequency - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_TO_RDR_SetDataRateAndClockFrequency(void) -{ - uint8_t error; - uint32_t clockFrequency; - uint32_t dataRate; - uint32_t temp =0; - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_abRFU3); - if (error != 0) - return error; - - if (G_io_ccid.bulk_header.bulkout.dwLength != 0x08) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_PRESENT_ACTIVE); - return SLOTERROR_BAD_LENTGH; - } - - /* HERE we avoiding to an unaligned memory access*/ - clockFrequency = U4LE(G_io_ccid_data_buffer, 0); - dataRate = U4LE(G_io_ccid_data_buffer, 4); - - error = SC_SetDataRateAndClockFrequency(clockFrequency, dataRate); - G_io_ccid.bulk_header.bulkin.bError = error; - - if (error != SLOT_NO_ERROR) - { - G_io_ccid.bulk_header.bulkin.dwLength = 0; - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - G_io_ccid.bulk_header.bulkin.dwLength = 8; - - (G_io_ccid_data_buffer[0]) = clockFrequency & 0x000000FF ; - (G_io_ccid_data_buffer[1]) = (clockFrequency & 0x0000FF00) >> 8; - (G_io_ccid_data_buffer[2]) = (clockFrequency & 0x00FF0000) >> 16; - (G_io_ccid_data_buffer[3]) = (clockFrequency & 0xFF000000) >> 24; - (G_io_ccid_data_buffer[4]) = dataRate & 0x000000FF ; - (G_io_ccid_data_buffer[5]) = (dataRate & 0x0000FF00) >> 8; - (G_io_ccid_data_buffer[6]) = (dataRate & 0x00FF0000) >> 16; - (G_io_ccid_data_buffer[7]) = (dataRate & 0xFF000000) >> 24; - - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - } - - return error; -} - -/** - * @brief PC_TO_RDR_Secure - * Execute the Secure Command from the host. - * Response to this command message is the RDR_to_PC_DataBlock - * @param None - * @retval uint8_t status of the command execution - */ -uint8_t PC_TO_RDR_Secure(void) -{ - uint8_t error; - uint8_t bBWI; - uint16_t wLevelParameter; - uint32_t responseLen; - - - error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\ - CHK_PARAM_CARD_PRESENT |\ - CHK_PARAM_ABORT ); - - if (error != 0) { - G_io_ccid.bulk_header.bulkin.dwLength = 0; - return error; - } - - bBWI = G_io_ccid.bulk_header.bulkout.bSpecific_0; - wLevelParameter = (G_io_ccid.bulk_header.bulkout.bSpecific_1 + ((uint16_t)G_io_ccid.bulk_header.bulkout.bSpecific_2<<8)); - - if ((EXCHANGE_LEVEL_FEATURE == TPDU_EXCHANGE) || - (EXCHANGE_LEVEL_FEATURE == SHORT_APDU_EXCHANGE)) - { - /* TPDU level & short APDU level, wLevelParameter is RFU, = 0000h */ - if (wLevelParameter != 0 ) - { - G_io_ccid.bulk_header.bulkin.dwLength = 0; - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - error = SLOTERROR_BAD_LEVELPARAMETER; - return error; - } - } - - error = SC_Secure(G_io_ccid.bulk_header.bulkout.dwLength - CCID_HEADER_SIZE, bBWI, wLevelParameter, - &G_io_ccid_data_buffer[0], &responseLen); - - G_io_ccid.bulk_header.bulkin.dwLength = responseLen; - - if (error != SLOT_NO_ERROR) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE); - } - else - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE); - } - - return error; -} - -/******************************************************************************/ -/* BULK IN ROUTINES */ -/******************************************************************************/ - -/** - * @brief RDR_to_PC_DataBlock - * Provide the data block response to the host - * Response for PC_to_RDR_IccPowerOn, PC_to_RDR_XfrBlock - * @param uint8_t errorCode: code to be returned to the host - * @retval None - */ -void RDR_to_PC_DataBlock(uint8_t errorCode) -{ - G_io_ccid.bulk_header.bulkin.bMessageType = RDR_TO_PC_DATABLOCK; - G_io_ccid.bulk_header.bulkin.bError = errorCode; - G_io_ccid.bulk_header.bulkin.bSpecific=0; /* bChainParameter */ - - /* void the Length Specified in Command */ - if(errorCode != SLOT_NO_ERROR) - { - G_io_ccid.bulk_header.bulkin.dwLength = 0; - } - - Transfer_Data_Request(); - -} - - -/** - * @brief RDR_to_PC_SlotStatus - * Provide the Slot status response to the host - * Response for PC_to_RDR_IccPowerOff - * PC_to_RDR_GetSlotStatus - * PC_to_RDR_IccClock - * PC_to_RDR_T0APDU - * PC_to_RDR_Mechanical - * Also the device sends this response message when it has completed - * aborting a slot after receiving both the Class Specific ABORT request - * and PC_to_RDR_Abort command message. - * @param uint8_t errorCode: code to be returned to the host - * @retval None - */ -void RDR_to_PC_SlotStatus(uint8_t errorCode) -{ - - G_io_ccid.bulk_header.bulkin.bMessageType = RDR_TO_PC_SLOTSTATUS; - G_io_ccid.bulk_header.bulkin.dwLength =0; - G_io_ccid.bulk_header.bulkin.bError = errorCode; - G_io_ccid.bulk_header.bulkin.bSpecific=0; /* bClockStatus = 00h Clock running - 01h Clock stopped in state L - 02h Clock stopped in state H - 03h Clock stopped in an unknown state - All other values are RFU. */ - - Transfer_Data_Request(); - -} - -/** - * @brief RDR_to_PC_Parameters - * Provide the data block response to the host - * Response for PC_to_RDR_GetParameters, PC_to_RDR_ResetParameters - * PC_to_RDR_SetParameters - * @param uint8_t errorCode: code to be returned to the host - * @retval None - */ -void RDR_to_PC_Parameters(uint8_t errorCode) -{ - - G_io_ccid.bulk_header.bulkin.bMessageType = RDR_TO_PC_PARAMETERS; - G_io_ccid.bulk_header.bulkin.bError = errorCode; - - if(errorCode == SLOT_NO_ERROR) - { - G_io_ccid.bulk_header.bulkin.dwLength = LEN_PROTOCOL_STRUCT_T0; - } - else - { - G_io_ccid.bulk_header.bulkin.dwLength = 0; - } - - os_memmove(G_io_ccid_data_buffer, &G_io_ccid.Protocol0_DataStructure, sizeof(G_io_ccid.Protocol0_DataStructure)); - - /* bProtocolNum */ - G_io_ccid.bulk_header.bulkin.bSpecific = BPROTOCOL_NUM_T0; - - Transfer_Data_Request(); -} - -/** - * @brief RDR_to_PC_Escape - * Provide the Escaped data block response to the host - * Response for PC_to_RDR_Escape - * @param uint8_t errorCode: code to be returned to the host - * @retval None - */ -void RDR_to_PC_Escape(uint8_t errorCode) -{ - G_io_ccid.bulk_header.bulkin.bMessageType = RDR_TO_PC_ESCAPE; - - G_io_ccid.bulk_header.bulkin.bSpecific=0; /* Reserved for Future Use */ - G_io_ccid.bulk_header.bulkin.bError = errorCode; - - /* void the Length Specified in Command */ - if(errorCode != SLOT_NO_ERROR) - { - G_io_ccid.bulk_header.bulkin.dwLength = 0; - } - - Transfer_Data_Request(); -} - - - -/** - * @brief RDR_to_PC_DataRateAndClockFrequency - * Provide the Clock and Data Rate information to host - * Response for PC_TO_RDR_SetDataRateAndClockFrequency - * @param uint8_t errorCode: code to be returned to the host - * @retval None - */ -void RDR_to_PC_DataRateAndClockFrequency(uint8_t errorCode) -{ - /* - uint16_t length = CCID_RESPONSE_HEADER_SIZE; - */ - - G_io_ccid.bulk_header.bulkin.bMessageType = RDR_TO_PC_DATARATEANDCLOCKFREQUENCY; - G_io_ccid.bulk_header.bulkin.bError = errorCode; - G_io_ccid.bulk_header.bulkin.bSpecific=0; /* Reserved for Future Use */ - - /* void the Length Specified in Command */ - if(errorCode != SLOT_NO_ERROR) - { - G_io_ccid.bulk_header.bulkin.dwLength = 0; - } - - Transfer_Data_Request(); -} - -#ifdef HAVE_CCID_INTERRUPT -/** - * @brief RDR_to_PC_NotifySlotChange - * Interrupt message to be sent to the host, Checks the card presence - * status and update the buffer accordingly - * @param None - * @retval None - */ -void RDR_to_PC_NotifySlotChange(void) -{ - G_io_ccid.UsbIntMessageBuffer[OFFSET_INT_BMESSAGETYPE] = RDR_TO_PC_NOTIFYSLOTCHANGE; - - if (SC_Detect() ) - { - /* - SLOT_ICC_PRESENT 0x01 : LSb : (0b = no ICC present, 1b = ICC present) - SLOT_ICC_CHANGE 0x02 : MSb : (0b = no change, 1b = change). - */ - G_io_ccid.UsbIntMessageBuffer[OFFSET_INT_BMSLOTICCSTATE] = SLOT_ICC_PRESENT | - SLOT_ICC_CHANGE; - } - else - { - G_io_ccid.UsbIntMessageBuffer[OFFSET_INT_BMSLOTICCSTATE] = SLOT_ICC_CHANGE; - - /* Power OFF the card */ - SC_Poweroff(); - } -} -#endif // HAVE_CCID_INTERRUPT - - -/** - * @brief CCID_UpdSlotStatus - * Updates the variable for the slot status - * @param uint8_t slotStatus : slot status from the calling function - * @retval None - */ -void CCID_UpdSlotStatus (uint8_t slotStatus) -{ - G_io_ccid.Ccid_SlotStatus.SlotStatus = slotStatus; -} - -/** - * @brief CCID_UpdSlotChange - * Updates the variable for the slot change status - * @param uint8_t changeStatus : slot change status from the calling function - * @retval None - */ -void CCID_UpdSlotChange (uint8_t changeStatus) -{ - G_io_ccid.Ccid_SlotStatus.SlotStatusChange = changeStatus; -} - -/** - * @brief CCID_IsSlotStatusChange - * Provides the value of the variable for the slot change status - * @param None - * @retval uint8_t slot change status - */ -uint8_t CCID_IsSlotStatusChange (void) -{ - return G_io_ccid.Ccid_SlotStatus.SlotStatusChange; -} - -/** - * @brief CCID_CheckCommandParams - * Checks the specific parameters requested by the function and update - * status accordingly. This function is called from all - * PC_to_RDR functions - * @param uint32_t param_type : Parameter enum to be checked by calling function - * @retval uint8_t status - */ -static uint8_t CCID_CheckCommandParams (uint32_t param_type) -{ - uint32_t parameter; - - G_io_ccid.bulk_header.bulkin.bStatus = BM_ICC_PRESENT_ACTIVE | BM_COMMAND_STATUS_NO_ERROR ; - - parameter = (uint32_t)param_type; - - if (parameter & CHK_PARAM_SLOT) - { - /* - The slot number (bSlot) identifies which ICC slot is being addressed - by the message, if the CCID supports multiple slots. - The slot number is zero-relative, and is in the range of zero to FFh. - */ - - /* SLOT Number is 0 onwards, so always < CCID_NUMBER_OF_SLOTs */ - /* Error Condition !!! */ - if (G_io_ccid.bulk_header.bulkout.bSlot >= CCID_NUMBER_OF_SLOTS) - { /* Slot requested is more than supported by Firmware */ - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_NO_ICC_PRESENT); - return SLOTERROR_BAD_SLOT; - } - } - - if (parameter & CHK_PARAM_CARD_PRESENT) - { - /* Commands Parameters ok, Check the Card Status */ - if (SC_Detect() == 0) - { /* Card is Not detected */ - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_NO_ICC_PRESENT); - return SLOTERROR_ICC_MUTE; - } - } - - /* Check that DwLength is 0 */ - if (parameter & CHK_PARAM_DWLENGTH) - { - if (G_io_ccid.bulk_header.bulkout.dwLength != 0) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_PRESENT_ACTIVE); - return SLOTERROR_BAD_LENTGH; - } - } - - /* abRFU 2 : Reserved for Future Use*/ - if (parameter & CHK_PARAM_abRFU2) - { - - if ((G_io_ccid.bulk_header.bulkout.bSpecific_1 != 0) || - (G_io_ccid.bulk_header.bulkout.bSpecific_2 != 0)) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_PRESENT_ACTIVE); - return SLOTERROR_BAD_ABRFU_2B; /* bSpecific_1 */ - } - } - - if (parameter & CHK_PARAM_abRFU3) - { - /* abRFU 3 : Reserved for Future Use*/ - if ((G_io_ccid.bulk_header.bulkout.bSpecific_0 != 0) || - (G_io_ccid.bulk_header.bulkout.bSpecific_1 != 0) || - (G_io_ccid.bulk_header.bulkout.bSpecific_2 != 0)) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_PRESENT_ACTIVE); - return SLOTERROR_BAD_ABRFU_3B; - } - } - - - if (parameter & CHK_PARAM_ABORT) - { - if( G_io_ccid.usb_ccid_param.bAbortRequestFlag ) - { - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_PRESENT_INACTIVE); - return SLOTERROR_CMD_ABORTED; - } - } - - if (parameter & CHK_ACTIVE_STATE) - { - /* Commands Parameters ok, Check the Card Status */ - /* Card is detected */ - if (! SC_Detect()) - { - /* Check that from Lower Layers, the SmartCard come to known state */ - CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED,BM_ICC_PRESENT_INACTIVE); - return SLOTERROR_HW_ERROR; - } - } - - return 0; -} - -#endif // HAVE_USB_CLASS_CCID - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/src/sdk/usbd_ccid_if.c b/src/sdk/usbd_ccid_if.c deleted file mode 100755 index 7b32035..0000000 --- a/src/sdk/usbd_ccid_if.c +++ /dev/null @@ -1,619 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_ccid_if.c - * @author MCD Application Team - * @version V1.0.1 - * @date 31-January-2014 - * @brief This file provides all the functions for USB Interface for CCID - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2014 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ - -#pragma message "Override SDK source file :" __FILE__ - -/* Includes ------------------------------------------------------------------*/ -#include "os.h" - -#ifdef HAVE_USB_CLASS_CCID - -#include "usbd_ccid_if.h" - -#if CCID_BULK_EPIN_SIZE > USB_SEGMENT_SIZE - #error configuration error, the USB MAX SEGMENT SIZE does not support the CCID endpoint (CCID_BULK_EPIN_SIZE vs USB_SEGMENT_SIZE) -#endif - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -usb_class_ccid_t G_io_ccid; - -/* Private function prototypes -----------------------------------------------*/ -static void CCID_Response_SendData (USBD_HandleTypeDef *pdev, - uint8_t* pbuf, - uint16_t len); -/* Private function ----------------------------------------------------------*/ -/** - * @brief CCID_Init - * Initialize the CCID USB Layer - * @param pdev: device instance - * @retval None - */ -void CCID_Init (USBD_HandleTypeDef *pdev) -{ - memset(&G_io_ccid, 0, sizeof(G_io_ccid)); - - /* CCID Related Initialization */ -#ifdef HAVE_CCID_INTERRUPT - CCID_SetIntrTransferStatus(1); /* Transfer Complete Status */ -#endif // HAVE_CCID_INTERRUPT - CCID_UpdSlotChange(1); - SC_InitParams(); - - /* Prepare Out endpoint to receive 1st packet */ - G_io_ccid.Ccid_BulkState = CCID_STATE_IDLE; - USBD_LL_PrepareReceive(pdev, CCID_BULK_OUT_EP, CCID_BULK_EPOUT_SIZE); - - // send the smartcard as inserted state at boot time - io_usb_ccid_set_card_inserted(1); -} - -/** - * @brief CCID_DeInit - * Uninitialize the CCID Machine - * @param pdev: device instance - * @retval None - */ -void CCID_DeInit (USBD_HandleTypeDef *pdev) -{ - UNUSED(pdev); - G_io_ccid.Ccid_BulkState = CCID_STATE_IDLE; -} - -/** - * @brief CCID_Message_In - * Handle Bulk IN & Intr IN data stage - * @param pdev: device instance - * @param uint8_t epnum: endpoint index - * @retval None - */ -void CCID_BulkMessage_In (USBD_HandleTypeDef *pdev, - uint8_t epnum) -{ - if (epnum == (CCID_BULK_IN_EP & 0x7F)) - {/* Filter the epnum by masking with 0x7f (mask of IN Direction) */ - - /*************** Handle Bulk Transfer IN data completion *****************/ - - switch (G_io_ccid.Ccid_BulkState) - { - case CCID_STATE_SEND_RESP: { - unsigned int remLen = G_io_ccid.UsbMessageLength; - - // advance with acknowledged sent chunk - if (G_io_ccid.pUsbMessageBuffer == &G_io_ccid.bulk_header) { - // first part of the bulk in sent. - // advance in the data buffer to transmit. (mixed source leap) - G_io_ccid.pUsbMessageBuffer = G_io_ccid_data_buffer+MIN(CCID_BULK_EPIN_SIZE, G_io_ccid.UsbMessageLength)-CCID_HEADER_SIZE; - } - else { - G_io_ccid.pUsbMessageBuffer += MIN(CCID_BULK_EPIN_SIZE, G_io_ccid.UsbMessageLength); - } - G_io_ccid.UsbMessageLength -= MIN(CCID_BULK_EPIN_SIZE, G_io_ccid.UsbMessageLength); - - // if remaining length is > EPIN_SIZE: send a filled bulk packet - if (G_io_ccid.UsbMessageLength >= CCID_BULK_EPIN_SIZE) { - CCID_Response_SendData(pdev, G_io_ccid.pUsbMessageBuffer, - // use the header declared size packet must be well formed - CCID_BULK_EPIN_SIZE); - } - - // if remaining length is 0; send an empty packet and prepare to receive a new command - else if (G_io_ccid.UsbMessageLength == 0 && remLen == CCID_BULK_EPIN_SIZE) { - CCID_Response_SendData(pdev, G_io_ccid.pUsbMessageBuffer, - // use the header declared size packet must be well formed - 0); - goto last_xfer; // won't wait ack to avoid missing a command - } - // else if no more data, then last packet sent, go back to idle (done on transfer ack) - else if (G_io_ccid.UsbMessageLength == 0) { // robustness only - last_xfer: - G_io_ccid.Ccid_BulkState = CCID_STATE_IDLE; - - /* Prepare EP to Receive First Cmd */ - // not timeout compliant // USBD_LL_PrepareReceive(pdev, CCID_BULK_OUT_EP, CCID_BULK_EPOUT_SIZE); - - // mark transfer as completed - G_io_app.apdu_state = APDU_IDLE; - } - - // if remaining length is < EPIN_SIZE: send packet and prepare to receive a new command - else if (G_io_ccid.UsbMessageLength < CCID_BULK_EPIN_SIZE) { - CCID_Response_SendData(pdev, G_io_ccid.pUsbMessageBuffer, - // use the header declared size packet must be well formed - G_io_ccid.UsbMessageLength); - goto last_xfer; // won't wait ack to avoid missing a command - } - - break; - } - - default: - break; - } - } -#ifdef HAVE_CCID_INTERRUPT - else if (epnum == (CCID_INTR_IN_EP & 0x7F)) - { - /* Filter the epnum by masking with 0x7f (mask of IN Direction) */ - CCID_SetIntrTransferStatus(1); /* Transfer Complete Status */ - } -#endif // HAVE_CCID_INTERRUPT -} - -void CCID_Send_Reply(USBD_HandleTypeDef *pdev) { - /********** Decide for all commands ***************/ - if (G_io_ccid.Ccid_BulkState == CCID_STATE_SEND_RESP) - { - G_io_ccid.UsbMessageLength = G_io_ccid.bulk_header.bulkin.dwLength+CCID_HEADER_SIZE; /* Store for future use */ - - /* Expected Data Length Packet Received */ - G_io_ccid.pUsbMessageBuffer = (uint8_t*) &G_io_ccid.bulk_header; - - // send bulk header and first pat of the message at once - os_memmove(G_io_usb_ep_buffer, &G_io_ccid.bulk_header, CCID_HEADER_SIZE); - if (G_io_ccid.UsbMessageLength>CCID_HEADER_SIZE) { - // copy start of data if bigger size than a header - os_memmove(G_io_usb_ep_buffer+CCID_HEADER_SIZE, G_io_ccid_data_buffer, MIN(CCID_BULK_EPIN_SIZE, G_io_ccid.UsbMessageLength)-CCID_HEADER_SIZE); - } - // send the first mixed source chunk - CCID_Response_SendData(pdev, G_io_usb_ep_buffer, - // use the header declared size packet must be well formed - MIN(CCID_BULK_EPIN_SIZE, G_io_ccid.UsbMessageLength)); - } -} - -/** - * @brief CCID_BulkMessage_Out - * Proccess CCID OUT data - * @param pdev: device instance - * @param uint8_t epnum: endpoint index - * @retval None - */ -void CCID_BulkMessage_Out (USBD_HandleTypeDef *pdev, - uint8_t epnum, uint8_t* buffer, uint16_t dataLen) -{ - if (epnum == (CCID_BULK_OUT_EP & 0x7F)) { - switch (G_io_ccid.Ccid_BulkState) - { - - // after a timeout, could be in almost any state :) therefore, clean it and process the newly received command - default: - G_io_ccid.Ccid_BulkState = CCID_STATE_IDLE; - // no break is intentional - - case CCID_STATE_IDLE: - // prepare to receive another packet later on (to avoid troubles with timeout due to other hid command timeouting the ccid endpoint reply) - USBD_LL_PrepareReceive(pdev, CCID_BULK_OUT_EP, CCID_BULK_EPOUT_SIZE); - - if (dataLen == 0x00) - { /* Zero Length Packet Received, end of transfer */ - G_io_ccid.Ccid_BulkState = CCID_STATE_IDLE; - } - else if (dataLen >= CCID_HEADER_SIZE) - { - G_io_ccid.UsbMessageLength = dataLen; /* Store for future use */ - - /* Expected Data Length Packet Received */ - // endianness is little :) useful for our ARM convention - G_io_ccid.pUsbMessageBuffer = (uint8_t*) &G_io_ccid.bulk_header; - - // copy the ccid bulk header only - os_memmove(G_io_ccid.pUsbMessageBuffer, buffer, CCID_HEADER_SIZE); - // copy remaining part in the data buffer (split from the ccid to allow for overlaying with another ressource buffer) - if (dataLen>CCID_HEADER_SIZE) { - os_memmove(G_io_ccid_data_buffer, buffer+CCID_HEADER_SIZE, dataLen-CCID_HEADER_SIZE); - // we're now receiving in the data buffer (all subsequent calls) - G_io_ccid.pUsbMessageBuffer = G_io_ccid_data_buffer; - } - - if (G_io_ccid.bulk_header.bulkout.dwLength > IO_CCID_DATA_BUFFER_SIZE) - { /* Check if length of data to be sent by host is > buffer size */ - - /* Too long data received.... Error ! */ - G_io_ccid.Ccid_BulkState = CCID_STATE_UNCORRECT_LENGTH; - } - else - // everything received in the first packet - if (G_io_ccid.UsbMessageLength == (G_io_ccid.bulk_header.bulkout.dwLength + CCID_HEADER_SIZE)) { - /* Short message, less than the EP Out Size, execute the command, - if parameter like dwLength is too big, the appropriate command will - give an error */ - CCID_CmdDecode(pdev); - } - else - { /* Long message, receive additional data with command */ - G_io_ccid.Ccid_BulkState = CCID_STATE_RECEIVE_DATA; - G_io_ccid.pUsbMessageBuffer += dataLen-CCID_HEADER_SIZE; /* Point to new offset */ - } - } - break; - - case CCID_STATE_RECEIVE_DATA: - - USBD_LL_PrepareReceive(pdev, CCID_BULK_OUT_EP, CCID_BULK_EPOUT_SIZE); - - G_io_ccid.UsbMessageLength += dataLen; - - if (dataLen < CCID_BULK_EPOUT_SIZE) - {/* Short message, less than the EP Out Size, execute the command, - if parameter like dwLength is too big, the appropriate command will - give an error */ - - /* Full command is received, process the Command */ - os_memmove(G_io_ccid.pUsbMessageBuffer, buffer, dataLen); - CCID_CmdDecode(pdev); - } - else //if (dataLen == CCID_BULK_EPOUT_SIZE) - { - if (G_io_ccid.UsbMessageLength < (G_io_ccid.bulk_header.bulkout.dwLength + CCID_HEADER_SIZE)) - { - os_memmove(G_io_ccid.pUsbMessageBuffer, buffer, dataLen); - G_io_ccid.pUsbMessageBuffer += dataLen; - /* Increment the pointer to receive more data */ - - /* Prepare EP to Receive next Cmd */ - // not timeout compliant // USBD_LL_PrepareReceive(pdev, CCID_BULK_OUT_EP, CCID_BULK_EPOUT_SIZE); - } - else if (G_io_ccid.UsbMessageLength == (G_io_ccid.bulk_header.bulkout.dwLength + CCID_HEADER_SIZE)) - { - /* Full command is received, process the Command */ - os_memmove(G_io_ccid.pUsbMessageBuffer, buffer, dataLen); - CCID_CmdDecode(pdev); - } - else - { - /* Too long data received.... Error ! */ - G_io_ccid.Ccid_BulkState = CCID_STATE_UNCORRECT_LENGTH; - } - } - - break; - - /* - case CCID_STATE_UNCORRECT_LENGTH: - G_io_ccid.Ccid_BulkState = CCID_STATE_IDLE; - break; - - default: - - break; - */ - } - } -} - -/** - * @brief CCID_CmdDecode - * Parse the commands and Proccess command - * @param pdev: device instance - * @retval None - */ -void CCID_CmdDecode(USBD_HandleTypeDef *pdev) -{ - uint8_t errorCode; - - switch (G_io_ccid.bulk_header.bulkout.bMessageType) - { - case PC_TO_RDR_ICCPOWERON: - errorCode = PC_to_RDR_IccPowerOn(); - RDR_to_PC_DataBlock(errorCode); - break; - case PC_TO_RDR_ICCPOWEROFF: - errorCode = PC_to_RDR_IccPowerOff(); - RDR_to_PC_SlotStatus(errorCode); - break; - case PC_TO_RDR_GETSLOTSTATUS: - errorCode = PC_to_RDR_GetSlotStatus(); - RDR_to_PC_SlotStatus(errorCode); - break; - case PC_TO_RDR_XFRBLOCK: - errorCode = PC_to_RDR_XfrBlock(); - // asynchronous // RDR_to_PC_DataBlock(errorCode); - break; - case PC_TO_RDR_GETPARAMETERS: - errorCode = PC_to_RDR_GetParameters(); - RDR_to_PC_Parameters(errorCode); - break; - case PC_TO_RDR_RESETPARAMETERS: - errorCode = PC_to_RDR_ResetParameters(); - RDR_to_PC_Parameters(errorCode); - break; - case PC_TO_RDR_SETPARAMETERS: - errorCode = PC_to_RDR_SetParameters(); - RDR_to_PC_Parameters(errorCode); - break; - case PC_TO_RDR_ESCAPE: - errorCode = PC_to_RDR_Escape(); - RDR_to_PC_Escape(errorCode); - break; - case PC_TO_RDR_ICCCLOCK: - errorCode = PC_to_RDR_IccClock(); - RDR_to_PC_SlotStatus(errorCode); - break; - case PC_TO_RDR_ABORT: - errorCode = PC_to_RDR_Abort(); - RDR_to_PC_SlotStatus(errorCode); - break; - case PC_TO_RDR_T0APDU: - errorCode = PC_TO_RDR_T0Apdu(); - RDR_to_PC_SlotStatus(errorCode); - break; - case PC_TO_RDR_MECHANICAL: - errorCode = PC_TO_RDR_Mechanical(); - RDR_to_PC_SlotStatus(errorCode); - break; - case PC_TO_RDR_SETDATARATEANDCLOCKFREQUENCY: - errorCode = PC_TO_RDR_SetDataRateAndClockFrequency(); - RDR_to_PC_DataRateAndClockFrequency(errorCode); - break; - case PC_TO_RDR_SECURE: - errorCode = PC_TO_RDR_Secure(); - // asynchronous // RDR_to_PC_DataBlock(errorCode); - break; - default: - RDR_to_PC_SlotStatus(SLOTERROR_CMD_NOT_SUPPORTED); - break; - } - - CCID_Send_Reply(pdev); -} - -/** - * @brief Transfer_Data_Request - * Prepare the request response to be sent to the host - * @param uint8_t* dataPointer: Pointer to the data buffer to send - * @param uint16_t dataLen : number of bytes to send - * @retval None - */ -void Transfer_Data_Request(void) -{ - /********** Update Global Variables ***************/ - G_io_ccid.Ccid_BulkState = CCID_STATE_SEND_RESP; -} - - -/** - * @brief CCID_Response_SendData - * Send the data on bulk-in EP - * @param pdev: device instance - * @param uint8_t* buf: pointer to data buffer - * @param uint16_t len: Data Length - * @retval None - */ -static void CCID_Response_SendData(USBD_HandleTypeDef *pdev, - uint8_t* buf, - uint16_t len) -{ - UNUSED(pdev); - // don't ask the MCU to perform bulk split, we could quickly get into a buffer overflow - if (len > CCID_BULK_EPIN_SIZE) { - THROW(EXCEPTION_IO_OVERFLOW); - } - - G_io_seproxyhal_spi_buffer[0] = SEPROXYHAL_TAG_USB_EP_PREPARE; - G_io_seproxyhal_spi_buffer[1] = (3+len)>>8; - G_io_seproxyhal_spi_buffer[2] = (3+len); - G_io_seproxyhal_spi_buffer[3] = CCID_BULK_IN_EP; - G_io_seproxyhal_spi_buffer[4] = SEPROXYHAL_TAG_USB_EP_PREPARE_DIR_IN; - G_io_seproxyhal_spi_buffer[5] = len; - io_seproxyhal_spi_send(G_io_seproxyhal_spi_buffer, 6); - io_seproxyhal_spi_send(buf, len); -} - -#ifdef HAVE_CCID_INTERRUPT -/** - * @brief CCID_IntMessage - * Send the Interrupt-IN data to the host - * @param pdev: device instance - * @retval None - */ -void CCID_IntMessage(USBD_HandleTypeDef *pdev) -{ - UNUSED(pdev); - /* Check if there us change in Smartcard Slot status */ - if ( CCID_IsSlotStatusChange() && CCID_IsIntrTransferComplete() ) - { -#ifdef HAVE_CCID_INTERRUPT - /* Check Slot Status is changed. Card is Removed/ Fitted */ - RDR_to_PC_NotifySlotChange(); -#endif // HAVE_CCID_INTERRUPT - - CCID_SetIntrTransferStatus(0); /* Reset the Status */ - CCID_UpdSlotChange(0); /* Reset the Status of Slot Change */ - - G_io_seproxyhal_spi_buffer[0] = SEPROXYHAL_TAG_USB_EP_PREPARE; - G_io_seproxyhal_spi_buffer[1] = (3+2)>>8; - G_io_seproxyhal_spi_buffer[2] = (3+2); - G_io_seproxyhal_spi_buffer[3] = CCID_INTR_IN_EP; - G_io_seproxyhal_spi_buffer[4] = SEPROXYHAL_TAG_USB_EP_PREPARE_DIR_IN; - G_io_seproxyhal_spi_buffer[5] = 2; - io_seproxyhal_spi_send(G_io_seproxyhal_spi_buffer, 6); - io_seproxyhal_spi_send(G_io_ccid.UsbIntMessageBuffer, 2); - } -} - -/** - * @brief CCID_IsIntrTransferComplete - * Provides the status of previous Interrupt transfer status - * @param None - * @retval uint8_t PrevXferComplete_IntrIn: Value of the previous transfer status - */ -uint8_t CCID_IsIntrTransferComplete (void) -{ - return G_io_ccid.PrevXferComplete_IntrIn; -} - -/** - * @brief CCID_IsIntrTransferComplete - * Set the value of the Interrupt transfer status - * @param uint8_t xfer_Status: Value of the Interrupt transfer status to set - * @retval None - */ -void CCID_SetIntrTransferStatus (uint8_t xfer_Status) -{ - G_io_ccid.PrevXferComplete_IntrIn = xfer_Status; -} -#endif // HAVE_CCID_INTERRUPT - - - - - - -uint8_t SC_Detect(void) { - return G_io_ccid.ccid_card_inserted; -} - -void SC_InitParams (void) { - // nothing to do -} - -uint8_t SC_SetParams (Protocol0_DataStructure_t* pt0) { - UNUSED(pt0); - return SLOT_NO_ERROR; -} - - -uint8_t SC_SetClock (uint8_t bClockCommand) { - UNUSED(bClockCommand); - return SLOT_NO_ERROR; -} - -uint8_t SC_Request_GetClockFrequencies(uint8_t* pbuf, uint16_t* len); -uint8_t SC_Request_GetDataRates(uint8_t* pbuf, uint16_t* len); -uint8_t SC_T0Apdu(uint8_t bmChanges, uint8_t bClassGetResponse, - uint8_t bClassEnvelope) { - UNUSED(bmChanges); - UNUSED(bClassGetResponse); - UNUSED(bClassEnvelope); - return SLOTERROR_CMD_NOT_SUPPORTED; -} -uint8_t SC_Mechanical(uint8_t bFunction) { - UNUSED(bFunction); - return SLOTERROR_CMD_NOT_SUPPORTED; -} -uint8_t SC_SetDataRateAndClockFrequency(uint32_t dwClockFrequency, - uint32_t dwDataRate) { - UNUSED(dwClockFrequency); - UNUSED(dwDataRate); - return SLOT_NO_ERROR; -} -uint8_t SC_Secure(uint32_t dwLength, uint8_t bBWI, uint16_t wLevelParameter, - uint8_t* pbuf, uint32_t* returnLen ) { - UNUSED(bBWI); - UNUSED(wLevelParameter); - UNUSED(returnLen); - // return SLOTERROR_CMD_NOT_SUPPORTED; - uint16_t ret_len,off; - switch(pbuf[0]) { - case 0: // verify pin - off = 15; - //ret_len = dwLength - 15; - ret_len = 5; - break; - case 1: // modify pin - switch(pbuf[11]) { - case 3: - off = 20; - break; - case 2: - case 1: - off = 19; - break; - // 0 and 4-0xFF - default: - off = 18; - break; - } - //ret_len = dwLength - off; - ret_len = 5; - break; - default: // unsupported - G_io_ccid.bulk_header.bulkin.dwLength = 0; - RDR_to_PC_DataBlock(SLOTERROR_CMD_NOT_SUPPORTED); - CCID_Send_Reply(&USBD_Device); - return SLOTERROR_CMD_NOT_SUPPORTED; - } - pbuf += off; - pbuf[0] = 0xEF; - return SC_XferBlock(pbuf, ret_len, &ret_len); -} - -// prepare the apdu to be processed by the application -uint8_t SC_XferBlock (uint8_t* ptrBlock, uint32_t blockLen, uint16_t* expectedLen) { - UNUSED(expectedLen); - - // check for overflow - if (blockLen > IO_APDU_BUFFER_SIZE) { - return SLOTERROR_BAD_LENTGH; - } - - // copy received apdu // if G_io_ccid_data_buffer is the buffer apdu, then the memmove will do nothing - os_memmove(G_io_apdu_buffer, ptrBlock, blockLen); - G_io_app.apdu_length = blockLen; - G_io_app.apdu_media = IO_APDU_MEDIA_USB_CCID; // for application code - G_io_app.apdu_state = APDU_USB_CCID; // for next call to io_exchange - - return SLOT_NO_ERROR; -} - -void io_usb_ccid_reply(unsigned char* buffer, unsigned short length) { - // avoid memory overflow - if (length > IO_CCID_DATA_BUFFER_SIZE) { - THROW(EXCEPTION_IO_OVERFLOW); - } - // copy the responde apdu - os_memmove(G_io_ccid_data_buffer, buffer, length); - G_io_ccid.bulk_header.bulkin.dwLength = length; - // forge reply - RDR_to_PC_DataBlock(SLOT_NO_ERROR); - - // start sending rpely - CCID_Send_Reply(&USBD_Device); -} - -// ask for power on -void io_usb_ccid_set_card_inserted(unsigned int inserted) { - G_io_ccid.ccid_card_inserted = inserted; - CCID_UpdSlotChange(1); -#ifdef HAVE_CCID_INTERRUPT - CCID_IntMessage(&USBD_Device); -#endif // HAVE_CCID_INTERRUPT -} - - - - - - - -#endif // HAVE_USB_CLASS_CCID - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/sdk/usbd_ccid_impl.h b/src/sdk/usbd_ccid_impl.h deleted file mode 100644 index eb525e6..0000000 --- a/src/sdk/usbd_ccid_impl.h +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* -* Ledger Nano S - Secure firmware -* (c) 2019 Ledger -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ -#ifndef USBD_CCID_IMPL_H -#define USBD_CCID_IMPL_H - -#ifdef HAVE_USB_CLASS_CCID - -// ================================================ -// CCID - -#define TPDU_EXCHANGE 0x01 -#define SHORT_APDU_EXCHANGE 0x02 -#define EXTENDED_APDU_EXCHANGE 0x04 -#define CHARACTER_EXCHANGE 0x00 - -#define EXCHANGE_LEVEL_FEATURE SHORT_APDU_EXCHANGE - -#define CCID_INTF 2 -#define CCID_BULK_IN_EP 0x83 -#define CCID_BULK_EPIN_SIZE 64 -#define CCID_BULK_OUT_EP 0x03 -#define CCID_BULK_EPOUT_SIZE 64 - -#ifdef HAVE_CCID_INTERRUPT -#define CCID_INTR_IN_EP 0x84 -#define CCID_INTR_EPIN_SIZE 16 -#endif // HAVE_CCID_INTERRUPT - -#define IO_CCID_DATA_BUFFER_SIZE IO_APDU_BUFFER_SIZE -#define G_io_ccid_data_buffer G_io_apdu_buffer - -#endif // HAVE_USB_CLASS_CCID - -#endif // USBD_CCID_IMPL_H diff --git a/src/sdk/usbd_hid_impl.h b/src/sdk/usbd_hid_impl.h deleted file mode 100644 index 35fdab6..0000000 --- a/src/sdk/usbd_hid_impl.h +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* -* Ledger Nano S - Secure firmware -* (c) 2019 Ledger -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ -#ifndef USBD_HID_IMPL_H -#define USBD_HID_IMPL_H - -// ================================================ -// HIDGEN - -#define HID_INTF 0 - -#define HID_EPIN_ADDR 0x82 -#define HID_EPIN_SIZE 0x40 - -#define HID_EPOUT_ADDR 0x02 -#define HID_EPOUT_SIZE 0x40 - -#ifdef HAVE_IO_U2F -// ================================================ -// HID U2F - -#define U2F_INTF 1 - -#define U2F_EPIN_ADDR 0x81 -#define U2F_EPIN_SIZE 0x40 - -#define U2F_EPOUT_ADDR 0x01 -#define U2F_EPOUT_SIZE 0x40 -#endif // HAVE_IO_U2F - -#ifdef HAVE_WEBUSB - -#define WEBUSB_EPIN_ADDR 0x83 -#define WEBUSB_EPIN_SIZE 0x40 -#define WEBUSB_EPOUT_ADDR 0x03 -#define WEBUSB_EPOUT_SIZE 0x40 - -#ifdef HAVE_USB_CLASS_CCID - #error Unsupported CCID+WEBUSB, not enough endpoints -#endif // HAVE_USB_CLASS_CCID - -#ifdef HAVE_IO_U2F -#define WEBUSB_INTF 2 -#else // HAVE_IO_U2F -#define WEBUSB_INTF 1 -#endif // HAVE_IO_U2F -#endif // HAVE_WEBUSB - -#endif // USBD_HID_IMPL_H - diff --git a/src/sdk/usbd_impl.c b/src/sdk/usbd_impl.c deleted file mode 100644 index b2be118..0000000 --- a/src/sdk/usbd_impl.c +++ /dev/null @@ -1,1455 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_hid.c - * @author MCD Application Team - * @version V2.2.0 - * @date 13-June-2014 - * @brief This file provides the HID core functions. - * - * @verbatim - * - * =================================================================== - * HID Class Description - * =================================================================== - * This module manages the HID class V1.11 following the "Device Class Definition - * for Human Interface Devices (HID) Version 1.11 Jun 27, 2001". - * This driver implements the following aspects of the specification: - * - The Boot Interface Subclass - * - Usage Page : Generic Desktop - * - Usage : Vendor - * - Collection : Application - * - * @note In HS mode and when the DMA is used, all variables and data structures - * dealing with the DMA during the transaction process should be 32-bit aligned. - * - * - * @endverbatim - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2014 STMicroelectronics

- * - * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.st.com/software_license_agreement_liberty_v2 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ****************************************************************************** - */ -#pragma message "Override SDK source file :" __FILE__ - -/* With https://github.com/LedgerHQ/ledger-secure-sdk/pull/188 - * a new feature was implemented to allow HID communication with a - * manually passed destination buffer. - * This feature changed the API of HID communication and was backported - * on all SDK version starting from: - * - nanos: v2.1.0-12 - * - API_LEVEL_1: v1.9.0 - * - API_LEVEL_5: v5.7.0 - * - API_LEVEL >= 9 always been available - */ -#define HAVE_LOCAL_APDU_BUFFER_FEATURE - -#include "os.h" - -#include "os_io_usb.h" - -/* Includes ------------------------------------------------------------------*/ - -#include "usbd_hid.h" -#include "usbd_hid_impl.h" - -#include "usbd_ctlreq.h" - -#include "usbd_core.h" -#include "usbd_conf.h" - -#include "usbd_def.h" -#include "os_io_seproxyhal.h" - -#ifdef HAVE_IO_U2F -#include "u2f_transport.h" -#include "u2f_impl.h" -#endif // HAVE_IO_U2F - -#ifdef HAVE_USB_CLASS_CCID -#include "usbd_ccid_core.h" -#endif // HAVE_USB_CLASS_CCID - - -/** @addtogroup STM32_USB_DEVICE_LIBRARY - * @{ - */ - - -/** @defgroup USBD_HID - * @brief usbd core module - * @{ - */ - -/** @defgroup USBD_HID_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_HID_Private_Defines - * @{ - */ - -/** - * @} - */ - - -/** @defgroup USBD_HID_Private_Macros - * @{ - */ -/** - * @} - */ -/** @defgroup USBD_HID_Private_FunctionPrototypes - * @{ - */ - - -/** - * @} - */ - -/** @defgroup USBD_HID_Private_Variables - * @{ - */ - -#define USBD_LANGID_STRING 0x409 - -#ifdef HAVE_VID_PID_PROBER -#define USBD_VID 0x2581 -#define USBD_PID 0xf1d1 -#else -#define USBD_VID 0x2C97 -#if defined(TARGET_BLUE) -#define USBD_PID 0x0000 -static uint8_t const USBD_PRODUCT_FS_STRING[] = { - 4*2+2, - USB_DESC_TYPE_STRING, - 'B', 0, - 'l', 0, - 'u', 0, - 'e', 0, -}; - -#elif defined(TARGET_NANOS) -#ifndef HAVE_LEGACY_PID -#define USBD_PID 0x1000 -#else // HAVE_LEGACY_PID -#define USBD_PID 0x0001 -#endif // HAVE_LEGACY_PID -static uint8_t const USBD_PRODUCT_FS_STRING[] = { - 6*2+2, - USB_DESC_TYPE_STRING, - 'N', 0, - 'a', 0, - 'n', 0, - 'o', 0, - ' ', 0, - 'S', 0, -}; -#elif defined(TARGET_ARAMIS) -#ifndef HAVE_LEGACY_PID -#define USBD_PID 0x2000 -#else // HAVE_LEGACY_PID -#define USBD_PID 0x0002 -#endif // HAVE_LEGACY_PID -static uint8_t const USBD_PRODUCT_FS_STRING[] = { - 6*2+2, - USB_DESC_TYPE_STRING, - 'A', 0, - 'r', 0, - 'a', 0, - 'm', 0, - 'i', 0, - 's', 0, -}; -#elif defined(TARGET_HW2) -#ifndef HAVE_LEGACY_PID -#define USBD_PID 0x3000 -#else // HAVE_LEGACY_PID -#define USBD_PID 0x0003 -#endif // HAVE_LEGACY_PID -static uint8_t const USBD_PRODUCT_FS_STRING[] = { - 3*2+2, - USB_DESC_TYPE_STRING, - 'H', 0, - 'W', 0, - '2', 0, -}; -#elif defined(TARGET_NANOX) -#ifndef HAVE_LEGACY_PID -#define USBD_PID 0x4000 -#else // HAVE_LEGACY_PID -#define USBD_PID 0x0004 -#endif // HAVE_LEGACY_PID -static uint8_t const USBD_PRODUCT_FS_STRING[] = { - 6*2+2, - USB_DESC_TYPE_STRING, - 'N', 0, - 'a', 0, - 'n', 0, - 'o', 0, - ' ', 0, - 'X', 0, -}; -#elif defined(TARGET_NANOS2) -#ifndef HAVE_LEGACY_PID -#define USBD_PID 0x5000 -#else // HAVE_LEGACY_PID -#define USBD_PID 0x0005 -#endif // HAVE_LEGACY_PID -static uint8_t const USBD_PRODUCT_FS_STRING[] = { - 7*2+2, - USB_DESC_TYPE_STRING, - 'N', 0, - 'a', 0, - 'n', 0, - 'o', 0, - ' ', 0, - 'S', 0, - 'P', 0, -}; -#else -#error unknown TARGET_ID -#endif -#endif - -/* USB Standard Device Descriptor */ -static uint8_t const USBD_LangIDDesc[]= -{ - USB_LEN_LANGID_STR_DESC, - USB_DESC_TYPE_STRING, - LOBYTE(USBD_LANGID_STRING), - HIBYTE(USBD_LANGID_STRING), -}; - -static uint8_t const USB_SERIAL_STRING[] = -{ - 4*2+2, - USB_DESC_TYPE_STRING, - '0', 0, - '0', 0, - '0', 0, - '1', 0, -}; - -static uint8_t const USBD_MANUFACTURER_STRING[] = { - 6*2+2, - USB_DESC_TYPE_STRING, - 'L', 0, - 'e', 0, - 'd', 0, - 'g', 0, - 'e', 0, - 'r', 0, -}; - -#define USBD_INTERFACE_FS_STRING USBD_PRODUCT_FS_STRING -#define USBD_CONFIGURATION_FS_STRING USBD_PRODUCT_FS_STRING - -static uint8_t const HID_ReportDesc[] = { - 0x06, 0xA0, 0xFF, // Usage page (vendor defined) - 0x09, 0x01, // Usage ID (vendor defined) - 0xA1, 0x01, // Collection (application) - - // The Input report - 0x09, 0x03, // Usage ID - vendor defined - 0x15, 0x00, // Logical Minimum (0) - 0x26, 0xFF, 0x00, // Logical Maximum (255) - 0x75, 0x08, // Report Size (8 bits) - 0x95, HID_EPIN_SIZE, // Report Count (64 fields) - 0x81, 0x08, // Input (Data, Variable, Absolute) - - // The Output report - 0x09, 0x04, // Usage ID - vendor defined - 0x15, 0x00, // Logical Minimum (0) - 0x26, 0xFF, 0x00, // Logical Maximum (255) - 0x75, 0x08, // Report Size (8 bits) - 0x95, HID_EPOUT_SIZE, // Report Count (64 fields) - 0x91, 0x08, // Output (Data, Variable, Absolute) - 0xC0 -}; - -#ifdef HAVE_IO_U2F -static uint8_t const HID_ReportDesc_fido[] = { - 0x06, 0xD0, 0xF1, // Usage page (vendor defined) - 0x09, 0x01, // Usage ID (vendor defined) - 0xA1, 0x01, // Collection (application) - - // The Input report - 0x09, 0x03, // Usage ID - vendor defined - 0x15, 0x00, // Logical Minimum (0) - 0x26, 0xFF, 0x00, // Logical Maximum (255) - 0x75, 0x08, // Report Size (8 bits) - 0x95, U2F_EPIN_SIZE, // Report Count (64 fields) - 0x81, 0x08, // Input (Data, Variable, Absolute) - - // The Output report - 0x09, 0x04, // Usage ID - vendor defined - 0x15, 0x00, // Logical Minimum (0) - 0x26, 0xFF, 0x00, // Logical Maximum (255) - 0x75, 0x08, // Report Size (8 bits) - 0x95, U2F_EPOUT_SIZE, // Report Count (64 fields) - 0x91, 0x08, // Output (Data, Variable, Absolute) - 0xC0 -}; -#endif // HAVE_IO_U2F - -#define ARRAY_U2LE(l) (l)&0xFF, (l)>>8 - -/* USB HID device Configuration Descriptor */ -static __ALIGN_BEGIN uint8_t const N_USBD_CfgDesc[] __ALIGN_END = -{ - 0x09, /* bLength: Configuration Descriptor size */ - USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ - ARRAY_U2LE(0x9 /* wTotalLength: Bytes returned */ - +0x9+0x9+0x7+0x7 -#ifdef HAVE_IO_U2F - +0x9+0x9+0x7+0x7 -#endif // HAVE_IO_U2F -#ifdef HAVE_USB_CLASS_CCID - +0x9+0x36+0x7+0x7 -#endif // HAVE_USB_CLASS_CCID -#ifdef HAVE_WEBUSB - +0x9+0x7+0x7 -#endif // HAVE_WEBUSB - ), - 1 -#ifdef HAVE_IO_U2F - +1 -#endif // HAVE_IO_U2F -#ifdef HAVE_USB_CLASS_CCID - +1 -#endif // HAVE_USB_CLASS_CCID -#ifdef HAVE_WEBUSB - +1 -#endif // HAVE_WEBUSB - , /*bNumInterfaces */ - 0x01, /*bConfigurationValue: Configuration value*/ - USBD_IDX_PRODUCT_STR, /*iConfiguration: Index of string descriptor describing the configuration*/ - 0xC0, /*bmAttributes: bus powered */ - 0x32, /*MaxPower 100 mA: this current is used for detecting Vbus*/ - - /* HIDGEN ################################################################################################ */ - - /************** Descriptor of KBD HID interface ****************/ - 0x09, /*bLength: Interface Descriptor size*/ - USB_DESC_TYPE_INTERFACE,/*bDescriptorType: Interface descriptor type*/ - HID_INTF, /*bInterfaceNumber: Number of Interface*/ - 0x00, /*bAlternateSetting: Alternate setting*/ - 0x02, /*bNumEndpoints*/ - 0x03, /*bInterfaceClass: HID*/ - 0x00, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/ - 0x00, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/ - USBD_IDX_PRODUCT_STR, /*iInterface: Index of string descriptor*/ - - /******************** Descriptor of HID *************************/ - 0x09, /*bLength: HID Descriptor size*/ - HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/ - 0x11, /*bHIDUSTOM_HID: HID Class Spec release number*/ - 0x01, - 0x00, /*bCountryCode: Hardware target country*/ - 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ - 0x22, /*bDescriptorType*/ - sizeof(HID_ReportDesc),/*wItemLength: Total length of Report descriptor*/ - 0x00, - - /******************** Descriptor of Custom HID endpoints ********************/ - 0x07, /*bLength: Endpoint Descriptor size*/ - USB_DESC_TYPE_ENDPOINT, /*bDescriptorType:*/ - HID_EPIN_ADDR, /*bEndpointAddress: Endpoint Address (IN)*/ - 0x03, /*bmAttributes: Interrupt endpoint*/ - HID_EPIN_SIZE, /*wMaxPacketSize: 2 Byte max */ - 0x00, - 0x01, /*bInterval: Polling Interval (20 ms)*/ - - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: */ - HID_EPOUT_ADDR, /*bEndpointAddress: Endpoint Address (OUT)*/ - 0x03, /* bmAttributes: Interrupt endpoint */ - HID_EPOUT_SIZE, /* wMaxPacketSize: 2 Bytes max */ - 0x00, - 0x01, /* bInterval: Polling Interval (20 ms) */ - -#ifdef HAVE_IO_U2F - /* HID FIDO ################################################################################################ */ - - /************** Descriptor of HID FIDO interface ****************/ - 0x09, /*bLength: Interface Descriptor size*/ - USB_DESC_TYPE_INTERFACE,/*bDescriptorType: Interface descriptor type*/ - U2F_INTF, /*bInterfaceNumber: Number of Interface*/ - 0x00, /*bAlternateSetting: Alternate setting*/ - 0x02, /*bNumEndpoints*/ - 0x03, /*bInterfaceClass: HID*/ - 0x01, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/ - 0x01, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/ - USBD_IDX_PRODUCT_STR, /*iInterface: Index of string descriptor*/ - - /******************** Descriptor of HID *************************/ - 0x09, /*bLength: HID Descriptor size*/ - HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/ - 0x11, /*bHIDUSTOM_HID: HID Class Spec release number*/ - 0x01, - 0x21, /*bCountryCode: Hardware target country*/ // 0x21: US, 0x08: FR, 0x0D: ISO Intl - 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ - 0x22, /*bDescriptorType*/ - sizeof(HID_ReportDesc_fido),/*wItemLength: Total length of Report descriptor*/ - 0x00, - /******************** Descriptor of Custom HID endpoints ********************/ - 0x07, /*bLength: Endpoint Descriptor size*/ - USB_DESC_TYPE_ENDPOINT, /*bDescriptorType:*/ - U2F_EPIN_ADDR, /*bEndpointAddress: Endpoint Address (IN)*/ - 0x03, /*bmAttributes: Interrupt endpoint*/ - U2F_EPIN_SIZE, /*wMaxPacketSize: */ - 0x00, - 0x01, /*bInterval: Polling Interval */ - - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: */ - U2F_EPOUT_ADDR, /*bEndpointAddress: Endpoint Address (OUT)*/ - 0x03, /* bmAttributes: Interrupt endpoint */ - U2F_EPOUT_SIZE, /* wMaxPacketSize: */ - 0x00, - 0x01,/* bInterval: Polling Interval */ -#endif // HAVE_IO_U2F - -#ifdef HAVE_USB_CLASS_CCID - /* CCID ################################################################################################ */ - - /******************** CCID **** interface ********************/ - 0x09, /* bLength: Interface Descriptor size */ - 0x04, /* bDescriptorType: */ - CCID_INTF, /* bInterfaceNumber: Number of Interface */ - 0x00, /* bAlternateSetting: Alternate setting */ - 0x02, /* bNumEndpoints: endpoints used */ - 0x0B, /* bInterfaceClass: user's interface for CCID */ - 0x00, /* bInterfaceSubClass : */ - 0x00, /* nInterfaceProtocol : None */ - 0x05, /* iInterface: */ - - /******************* CCID class descriptor ********************/ - 0x36, /* bLength: CCID Descriptor size */ - 0x21, /* bDescriptorType: Functional Descriptor type. */ - 0x10, /* bcdCCID(LSB): CCID Class Spec release number (1.00) */ - 0x01, /* bcdCCID(MSB) */ - - 0x00, /* bMaxSlotIndex :highest available slot on this device */ - 0x03, /* bVoltageSupport: bit Wise OR for 01h-5.0V 02h-3.0V - 04h 1.8V*/ - - 0x01,0x00,0x00,0x00, /* dwProtocols: 0001h = Protocol T=0 */ - 0x10,0x0E,0x00,0x00, /* dwDefaultClock: 3.6Mhz = 3600kHz = 0x0E10, - for 4 Mhz the value is (0x00000FA0) : - This is used in ETU and waiting time calculations*/ - 0x10,0x0E,0x00,0x00, /* dwMaximumClock: Maximum supported ICC clock frequency - in KHz. So, 3.6Mhz = 3600kHz = 0x0E10, - 4 Mhz (0x00000FA0) : */ - 0x00, /* bNumClockSupported : no setting from PC - If the value is 00h, the - supported clock frequencies are assumed to be the - default clock frequency defined by dwDefaultClock - and the maximum clock frequency defined by - dwMaximumClock */ - - 0xCD,0x25,0x00,0x00, /* dwDataRate: Default ICC I/O data rate in bps - 9677 bps = 0x25CD - for example 10752 bps (0x00002A00) */ - - 0xCD,0x25,0x00,0x00, /* dwMaxDataRate: Maximum supported ICC I/O data - rate in bps */ - 0x00, /* bNumDataRatesSupported : - The number of data rates that are supported by the CCID - If the value is 00h, all data rates between the default - data rate dwDataRate and the maximum data rate - dwMaxDataRate are supported. - Dont support GET_CLOCK_FREQUENCIES - */ - //46 - 0x00,0x00,0x00,0x00, /* dwMaxIFSD: 0 (T=0 only) */ - 0x00,0x00,0x00,0x00, /* dwSynchProtocols */ - 0x00,0x00,0x00,0x00, /* dwMechanical: no special characteristics */ - - 0xBA, 0x06, 0x02, 0x00, - //0x38,0x00,EXCHANGE_LEVEL_FEATURE,0x00, - /* dwFeatures: clk, baud rate, voltage : automatic */ - /* 00000008h Automatic ICC voltage selection - 00000010h Automatic ICC clock frequency change - 00000020h Automatic baud rate change according to - active parameters provided by the Host or self - determined 00000100h CCID can set - ICC in clock stop mode - - Only one of the following values may be present to - select a level of exchange: - 00010000h TPDU level exchanges with CCID - 00020000h Short APDU level exchange with CCID - 00040000h Short and Extended APDU level exchange - If none of those values : character level of exchange*/ - 0x0F,0x01,0x00,0x00, /* dwMaxCCIDMessageLength: Maximum block size + header*/ - /* 261 + 10 */ - - 0x00, /* bClassGetResponse*/ - 0x00, /* bClassEnvelope */ - 0x00,0x00, /* wLcdLayout : 0000h no LCD. */ - 0x00, /* bPINSupport : no PIN verif and modif */ - 0x01, /* bMaxCCIDBusySlots */ - - /******************** CCID Endpoints ********************/ - 0x07, /*Endpoint descriptor length = 7*/ - 0x05, /*Endpoint descriptor type */ - CCID_BULK_IN_EP, /*Endpoint address (IN, address 1) */ - 0x02, /*Bulk endpoint type */ - LOBYTE(CCID_BULK_EPIN_SIZE), - HIBYTE(CCID_BULK_EPIN_SIZE), - 0x00, /*Polling interval in milliseconds */ - - 0x07, /*Endpoint descriptor length = 7 */ - 0x05, /*Endpoint descriptor type */ - CCID_BULK_OUT_EP, /*Endpoint address (OUT, address 1) */ - 0x02, /*Bulk endpoint type */ - LOBYTE(CCID_BULK_EPOUT_SIZE), - HIBYTE(CCID_BULK_EPOUT_SIZE), - 0x00, /*Polling interval in milliseconds*/ -#endif // HAVE_USB_CLASS_CCID - -#ifdef HAVE_WEBUSB - /* WEBUSB ################################################################################################ */ - - /************** Descriptor of WEBUSB interface ****************/ - 0x09, /*bLength: Interface Descriptor size*/ - USB_DESC_TYPE_INTERFACE,/*bDescriptorType: Interface descriptor type*/ - WEBUSB_INTF, /*bInterfaceNumber: Number of Interface*/ - 0x00, /*bAlternateSetting: Alternate setting*/ - 0x02, /*bNumEndpoints*/ - 0xFF, /*bInterfaceClass: WINUSB*/ - 0xFF, /*bInterfaceSubClass : WINUSB*/ - 0xFF, /*nInterfaceProtocol : WINUSB*/ - USBD_IDX_PRODUCT_STR, /*iInterface: Index of string descriptor*/ - - /******************** Descriptor of endpoints ********************/ - 0x07, /*bLength: Endpoint Descriptor size*/ - USB_DESC_TYPE_ENDPOINT, /*bDescriptorType:*/ - WEBUSB_EPIN_ADDR, /*bEndpointAddress: Endpoint Address (IN)*/ - 0x03, /*bmAttributes: Interrupt endpoint*/ - WEBUSB_EPIN_SIZE, /*wMaxPacketSize: */ - 0x00, - 0x01, /*bInterval: Polling Interval */ - - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: */ - WEBUSB_EPOUT_ADDR, /*bEndpointAddress: Endpoint Address (OUT)*/ - 0x03, /* bmAttributes: Interrupt endpoint */ - WEBUSB_EPOUT_SIZE, /* wMaxPacketSize: */ - 0x00, - 0x01,/* bInterval: Polling Interval */ -#endif // HAVE_WEBUSB -} ; - -#ifdef HAVE_IO_U2F -/* USB HID device Configuration Descriptor */ -__ALIGN_BEGIN uint8_t const USBD_HID_Desc_fido[] __ALIGN_END = -{ - /******************** Descriptor of HID *************************/ - 0x09, /*bLength: HID Descriptor size*/ - HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/ - 0x11, /*bHIDUSTOM_HID: HID Class Spec release number*/ - 0x01, - 0x21, /*bCountryCode: Hardware target country*/ // 0x21: US, 0x08: FR, 0x0D: ISO Intl - 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ - 0x22, /*bDescriptorType*/ - sizeof(HID_ReportDesc_fido),/*wItemLength: Total length of Report descriptor*/ - 0x00, -}; -#endif // HAVE_IO_U2F - -/* USB HID device Configuration Descriptor */ -__ALIGN_BEGIN uint8_t const USBD_HID_Desc[] __ALIGN_END = -{ - /* 18 */ - 0x09, /*bLength: HID Descriptor size*/ - HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/ - 0x11, /*bHIDUSTOM_HID: HID Class Spec release number*/ - 0x01, - 0x00, /*bCountryCode: Hardware target country*/ - 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ - 0x22, /*bDescriptorType*/ - sizeof(HID_ReportDesc),/*wItemLength: Total length of Report descriptor*/ - 0x00, -}; - -/* USB Standard Device Descriptor */ -static __ALIGN_BEGIN uint8_t const USBD_DeviceQualifierDesc[] __ALIGN_END = -{ - USB_LEN_DEV_QUALIFIER_DESC, - USB_DESC_TYPE_DEVICE_QUALIFIER, - 0x00, - 0x02, - 0x00, - 0x00, - 0x00, - 0x40, - 0x01, - 0x00, -}; - -/* USB Standard Device Descriptor */ -static uint8_t const USBD_DeviceDesc[]= { - 0x12, /* bLength */ - USB_DESC_TYPE_DEVICE, /* bDescriptorType */ -#ifdef HAVE_WEBUSB - 0x10, /* bcdUSB */ -#else // HAVE_WEBUSB - 0x00, /* bcdUSB */ -#endif // HAVE_WEBUSB - 0x02, - 0x00, /* bDeviceClass */ - 0x00, /* bDeviceSubClass */ - 0x00, /* bDeviceProtocol */ - USB_MAX_EP0_SIZE, /* bMaxPacketSize */ - LOBYTE(USBD_VID), /* idVendor */ - HIBYTE(USBD_VID), /* idVendor */ -#if defined(HAVE_VID_PID_PROBER) || defined(HAVE_LEGACY_PID) - LOBYTE(USBD_PID), /* idProduct */ -#else // HAVE_VID_PID_PROBER || defined(HAVE_LEGACY_PID) - LOBYTE(USBD_PID | 0x01 -#ifdef HAVE_IO_U2F - | 0x04 -#endif // HAVE_IO_U2F -#ifdef HAVE_USB_CLASS_CCID - | 0x08 -#endif // HAVE_USB_CLASS_CCID -#ifdef HAVE_WEBUSB - | 0x10 -#endif // HAVE_WEBUSB - ), -#endif // HAVE_VID_PID_PROBER || HAVE_LEGACY_PID - HIBYTE(USBD_PID), /* idProduct */ - - - // Change this ID to make windows WINUSB/WEBUSB reenumerate when the - // descriptor changes and the PID/VID are not changed. - 0x01, /* bcdDevice rel. 2.01 */ - 0x02, - USBD_IDX_MFC_STR, /* Index of manufacturer string */ - USBD_IDX_PRODUCT_STR, /* Index of product string */ - USBD_IDX_SERIAL_STR, /* Index of serial number string */ - 1 /* bNumConfigurations */ -}; /* USB_DeviceDescriptor */ - - -/** - * @brief Returns the device descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - UNUSED(speed); - *length = sizeof(USBD_DeviceDesc); - return (uint8_t*)USBD_DeviceDesc; -} - -/** - * @brief Returns the LangID string descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - UNUSED(speed); - *length = sizeof(USBD_LangIDDesc); - return (uint8_t*)USBD_LangIDDesc; -} - -/** - * @brief Returns the product string descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - UNUSED(speed); - *length = sizeof(USBD_PRODUCT_FS_STRING); - return (uint8_t*)USBD_PRODUCT_FS_STRING; -} - -/** - * @brief Returns the manufacturer string descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - UNUSED(speed); - *length = sizeof(USBD_MANUFACTURER_STRING); - return (uint8_t*)USBD_MANUFACTURER_STRING; -} - -/** - * @brief Returns the serial number string descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - UNUSED(speed); - *length = sizeof(USB_SERIAL_STRING); - return (uint8_t*)USB_SERIAL_STRING; -} - -/** - * @brief Returns the configuration string descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - UNUSED(speed); - *length = sizeof(USBD_CONFIGURATION_FS_STRING); - return (uint8_t*)USBD_CONFIGURATION_FS_STRING; -} - -/** - * @brief Returns the interface string descriptor. - * @param speed: Current device speed - * @param length: Pointer to data length variable - * @retval Pointer to descriptor buffer - */ -uint8_t *USBD_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - UNUSED(speed); - *length = sizeof(USBD_INTERFACE_FS_STRING); - return (uint8_t*)USBD_INTERFACE_FS_STRING; -} - -/** -* @brief DeviceQualifierDescriptor -* return Device Qualifier descriptor -* @param length : pointer data length -* @retval pointer to descriptor buffer -*/ -uint8_t *USBD_GetDeviceQualifierDesc_impl (uint16_t *length) -{ - *length = sizeof (USBD_DeviceQualifierDesc); - return (uint8_t*)USBD_DeviceQualifierDesc; -} - -/** - * @brief USBD_CUSTOM_HID_GetCfgDesc - * return configuration descriptor - * @param speed : current device speed - * @param length : pointer data length - * @retval pointer to descriptor buffer - */ -uint8_t *USBD_GetCfgDesc_impl (uint16_t *length) -{ - *length = sizeof (N_USBD_CfgDesc); - return (uint8_t*)N_USBD_CfgDesc; -} - -uint8_t* USBD_HID_GetHidDescriptor_impl(uint16_t* len) { - switch (USBD_Device.request.wIndex&0xFF) { -#ifdef HAVE_IO_U2F - case U2F_INTF: - *len = sizeof(USBD_HID_Desc_fido); - return (uint8_t*)USBD_HID_Desc_fido; -#endif // HAVE_IO_U2F - case HID_INTF: - *len = sizeof(USBD_HID_Desc); - return (uint8_t*)USBD_HID_Desc; - } - *len = 0; - return 0; -} - -uint8_t* USBD_HID_GetReportDescriptor_impl(uint16_t* len) { - switch (USBD_Device.request.wIndex&0xFF) { -#ifdef HAVE_IO_U2F - case U2F_INTF: - - // very dirty work due to lack of callback when USB_HID_Init is called - USBD_LL_OpenEP(&USBD_Device, - U2F_EPIN_ADDR, - USBD_EP_TYPE_INTR, - U2F_EPIN_SIZE); - - USBD_LL_OpenEP(&USBD_Device, - U2F_EPOUT_ADDR, - USBD_EP_TYPE_INTR, - U2F_EPOUT_SIZE); - - /* Prepare Out endpoint to receive 1st packet */ - USBD_LL_PrepareReceive(&USBD_Device, U2F_EPOUT_ADDR, U2F_EPOUT_SIZE); - - - *len = sizeof(HID_ReportDesc_fido); - return (uint8_t*)HID_ReportDesc_fido; -#endif // HAVE_IO_U2F - case HID_INTF: - *len = sizeof(HID_ReportDesc); - return (uint8_t*)HID_ReportDesc; - } - *len = 0; - return 0; -} - -/** - * @} - */ - - -/** - * @brief USBD_HID_DataOut - * handle data OUT Stage - * @param pdev: device instance - * @param epnum: endpoint index - * @retval status - * - * This function is the default behavior for our implementation when data are sent over the out hid endpoint - */ - -#ifdef HAVE_IO_U2F - -/** - * @brief USBD_HID_Init - * Initialize the HID interface - * @param pdev: device instance - * @param cfgidx: Configuration index - * @retval status - */ -uint8_t USBD_U2F_Init (USBD_HandleTypeDef *pdev, - uint8_t cfgidx) -{ - UNUSED(cfgidx); - - /* Open EP IN */ - USBD_LL_OpenEP(pdev, - U2F_EPIN_ADDR, - USBD_EP_TYPE_INTR, - U2F_EPIN_SIZE); - - /* Open EP OUT */ - USBD_LL_OpenEP(pdev, - U2F_EPOUT_ADDR, - USBD_EP_TYPE_INTR, - U2F_EPOUT_SIZE); - - /* Prepare Out endpoint to receive 1st packet */ - USBD_LL_PrepareReceive(pdev, U2F_EPOUT_ADDR, U2F_EPOUT_SIZE); - - return USBD_OK; -} - -uint8_t USBD_U2F_DataIn_impl (USBD_HandleTypeDef *pdev, - uint8_t epnum) -{ - UNUSED(pdev); - // only the data hid endpoint will receive data - switch (epnum) { - // FIDO endpoint - case (U2F_EPIN_ADDR&0x7F): - // advance the u2f sending machine state - u2f_transport_sent(&G_io_u2f, U2F_MEDIA_USB); - break; - } - return USBD_OK; -} - -uint8_t USBD_U2F_DataOut_impl (USBD_HandleTypeDef *pdev, - uint8_t epnum, uint8_t* buffer) -{ - switch (epnum) { - // FIDO endpoint - case (U2F_EPOUT_ADDR&0x7F): - USBD_LL_PrepareReceive(pdev, U2F_EPOUT_ADDR , U2F_EPOUT_SIZE); - u2f_transport_received(&G_io_u2f, buffer, io_seproxyhal_get_ep_rx_size(U2F_EPOUT_ADDR), U2F_MEDIA_USB); - break; - } - - return USBD_OK; -} -#endif // HAVE_IO_U2F - -uint8_t USBD_HID_DataIn_impl (USBD_HandleTypeDef *pdev, - uint8_t epnum) -{ - UNUSED(pdev); - switch (epnum) { - // HID gen endpoint - case (HID_EPIN_ADDR&0x7F): - io_usb_hid_sent(io_usb_send_apdu_data); - break; - } - - return USBD_OK; -} - - -#ifdef HAVE_LOCAL_APDU_BUFFER_FEATURE -uint8_t USBD_HID_DataOut_impl (USBD_HandleTypeDef *pdev, - uint8_t epnum, uint8_t* buffer, - apdu_buffer_t * apdu_buf) -#else -uint8_t USBD_HID_DataOut_impl (USBD_HandleTypeDef *pdev, - uint8_t epnum, uint8_t* buffer) -#endif -{ - // only the data hid endpoint will receive data - switch (epnum) { - - // HID gen endpoint - case (HID_EPOUT_ADDR&0x7F): - // prepare receiving the next chunk (masked time) - USBD_LL_PrepareReceive(pdev, HID_EPOUT_ADDR , HID_EPOUT_SIZE); - - // avoid troubles when an apdu has not been replied yet - if (G_io_app.apdu_media == IO_APDU_MEDIA_NONE) { - // add to the hid transport -#ifdef HAVE_LOCAL_APDU_BUFFER_FEATURE - switch(io_usb_hid_receive(io_usb_send_apdu_data, buffer, io_seproxyhal_get_ep_rx_size(HID_EPOUT_ADDR), apdu_buf)) { -#else - switch(io_usb_hid_receive(io_usb_send_apdu_data, buffer, io_seproxyhal_get_ep_rx_size(HID_EPOUT_ADDR))) { -#endif - default: - break; - - case IO_USB_APDU_RECEIVED: - G_io_app.apdu_media = IO_APDU_MEDIA_USB_HID; // for application code - G_io_app.apdu_state = APDU_USB_HID; // for next call to io_exchange - G_io_app.apdu_length = G_io_usb_hid_total_length; - break; - } - } - break; - } - - return USBD_OK; -} - -#ifdef HAVE_WEBUSB - -uint8_t USBD_WEBUSB_Init (USBD_HandleTypeDef *pdev, - uint8_t cfgidx) -{ - UNUSED(cfgidx); - - /* Open EP IN */ - USBD_LL_OpenEP(pdev, - WEBUSB_EPIN_ADDR, - USBD_EP_TYPE_INTR, - WEBUSB_EPIN_SIZE); - - /* Open EP OUT */ - USBD_LL_OpenEP(pdev, - WEBUSB_EPOUT_ADDR, - USBD_EP_TYPE_INTR, - WEBUSB_EPOUT_SIZE); - - /* Prepare Out endpoint to receive 1st packet */ - USBD_LL_PrepareReceive(pdev, WEBUSB_EPOUT_ADDR, WEBUSB_EPOUT_SIZE); - - return USBD_OK; -} - -uint8_t USBD_WEBUSB_DeInit (USBD_HandleTypeDef *pdev, - uint8_t cfgidx) { - UNUSED(pdev); - UNUSED(cfgidx); - return USBD_OK; -} - -uint8_t USBD_WEBUSB_Setup (USBD_HandleTypeDef *pdev, - USBD_SetupReqTypedef *req) -{ - UNUSED(pdev); - UNUSED(req); - return USBD_OK; -} - -uint8_t USBD_WEBUSB_DataIn (USBD_HandleTypeDef *pdev, - uint8_t epnum) -{ - UNUSED(pdev); - switch (epnum) { - // HID gen endpoint - case (WEBUSB_EPIN_ADDR&0x7F): - io_usb_hid_sent(io_usb_send_apdu_data_ep0x83); - break; - } - return USBD_OK; -} - -uint8_t USBD_WEBUSB_DataOut (USBD_HandleTypeDef *pdev, - uint8_t epnum, uint8_t* buffer) -{ - // only the data hid endpoint will receive data - switch (epnum) { - - // HID gen endpoint - case (WEBUSB_EPOUT_ADDR&0x7F): - // prepare receiving the next chunk (masked time) - USBD_LL_PrepareReceive(pdev, WEBUSB_EPOUT_ADDR, WEBUSB_EPOUT_SIZE); - - // avoid troubles when an apdu has not been replied yet - if (G_io_app.apdu_media == IO_APDU_MEDIA_NONE) { - // add to the hid transport - switch(io_usb_hid_receive(io_usb_send_apdu_data_ep0x83, buffer, io_seproxyhal_get_ep_rx_size(WEBUSB_EPOUT_ADDR))) { - default: - break; - - case IO_USB_APDU_RECEIVED: - G_io_app.apdu_media = IO_APDU_MEDIA_USB_WEBUSB; // for application code - G_io_app.apdu_state = APDU_USB_WEBUSB; // for next call to io_exchange - G_io_app.apdu_length = G_io_usb_hid_total_length; - break; - } - } - break; - } - - return USBD_OK; -} -// arbitrary vendor choosen -#define WEBUSB_VENDOR_CODE 0x1E - -// from https://wicg.github.io/webusb/#webusb-platform-capability-descriptor -// see also this (for endianness explanation) -// https://github.com/WICG/webusb/issues/115#issuecomment-352206549 -#define WEBUSB_UUID 0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47,0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65 - -#define WEBUSB_REQ_GET_URL 0x02 - -#define WEBUSB_DT_DESCRIPTOR_SET_HEADER 0 -#define WEBUSB_DT_CONFIGURATION_SUBSET_HEADER 1 -#define WEBUSB_DT_FUNCTION_SUBSET_HEADER 2 -#define WEBUSB_DT_URL 3 - -#define WEBUSB_URL_SCHEME_HTTP 0 -#define WEBUSB_URL_SCHEME_HTTPS 1 -#define WEBUSB_URL_SCHEME_CUSTOM 255 - -unsigned char const C_webusb_url_descriptor[] = { - // bLength - 3 + WEBUSB_URL_SIZE_B, - // bDescriptorType - WEBUSB_DT_URL, - // bScheme - WEBUSB_URL_SCHEME_HTTPS, - // URL - WEBUSB_URL -}; - -/* USB 3.1 Descriptor Types - Table 9-6 */ -#define USB_DT_BOS 15 -#define USB_DT_DEVICE_CAPABILITY 16 - -#define USB_DT_BOS_SIZE 5 - -/* USB Device Capability Types - USB 3.1 Table 9-14 */ -#define USB_DC_PLATFORM 5 - -#define MS_OS_20_DESCRIPTOR_LENGTH (0xb2) - -#define WINUSB_VENDOR_CODE 0x77 - -unsigned char const C_usb_bos[] = { - USB_DT_BOS_SIZE, // bLength (5) - USB_DT_BOS, // bDescriptorType - 0x39, 0x00, // wTotalLength - 2, //bNumberDeviceCapabilities - - // capability descriptor - 8+16, // bLength - USB_DT_DEVICE_CAPABILITY, // bDescriptorType - USB_DC_PLATFORM, // bDevCapability - 0, // bReserved - WEBUSB_UUID, // UUID[16] - 0x00, // bcdVersion - 0x01, - WEBUSB_VENDOR_CODE, // bVencordCode -#if WEBUSB_URL_SIZE_B > 0 - 1, // iLandingPage -#else // WEBUSB_URL_SIZE_B - 0, // iLandingPage, no url to retrieve -#endif // WEBUSB_URL_SIZE_B - - // Microsoft OS 2.0 Platform Capability Descriptor - 0x1C, // Descriptor size (28 bytes) - 0x10, // Descriptor type (Device Capability) - 0x05, // Capability type (Platform) - 0x00, // Reserved - - // MS OS 2.0 Platform Capability ID (D8DD60DF-4589-4CC7-9CD2-659D9E648A9F) - 0xDF, 0x60, 0xDD, 0xD8, - 0x89, 0x45, - 0xC7, 0x4C, - 0x9C, 0xD2, - 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F, - - 0x00, 0x00, 0x03, 0x06, // Windows version (8.1) (0x06030000) - MS_OS_20_DESCRIPTOR_LENGTH, 0x00, - WINUSB_VENDOR_CODE, // Vendor-assigned bMS_VendorCode - 0x00 // Doesn’t support alternate enumeration -}; -#endif // HAVE_WEBUSB -static uint8_t *USBD_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) -{ - UNUSED(speed); -#ifdef HAVE_WEBUSB - *length = sizeof(C_usb_bos); - return (uint8_t*)C_usb_bos; -#else - *length = 0; - return NULL; -#endif -} - -/** @defgroup USBD_HID_Private_Functions - * @{ - */ - -// note: how core lib usb calls the hid class -USBD_DescriptorsTypeDef const HID_Desc = { - USBD_DeviceDescriptor, - USBD_LangIDStrDescriptor, - USBD_ManufacturerStrDescriptor, - USBD_ProductStrDescriptor, - USBD_SerialStrDescriptor, - USBD_ConfigStrDescriptor, - USBD_InterfaceStrDescriptor, - USBD_BOSDescriptor, -}; - -#ifdef HAVE_IO_U2F -static USBD_ClassTypeDef const USBD_U2F = -{ - USBD_U2F_Init, - USBD_HID_DeInit, - USBD_HID_Setup, - NULL, /*EP0_TxSent*/ - NULL, /*EP0_RxReady*/ /* STATUS STAGE IN */ - USBD_U2F_DataIn_impl, /*DataIn*/ - USBD_U2F_DataOut_impl, /*DataOut*/ - NULL, /*SOF */ - NULL, - NULL, - USBD_GetCfgDesc_impl, - USBD_GetCfgDesc_impl, - USBD_GetCfgDesc_impl, - USBD_GetDeviceQualifierDesc_impl, -}; -#endif // HAVE_IO_U2F - -static USBD_ClassTypeDef const USBD_HID = -{ - USBD_HID_Init, - USBD_HID_DeInit, - USBD_HID_Setup, - NULL, /*EP0_TxSent*/ - NULL, /*EP0_RxReady*/ /* STATUS STAGE IN */ - USBD_HID_DataIn_impl, /*DataIn*/ - USBD_HID_DataOut_impl, /*DataOut*/ - NULL, /*SOF */ - NULL, - NULL, - USBD_GetCfgDesc_impl, - USBD_GetCfgDesc_impl, - USBD_GetCfgDesc_impl, - USBD_GetDeviceQualifierDesc_impl, -}; - -#ifdef HAVE_WEBUSB - -static const unsigned char C_winusb_string_descriptor[] = { - // bLength - 0x12, - // bDescriptorType - USB_DESC_TYPE_STRING, - // wData - 'M', 0x00, 'S', 0x00, 'F', 0x00, 'T', 0x00, '1', 0x00, '0', 0x00, '0', 0x00, WINUSB_VENDOR_CODE, 0x00, // MSFT100 -}; - -// Microsoft OS 2.0 descriptor wIndex values -#define MS_OS_20_DESCRIPTOR_INDEX 0x07 - -// Microsoft OS 2.0 descriptor types -#define MS_OS_20_SUBSET_HEADER_CONFIGURATION 0x01 -#define MS_OS_20_SUBSET_HEADER_FUNCTION 0x02 -#define MS_OS_20_FEATURE_COMPATIBLE_ID 0x03 -#define MS_OS_20_FEATURE_REG_PROPERTY 0x04 - -static const unsigned char C_winusb_request_descriptor[] = { - // Microsoft OS 2.0 descriptor set header (table 10) - 0x0A, - 0x00, // Descriptor size (10 bytes) - 0x00, - 0x00, // MS OS 2.0 descriptor set header - 0x00, - 0x00, - 0x03, - 0x06, // Windows version (8.1) (0x06030000) - MS_OS_20_DESCRIPTOR_LENGTH, - 0x00, // Size, MS OS 2.0 descriptor set - - // Microsoft OS 2.0 configuration subset header - 0x08, 0x00, // Descriptor size (8 bytes) - MS_OS_20_SUBSET_HEADER_CONFIGURATION, 0x00, // MS OS 2.0 configuration subset header - 0x00, // bConfigurationValue - 0x00, // Reserved - 0xA8, 0x00, // Size, MS OS 2.0 configuration subset - - // Microsoft OS 2.0 function subset header - 0x08, 0x00, // Descriptor size (8 bytes) - MS_OS_20_SUBSET_HEADER_FUNCTION, 0x00, // MS OS 2.0 function subset header - WEBUSB_INTF, // first Interface impacted by this function - - 0x00, // Reserved - 0xA0, 0x00, // Size, MS OS 2.0 function subset - - // Microsoft OS 2.0 compatible ID descriptor (table 13) - 0x14, 0x00, // wLength - MS_OS_20_FEATURE_COMPATIBLE_ID, 0x00, // MS_OS_20_FEATURE_COMPATIBLE_ID - 'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x84, 0x00, //wLength: - MS_OS_20_FEATURE_REG_PROPERTY, 0x00, // wDescriptorType: MS_OS_20_FEATURE_REG_PROPERTY: 0x04 (Table 9) - 0x07, 0x00, //wPropertyDataType: REG_MULTI_SZ (Table 15) - 0x2a, 0x00, //wPropertyNameLength: - //bPropertyName: “DeviceInterfaceGUID†- 'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, 'I', 0x00, 'n', 0x00, 't', 0x00, 'e', 0x00, - 'r', 0x00, 'f', 0x00, 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, 'I', 0x00, 'D', 0x00, 's', 0x00, - 0x00, 0x00, - 0x50, 0x00, // wPropertyDataLength - //bPropertyData: “{CE809264-4B24-4E81-A8B2-57ED01D580E1}â€. - '{', 0x00, 'C', 0x00, 'E', 0x00, '8', 0x00, '0', 0x00, '9', 0x00, '2', 0x00, '6', 0x00, '4', 0x00, '-', 0x00, - '4', 0x00, 'B', 0x00, '2', 0x00, '4', 0x00, '-', 0x00, '4', 0x00, 'E', 0x00, '8', 0x00, '1', 0x00, '-', 0x00, - 'A', 0x00, '8', 0x00, 'B', 0x00, '2', 0x00, '-', 0x00, '5', 0x00, '7', 0x00, 'E', 0x00, 'D', 0x00, '0', 0x00, - '1', 0x00, 'D', 0x00, '5', 0x00, '8', 0x00, '0', 0x00, 'E', 0x00, '1', 0x00, '}', 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -#define WINUSB_GET_COMPATIBLE_ID_FEATURE 0x04 -static const unsigned char C_winusb_wcid[] = { - // header - 0x28, 0x00, 0x00, 0x00, // dwLength - 0x00, 0x01, // bcdVersion - 0x04, 0x00, // wIndex - 0x01, // bNumSections - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved - // functions - WEBUSB_INTF, // bInterfaceNumber - 0x01, // reserved - 'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00, // compatibleId - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, // subCompatibleId - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved -}; - -#define WINUSB_GET_EXTENDED_PROPERTIES_OS_FEATURE 0x05 -static const unsigned char C_winusb_guid[] = { - // header - 0x92, 0x00, 0x00, 0x00, // dwLength - 0x00, 0x01, // bcdVersion - 0x05, 0x00, // wIndex - 0x01, 0x00, // wNumFeatures - // features - 0x88, 0x00, 0x00, 0x00, // dwLength - 0x07, 0x00, 0x00, 0x00, // dwPropertyDataType - 0x2A, 0x00, // wNameLength - 'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, - 'I', 0x00, 'n', 0x00, 't', 0x00, 'e', 0x00, 'r', 0x00, 'f', 0x00, - 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, 'I', 0x00, - 'D', 0x00, 's', 0x00, 0x00, 0x00, // .name, unicode nul terminated - 0x50, 0x00, 0x00, 0x00, // dwPropertyDataLength - // Same as BLE char: 13d63400-2C97-0004-0000-4c6564676572 - '{', 0x00, '1', 0x00, '3', 0x00, 'd', 0x00, '6', 0x00, '3', 0x00, - '4', 0x00, '0', 0x00, '0', 0x00, '-', 0x00, '2', 0x00, 'C', 0x00, - '9', 0x00, '7', 0x00, '-', 0x00, '0', 0x00, '0', 0x00, '0', 0x00, - '4', 0x00, '-', 0x00, '0', 0x00, '0', 0x00, '0', 0x00, '0', 0x00, - '-', 0x00, '4', 0x00, 'c', 0x00, '6', 0x00, '5', 0x00, '6', 0x00, - '4', 0x00, '6', 0x00, '7', 0x00, '6', 0x00, '5', 0x00, '7', 0x00, - '2', 0x00, '}', 0x00, 0x00, 0x00, 0x00, 0x00 // propertyData, double unicode nul terminated -}; - -// upon unsupported request, check for webusb request -void USBD_CtlError( USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req) { -#if WEBUSB_URL_SIZE_B > 0 - if ((req->bmRequest & 0x80) && req->bRequest == WEBUSB_VENDOR_CODE && req->wIndex == WEBUSB_REQ_GET_URL - // HTTPS url - && req->wValue == 1) { - // return the URL descriptor - USBD_CtlSendData (pdev, (unsigned char*)C_webusb_url_descriptor, MIN(req->wLength, sizeof(C_webusb_url_descriptor))); - } - else -#endif // WEBUSB_URL_SIZE_B - // SETUP (LE): 0x80 0x06 0x03 0x77 0x00 0x00 0xXX 0xXX - if ((req->bmRequest & 0x80) - && req->bRequest == USB_REQ_GET_DESCRIPTOR - && (req->wValue>>8) == USB_DESC_TYPE_STRING - && (req->wValue & 0xFF) == 0xEE) { - USBD_CtlSendData(pdev, (unsigned char*)C_winusb_string_descriptor, MIN(req->wLength, sizeof(C_winusb_string_descriptor))); - } - // SETUP (LE): 0x80 0x77 0x04 0x00 0x00 0x00 0xXX 0xXX - else if ((req->bmRequest & 0x80) - && req->bRequest == WINUSB_VENDOR_CODE - && req->wIndex == WINUSB_GET_COMPATIBLE_ID_FEATURE) { - USBD_CtlSendData(pdev, (unsigned char*)C_winusb_wcid, MIN(req->wLength, sizeof(C_winusb_wcid))); - } - // SETUP (LE): 0x80 0x77 0x05 0x00 0x00 0x00 0xXX 0xXX - else if ((req->bmRequest & 0x80) - && req->bRequest == WINUSB_VENDOR_CODE - && req->wIndex == WINUSB_GET_EXTENDED_PROPERTIES_OS_FEATURE - ) { - USBD_CtlSendData(pdev, (unsigned char*)C_winusb_guid, MIN(req->wLength, sizeof(C_winusb_guid))); - } - // Microsoft OS 2.0 Descriptors for Windows 8.1 and Windows 10 - else if ((req->bmRequest & 0x80) - && req->bRequest == WINUSB_VENDOR_CODE - && req->wIndex == MS_OS_20_DESCRIPTOR_INDEX) { - USBD_CtlSendData(pdev, (unsigned char*)C_winusb_request_descriptor, MIN(req->wLength, sizeof(C_winusb_request_descriptor))); - } - else { - USBD_CtlStall(pdev); - } -} - -static const USBD_ClassTypeDef USBD_WEBUSB = -{ - USBD_WEBUSB_Init, - USBD_WEBUSB_DeInit, - USBD_WEBUSB_Setup, - NULL, /*EP0_TxSent*/ - NULL, /*EP0_RxReady*/ - USBD_WEBUSB_DataIn, - USBD_WEBUSB_DataOut, - NULL, /*SOF */ - NULL, /*ISOIn*/ - NULL, /*ISOOut*/ - USBD_GetCfgDesc_impl, - USBD_GetCfgDesc_impl, - USBD_GetCfgDesc_impl, - USBD_GetDeviceQualifierDesc_impl, -}; - -#endif // HAVE_WEBUSB - -#ifdef HAVE_USB_CLASS_CCID -static const USBD_ClassTypeDef USBD_CCID = -{ - USBD_CCID_Init, - USBD_CCID_DeInit, - USBD_CCID_Setup, - NULL, /*EP0_TxSent*/ - NULL, /*EP0_RxReady*/ - USBD_CCID_DataIn, - USBD_CCID_DataOut, - NULL, /*SOF */ - NULL, /*ISOIn*/ - NULL, /*ISOOut*/ - USBD_GetCfgDesc_impl, - USBD_GetCfgDesc_impl, - USBD_GetCfgDesc_impl, - USBD_GetDeviceQualifierDesc_impl, -}; - -uint8_t SC_AnswerToReset (uint8_t voltage, uint8_t* atr_buffer) { - UNUSED(voltage); - // return the atr length - atr_buffer[0] = 0x3B; - atr_buffer[1] = 0; - return 2; -} - -void SC_Poweroff(void) { - // nothing to do ? -} - -uint8_t SC_ExecuteEscape (uint8_t* escapePtr, uint32_t escapeLen, - uint8_t* responseBuff, - uint16_t* responseLen) { - UNUSED(escapePtr); - UNUSED(escapeLen); - UNUSED(responseBuff); - UNUSED(responseLen); - // nothing to do ? - return 0; -} -#endif // HAVE_USB_CLASS_CCID - -void USB_power(unsigned char enabled) { - os_memset(&USBD_Device, 0, sizeof(USBD_Device)); - -//#if TARGET_ID == 0x33000004 - // init timeouts and other global fields - os_memset(G_io_app.usb_ep_xfer_len, 0, sizeof(G_io_app.usb_ep_xfer_len)); - os_memset(G_io_app.usb_ep_timeouts, 0, sizeof(G_io_app.usb_ep_timeouts)); -//#endif - - if (enabled) { - os_memset(&USBD_Device, 0, sizeof(USBD_Device)); - /* Init Device Library */ - USBD_Init(&USBD_Device, (USBD_DescriptorsTypeDef*)&HID_Desc, 0); - - /* Register the HID class */ - USBD_RegisterClassForInterface(HID_INTF, &USBD_Device, (USBD_ClassTypeDef*)&USBD_HID); -#ifdef HAVE_IO_U2F - USBD_RegisterClassForInterface(U2F_INTF, &USBD_Device, (USBD_ClassTypeDef*)&USBD_U2F); - // initialize the U2F tunnel transport - u2f_transport_init(&G_io_u2f, G_io_apdu_buffer, IO_APDU_BUFFER_SIZE); -#endif // HAVE_IO_U2F -#ifdef HAVE_USB_CLASS_CCID - USBD_RegisterClassForInterface(CCID_INTF, &USBD_Device, (USBD_ClassTypeDef*)&USBD_CCID); -#endif // HAVE_USB_CLASS_CCID - -#ifdef HAVE_WEBUSB - USBD_RegisterClassForInterface(WEBUSB_INTF, &USBD_Device, (USBD_ClassTypeDef*)&USBD_WEBUSB); - USBD_LL_PrepareReceive(&USBD_Device, WEBUSB_EPOUT_ADDR , WEBUSB_EPOUT_SIZE); -#endif // HAVE_WEBUSB - - /* Start Device Process */ - USBD_Start(&USBD_Device); - } - else { - USBD_DeInit(&USBD_Device); - } -} - -/** - * @} - */ - - -/** - * @} - */ - - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/sdk/usbd_impl.h b/src/sdk/usbd_impl.h deleted file mode 100644 index a20edef..0000000 --- a/src/sdk/usbd_impl.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef USBD_IMPL_H -#define USBD_IMPL_H - - -uint8_t *USBD_GetCfgDesc_impl (uint16_t *length); - -#endif //USBD_IMPL_H \ No newline at end of file From ce190aa9c1679aeb0c4eb552bc3060e9de281e48 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 19 Oct 2023 17:52:58 +0200 Subject: [PATCH 13/75] Activate Standard App Files; Add App manifest --- Makefile | 10 +-- ledger_app.toml | 8 ++ src/gpg_main.c | 149 +++++--------------------------- src/gpg_ram.c | 32 ------- src/{gpg_nvram.c => gpg_vars.c} | 7 +- src/gpg_vars.h | 11 --- 6 files changed, 35 insertions(+), 182 deletions(-) create mode 100644 ledger_app.toml delete mode 100644 src/gpg_ram.c rename src/{gpg_nvram.c => gpg_vars.c} (91%) diff --git a/Makefile b/Makefile index cd58b05..b9ac244 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ DEFINES += SPEC_VERSION=$(SPECVERSION) APP_SOURCE_PATH += src APP_SOURCE_FILES += $(BOLOS_SDK)/lib_cxng/src/cx_rsa.c APP_SOURCE_FILES += $(BOLOS_SDK)/lib_cxng/src/cx_pkcs1.c -APP_SOURCE_FILES += $(BOLOS_SDK)/lib_cxng/src/cx_utils.c +APP_SOURCE_FILES += ${BOLOS_SDK}/lib_cxng/src/cx_ram.c INCLUDES_PATH += $(BOLOS_SDK)/lib_cxng/src @@ -120,15 +120,13 @@ endif ######################################## # These advanced settings allow to disable some feature that are by # default enabled in the SDK `Makefile.standard_app`. -DISABLE_STANDARD_APP_FILES = 1 +#DISABLE_STANDARD_APP_FILES = 1 #DISABLE_DEFAULT_IO_SEPROXY_BUFFER_SIZE = 1 # To allow custom size declaration #DISABLE_STANDARD_APP_DEFINES = 1 # Will set all the following disablers #DISABLE_STANDARD_SNPRINTF = 1 #DISABLE_STANDARD_USB = 1 DISABLE_STANDARD_WEBUSB = 1 -ifeq ($(TARGET_NAME),TARGET_NANOS) -DISABLE_STANDARD_BAGL_UX_FLOW = 1 -endif +#DISABLE_STANDARD_BAGL_UX_FLOW = 1 #DISABLE_DEBUG_LEDGER_ASSERT = 1 #DISABLE_DEBUG_THROW = 1 @@ -138,12 +136,12 @@ endif DEFINES += GPG_MULTISLOT=$(GPG_MULTISLOT) DEFINES += CUSTOM_IO_APDU_BUFFER_SIZE=\(255+5+64\) -DEFINES += HAVE_LEGACY_PID DEFINES += HAVE_USB_CLASS_CCID DEFINES += HAVE_RSA ifeq ($(TARGET_NAME),TARGET_NANOS) DEFINES += UI_NANO_S +DEFINES += HAVE_UX_LEGACY else DEFINES += UI_NANO_X DEFINES += GPG_SHAKE256 diff --git a/ledger_app.toml b/ledger_app.toml new file mode 100644 index 0000000..b223878 --- /dev/null +++ b/ledger_app.toml @@ -0,0 +1,8 @@ +[app] +build_directory = "./" +sdk = "C" +devices = ["nanos", "nanox", "nanos+"] + +[tests] +unit_directory = "./unit-tests/" +pytest_directory = "./tests/" diff --git a/src/gpg_main.c b/src/gpg_main.c index 8609b78..0399b16 100644 --- a/src/gpg_main.c +++ b/src/gpg_main.c @@ -14,16 +14,33 @@ */ #include "gpg_vars.h" -#include "gpg_ux_nanos.h" +#include "io.h" #include "usbd_ccid_if.h" /* ----------------------------------------------------------------------- */ /* --- Application Entry --- */ /* ----------------------------------------------------------------------- */ -void gpg_main(void) { - unsigned int io_flags; +void app_main(void) { + unsigned int io_flags = 0; io_flags = 0; + + // start communication with MCU + ui_CCID_reset(); + + // set up + io_init(); + + gpg_init(); + + // set up initial screen + ui_init(); + + // start the application + // the first exchange will: + // - display the initial screen + // - send the ATR + // - receive the first command for (;;) { volatile unsigned short sw = 0; BEGIN_TRY { @@ -52,129 +69,3 @@ void gpg_main(void) { END_TRY; } } - -unsigned char io_event(unsigned char channel) { - UNUSED(channel); - // nothing done with the event, throw an error on the transport layer if - // needed - // can't have more than one tag in the reply, not supported yet. - switch (G_io_seproxyhal_spi_buffer[0]) { - case SEPROXYHAL_TAG_FINGER_EVENT: - UX_FINGER_EVENT(G_io_seproxyhal_spi_buffer); - break; - // power off if long push, else pass to the application callback if any - case SEPROXYHAL_TAG_BUTTON_PUSH_EVENT: // for Nano S - UX_BUTTON_PUSH_EVENT(G_io_seproxyhal_spi_buffer); - break; - - // other events are propagated to the UX just in case - default: - UX_DEFAULT_EVENT(); - break; - - case SEPROXYHAL_TAG_DISPLAY_PROCESSED_EVENT: - UX_DISPLAYED_EVENT({}); - break; - case SEPROXYHAL_TAG_TICKER_EVENT: - UX_TICKER_EVENT(G_io_seproxyhal_spi_buffer, { - // only allow display when not locked of overlaid by an OS UX. - if (UX_ALLOWED) { - UX_REDISPLAY(); - } - }); - break; - } - - // close the event if not done previously (by a display or whatever) - if (!io_seproxyhal_spi_is_status_sent()) { - io_seproxyhal_general_status(); - } - // command has been processed, DO NOT reset the current APDU transport - return 1; -} - -unsigned short io_exchange_al(unsigned char channel, unsigned short tx_len) { - switch (channel & ~(IO_FLAGS)) { - case CHANNEL_KEYBOARD: - break; - - // multiplexed io exchange over a SPI channel and TLV encapsulated protocol - case CHANNEL_SPI: - if (tx_len) { - io_seproxyhal_spi_send(G_io_apdu_buffer, tx_len); - - if (channel & IO_RESET_AFTER_REPLIED) { - reset(); - } - return 0; // nothing received from the master so far (it's a tx - // transaction) - } else { - return io_seproxyhal_spi_recv(G_io_apdu_buffer, sizeof(G_io_apdu_buffer), 0); - } - - default: - THROW(INVALID_PARAMETER); - return 0; - } - return 0; -} - -void app_exit(void) { - BEGIN_TRY_L(exit) { - TRY_L(exit) { - os_sched_exit(-1); - } - FINALLY_L(exit) { - } - } - END_TRY_L(exit); -} - -/* -------------------------------------------------------------- */ - -__attribute__((section(".boot"))) int main(void) { - // exit critical section - __asm volatile("cpsie i"); - - // ensure exception will work as planned - os_boot(); - for (;;) { - UX_INIT(); - - BEGIN_TRY { - TRY { - // start communication with MCU - io_seproxyhal_init(); - - USB_power(1); -#if HAVE_USB_CLASS_CCID - io_usb_ccid_set_card_inserted(1); -#endif - - // set up - gpg_init(); - - // set up initial screen - ui_init(); - - // start the application - // the first exchange will: - // - display the initial screen - // - send the ATR - // - receive the first command - gpg_main(); - } - CATCH(EXCEPTION_IO_RESET) { - // reset IO and UX - continue; - } - CATCH_ALL { - break; - } - FINALLY { - } - } - END_TRY; - } - app_exit(); -} diff --git a/src/gpg_ram.c b/src/gpg_ram.c deleted file mode 100644 index e2d9484..0000000 --- a/src/gpg_ram.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "gpg_vars.h" - -#ifndef TARGET_NANOS -#include "ux.h" -ux_state_t G_ux; -bolos_ux_params_t G_ux_params; -#else -ux_state_t ux; -#endif - -unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; - -gpg_v_state_t G_gpg_vstate; - -#ifdef HAVE_RSA -union cx_u G_cx; -#endif // HAVE_RSA diff --git a/src/gpg_nvram.c b/src/gpg_vars.c similarity index 91% rename from src/gpg_nvram.c rename to src/gpg_vars.c index b10dc62..1f976c4 100644 --- a/src/gpg_nvram.c +++ b/src/gpg_vars.c @@ -15,8 +15,7 @@ #include "gpg_vars.h" -#ifndef TARGET_NANOS +gpg_v_state_t G_gpg_vstate; + const gpg_nv_state_t N_state_pic; -#else -gpg_nv_state_t N_state_pic; -#endif + diff --git a/src/gpg_vars.h b/src/gpg_vars.h index 82c7ccb..0257ff1 100644 --- a/src/gpg_vars.h +++ b/src/gpg_vars.h @@ -33,18 +33,7 @@ extern const unsigned char C_OID_cv25519[10]; extern gpg_v_state_t G_gpg_vstate; -#ifndef TARGET_NANOS extern const gpg_nv_state_t N_state_pic; #define N_gpg_pstate ((volatile gpg_nv_state_t *) PIC(&N_state_pic)) -#else -extern gpg_nv_state_t N_state_pic; -#define N_gpg_pstate ((WIDE gpg_nv_state_t *) PIC(&N_state_pic)) -#endif - -extern ux_state_t ux; -#ifdef HAVE_RSA -#include "cx_ram.h" -extern union cx_u G_cx; -#endif // HAVE_RSA #endif From 4257be08b544466529608e4f68fb04eca3f0a018 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 4 Jan 2024 10:15:33 +0100 Subject: [PATCH 14/75] Code refactoring - Update and cleanup error codes - Add constant defines - Fix Select missing tag - Add missing General Feature Management Tag - Syntax and formatting - Remove TRY/CATCH - Cleanup THROW/return statements - Remove usuless goto - improve readability - Use ledger_assert - Improve popup messages - Remove flag GPG_SHAKE256; same code for all devices - Optimize PIN counter write and correct return code - Cleanup ux code - Factorization - Add indication in About menu for debug build - Use global label constants --- Makefile | 7 +- src/gpg_api.h | 57 ++-- src/gpg_challenge.c | 58 ++-- src/gpg_data.c | 416 +++++++++++++++------------- src/gpg_dispatch.c | 237 ++++++++-------- src/gpg_gen.c | 500 +++++++++++++++++---------------- src/gpg_init.c | 50 ++-- src/gpg_io.c | 169 ++++++------ src/gpg_main.c | 60 ++-- src/gpg_mse.c | 47 ++-- src/gpg_pin.c | 188 ++++++------- src/gpg_pso.c | 145 ++++------ src/gpg_select.c | 43 +-- src/gpg_types.h | 197 +++++++------ src/gpg_ux.c | 24 ++ src/gpg_ux.h | 48 ++++ src/gpg_ux_msg.c | 28 +- src/gpg_ux_msg.h | 32 ++- src/gpg_ux_nanos.c | 658 +++++++++++++++++++------------------------- src/gpg_ux_nanos.h | 25 -- src/gpg_ux_nanox.c | 464 +++++++++++++------------------ src/gpg_vars.c | 25 +- src/gpg_vars.h | 25 +- 23 files changed, 1710 insertions(+), 1793 deletions(-) create mode 100644 src/gpg_ux.c create mode 100644 src/gpg_ux.h delete mode 100644 src/gpg_ux_nanos.h diff --git a/Makefile b/Makefile index b9ac244..e929b9e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # **************************************************************************** # Ledger App OpenPGP -# (c) 2016-2024 Ledger SAS. +# (c) 2024 Ledger SAS. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -40,6 +40,7 @@ else $(error APPNAME ($(APPNAME)) is not set or unknown) endif +# Application version APPVERSION_M = 2 APPVERSION_N = 0 APPVERSION_P = 0 @@ -140,11 +141,7 @@ DEFINES += HAVE_USB_CLASS_CCID DEFINES += HAVE_RSA ifeq ($(TARGET_NAME),TARGET_NANOS) -DEFINES += UI_NANO_S DEFINES += HAVE_UX_LEGACY -else -DEFINES += UI_NANO_X -DEFINES += GPG_SHAKE256 endif ######################### diff --git a/src/gpg_api.h b/src/gpg_api.h index 93ee4a6..29b3897 100644 --- a/src/gpg_api.h +++ b/src/gpg_api.h @@ -1,17 +1,19 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #ifndef GPG_API_H #define GPG_API_H @@ -28,19 +30,19 @@ void gpg_install(unsigned char app_state); void gpg_install_slot(gpg_key_slot_t *slot); int gpg_dispatch(void); -int gpg_apdu_select_data(unsigned int ref, int record); +void gpg_apdu_select_data(unsigned int ref, int record); int gpg_apdu_get_data(unsigned int ref); int gpg_apdu_get_next_data(unsigned int ref); int gpg_apdu_put_data(unsigned int ref); int gpg_apdu_get_key_data(unsigned int ref); int gpg_apdu_put_key_data(unsigned int ref); -void gpg_pso_derive_slot_seed(int slot, unsigned char *seed); -void gpg_pso_derive_key_seed(unsigned char *Sn, - unsigned char *key_name, - unsigned int idx, - unsigned char *Ski, - unsigned int Ski_len); +int gpg_pso_derive_slot_seed(int slot, unsigned char *seed); +int gpg_pso_derive_key_seed(unsigned char *Sn, + unsigned char *key_name, + unsigned int idx, + unsigned char *Ski, + unsigned int Ski_len); int gpg_apdu_pso(void); int gpg_apdu_internal_authenticate(void); int gpg_apdu_gen(void); @@ -55,11 +57,11 @@ int gpg_apdu_reset_retry_counter(void); gpg_pin_t *gpg_pin_get_pin(int id); int gpg_pin_is_blocked(gpg_pin_t *pin); int gpg_pin_is_verified(int pinID); -int gpg_pin_set_verified(int pinID, int verified); -int gpg_pin_check(gpg_pin_t *pin, int pinID, unsigned char *pin_val, unsigned int pin_len); -void gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len); +void gpg_pin_set_verified(int pinID, int verified); +int gpg_pin_check(gpg_pin_t *pin, int pinID, const unsigned char *pin_val, unsigned int pin_len); +int gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len); -int gpg_mse_reset(); +void gpg_mse_reset(); int gpg_apdu_mse(); /* ----------------------------------------------------------------------- */ @@ -70,7 +72,6 @@ void gpg_io_clear(void); void gpg_io_set_offset(unsigned int offset); void gpg_io_mark(void); void gpg_io_rewind(void); -void gpg_io_hole(unsigned int sz); void gpg_io_inserted(unsigned int len); void gpg_io_insert(unsigned char const *buffer, unsigned int len); void gpg_io_insert_u32(unsigned int v32); @@ -86,12 +87,12 @@ unsigned int gpg_io_fetch_u32(void); unsigned int gpg_io_fetch_u24(void); unsigned int gpg_io_fetch_u16(void); unsigned int gpg_io_fetch_u8(void); -int gpg_io_fetch_t(unsigned int *T); -int gpg_io_fetch_l(unsigned int *L); -int gpg_io_fetch_tl(unsigned int *T, unsigned int *L); -int gpg_io_fetch_nv(unsigned char *buffer, int len); +void gpg_io_fetch_t(unsigned int *T); +void gpg_io_fetch_l(unsigned int *L); +void gpg_io_fetch_tl(unsigned int *T, unsigned int *L); +void gpg_io_fetch_nv(unsigned char *buffer, int len); int gpg_io_fetch(unsigned char *buffer, int len); -int gpg_io_do(unsigned int io_flags); +void gpg_io_do(unsigned int io_flags); #endif diff --git a/src/gpg_challenge.c b/src/gpg_challenge.c index 1399008..a8327ee 100644 --- a/src/gpg_challenge.c +++ b/src/gpg_challenge.c @@ -1,39 +1,47 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" #include "cx_errors.h" int gpg_apdu_get_challenge() { - unsigned int olen, hlen; + unsigned int olen; cx_err_t error = CX_INTERNAL_ERROR; + unsigned char Sr[64]; - if ((G_gpg_vstate.io_p1 & 0x80) == 0x80) { - olen = G_gpg_vstate.io_p2; - } else { - olen = G_gpg_vstate.io_le; + switch (G_gpg_vstate.io_p1) { + case CHALLENGE_NOMINAL: + case PRIME_MODE: + olen = G_gpg_vstate.io_le; + break; + case SEEDED_MODE: + olen = G_gpg_vstate.io_p2; + break; + default: + return SW_WRONG_P1P2; } if (olen == 0 || olen > GPG_EXT_CHALLENGE_LENTH) { - THROW(SW_WRONG_LENGTH); return SW_WRONG_LENGTH; } - if ((G_gpg_vstate.io_p1 & 0x82) == 0x82) { + if (G_gpg_vstate.io_p1 == SEEDED_MODE) { + // Ledger Add-on: Seeded random unsigned int path[2]; - unsigned char chain[32]; - unsigned char Sr[64]; + unsigned char chain[32] = {0}; memset(chain, 0, 32); path[0] = 0x80475047; @@ -53,13 +61,11 @@ int gpg_apdu_get_challenge() { G_gpg_vstate.io_length, G_gpg_vstate.work.io_buffer, 32)); - hlen = cx_hash_get_size((const cx_hash_t *) &G_gpg_vstate.work.md.sha256); - CX_CHECK(cx_sha3_xof_init_no_throw(&G_gpg_vstate.work.md.sha3, 256, olen)); CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha3, CX_LAST, G_gpg_vstate.work.io_buffer, - hlen, + 32, G_gpg_vstate.work.io_buffer, olen)); } else { @@ -67,13 +73,15 @@ int gpg_apdu_get_challenge() { error = CX_OK; } - if ((G_gpg_vstate.io_p1 & 0x81) == 0x81) { + if (G_gpg_vstate.io_p1 == PRIME_MODE) { + // Ledger Add-on: Prime random CX_CHECK(cx_math_next_prime_no_throw(G_gpg_vstate.work.io_buffer, olen)); } end: + explicit_bzero(&Sr, sizeof(Sr)); if (error != CX_OK) { - THROW(error); + return error; } gpg_io_discard(0); gpg_io_inserted(olen); diff --git a/src/gpg_data.c b/src/gpg_data.c index 0218861..9df7f5f 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -1,30 +1,31 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" #include "cx_errors.h" -int gpg_apdu_select_data(unsigned int ref, int record) { +void gpg_apdu_select_data(unsigned int ref, int record) { G_gpg_vstate.DO_current = ref; G_gpg_vstate.DO_reccord = record; G_gpg_vstate.DO_offset = 0; - return SW_OK; } int gpg_apdu_get_data(unsigned int ref) { - int sw; + int sw = SW_UNKNOWN; if (G_gpg_vstate.DO_current != ref) { G_gpg_vstate.DO_current = ref; @@ -97,14 +98,14 @@ int gpg_apdu_get_data(unsigned int ref) { N_gpg_pstate->url.length); break; case 0x65: - /* Name, Language, Sex */ + /* Name, Language, salutation */ gpg_io_insert_tlv(0x5B, N_gpg_pstate->name.length, (const unsigned char *) N_gpg_pstate->name.value); gpg_io_insert_tlv(0x5F2D, N_gpg_pstate->lang.length, (const unsigned char *) N_gpg_pstate->lang.value); - gpg_io_insert_tlv(0x5F35, 1, (const unsigned char *) N_gpg_pstate->sex); + gpg_io_insert_tlv(0x5F35, 1, (const unsigned char *) N_gpg_pstate->salutation); break; /* ----------------- aid, histo, ext_length, ... ----------------- */ @@ -183,7 +184,7 @@ int gpg_apdu_get_data(unsigned int ref) { G_gpg_vstate.kslot->sig.CA.length); break; default: - sw = SW_RECORD_NOT_FOUND; + sw = SW_FILE_NOT_FOUND; } break; @@ -195,17 +196,22 @@ int gpg_apdu_get_data(unsigned int ref) { gpg_io_insert_u8(N_gpg_pstate->PW3.counter); break; + /* ----------------- General Feature management ----------------- */ + case 0x7F74: + gpg_io_insert_u8(C_gen_feature); + break; + default: /* WAT */ - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; } return sw; } int gpg_apdu_get_next_data(unsigned int ref) { - int sw; + int sw = SW_UNKNOWN; if ((ref != 0x7F21) || (G_gpg_vstate.DO_current != 0x7F21)) { return SW_CONDITIONS_NOT_SATISFIED; @@ -219,12 +225,13 @@ int gpg_apdu_get_next_data(unsigned int ref) { int gpg_apdu_put_data(unsigned int ref) { unsigned int t, l, sw; - unsigned int *ptr_l; - unsigned char *ptr_v; + unsigned int *ptr_l = NULL; + unsigned char *ptr_v = NULL; + void *pkey = NULL; + cx_aes_key_t aes_key = {0}; cx_err_t error = CX_INTERNAL_ERROR; G_gpg_vstate.DO_current = ref; - sw = SW_OK; switch (ref) { /* ----------------- Optional DO for private use ----------------- */ @@ -246,8 +253,8 @@ int gpg_apdu_put_data(unsigned int ref) { goto WRITE_PRIVATE_DO; WRITE_PRIVATE_DO: if (G_gpg_vstate.io_length > GPG_EXT_PRIVATE_DO_LENGTH) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write(ptr_v, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, @@ -258,89 +265,97 @@ int gpg_apdu_put_data(unsigned int ref) { /* ----------------- Config key slot ----------------- */ case 0x01F1: if (G_gpg_vstate.io_length != 3) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } if ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] != GPG_KEYS_SLOTS) || (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] >= GPG_KEYS_SLOTS) || (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] > 3)) { - THROW(SW_WRONG_DATA); - return 0; + sw = SW_WRONG_DATA; + break; } nvm_write((void *) N_gpg_pstate->config_slot, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, 3); + sw = SW_OK; break; case 0x01F2: if ((N_gpg_pstate->config_slot[2] & 2) == 0) { - THROW(SW_CONDITIONS_NOT_SATISFIED); - return 0; + sw = SW_CONDITIONS_NOT_SATISFIED; + break; } if ((G_gpg_vstate.io_length != 1) || (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset] >= GPG_KEYS_SLOTS)) { - THROW(SW_WRONG_DATA); - return 0; + sw = SW_WRONG_DATA; + break; } G_gpg_vstate.slot = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; + sw = SW_OK; break; /* ----------------- Config RSA exponent ----------------- */ case 0x01F8: { unsigned int e; if (G_gpg_vstate.io_length != 4) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } e = gpg_io_fetch_u32(); nvm_write((void *) &N_gpg_pstate->default_RSA_exponent, &e, sizeof(unsigned int)); + sw = SW_OK; break; } /* ----------------- Serial -----------------*/ case 0x4f: if (G_gpg_vstate.io_length != 4) { - THROW(SW_WRONG_LENGTH); + sw = SW_WRONG_LENGTH; + break; } nvm_write(G_gpg_vstate.kslot->serial, &G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset], 4); + sw = SW_OK; break; /* ----------------- Extended Header list -----------------*/ case 0x3FFF: { unsigned int len_e, len_p, len_q; unsigned int endof, ksz, reset_cnt; - gpg_key_t *keygpg; + gpg_key_t *keygpg = NULL; // fecth 4D gpg_io_fetch_tl(&t, &l); if (t != 0x4D) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; } // fecth B8/B6/A4 gpg_io_fetch_tl(&t, &l); reset_cnt = 0; switch (t) { - case 0xB6: + case KEY_SIG: keygpg = &G_gpg_vstate.kslot->sig; reset_cnt = 0x11111111; break; - case 0xA4: + case KEY_AUT: keygpg = &G_gpg_vstate.kslot->aut; break; - case 0xB8: + case KEY_DEC: keygpg = &G_gpg_vstate.kslot->dec; break; default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; + break; + } + if (keygpg == NULL) { + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; } // fecth 7f78 gpg_io_fetch_tl(&t, &l); if (t != 0x7f48) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; } len_e = 0; len_p = 0; @@ -366,30 +381,27 @@ int gpg_apdu_put_data(unsigned int ref) { case 0x99: break; default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; + return SW_REFERENCED_DATA_NOT_FOUND; } } // fecth 5f78 gpg_io_fetch_tl(&t, &l); if (t != 0x5f48) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; } // --- RSA KEY --- - if (keygpg->attributes.value[0] == 0x01) { - unsigned int e; + if (keygpg->attributes.value[0] == KEY_ID_RSA) { + unsigned int e = 0; unsigned char *p, *q, *pq; cx_rsa_public_key_t *rsa_pub; - cx_rsa_private_key_t *rsa_priv, *pkey; - unsigned int pkey_size; + cx_rsa_private_key_t *rsa_priv; + unsigned int pkey_size = 0; // check length - ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; - ksz = ksz >> 3; + ksz = U2BE(keygpg->attributes.value, 1) >> 3; rsa_pub = (cx_rsa_public_key_t *) &G_gpg_vstate.work.rsa.public; rsa_priv = (cx_rsa_private_key_t *) &G_gpg_vstate.work.rsa.private; - pkey = &keygpg->priv_key.rsa; switch (ksz) { case 1024 / 8: pkey_size = sizeof(cx_rsa_1024_private_key_t); @@ -408,8 +420,11 @@ int gpg_apdu_put_data(unsigned int ref) { pq = G_gpg_vstate.work.rsa.public4096.n; break; default: - THROW(SW_WRONG_DATA); - return 0; + break; + } + if (pkey_size == 0) { + sw = SW_WRONG_DATA; + break; } ksz = ksz >> 1; @@ -428,14 +443,17 @@ int gpg_apdu_put_data(unsigned int ref) { e = gpg_io_fetch_u8(); break; default: - THROW(SW_WRONG_DATA); - return 0; + break; + } + if (e == 0) { + sw = SW_WRONG_DATA; + break; } // move p,q over pub key, this only work because adr < adr

if ((len_p > ksz) || (len_q > ksz)) { - THROW(SW_WRONG_DATA); - return 0; + sw = SW_WRONG_DATA; + break; } p = G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset; q = p + len_p; @@ -446,29 +464,28 @@ int gpg_apdu_put_data(unsigned int ref) { // regenerate RSA private key unsigned char _e[4]; - _e[0] = e >> 24; - _e[1] = e >> 16; - _e[2] = e >> 8; - _e[3] = e >> 0; + U4BE_ENCODE(_e, 0, e); CX_CHECK(cx_rsa_generate_pair_no_throw(ksz << 1, rsa_pub, rsa_priv, _e, 4, pq)); // write keys nvm_write(&keygpg->pub_key.rsa, rsa_pub->e, 4); - nvm_write(pkey, rsa_priv, pkey_size); + nvm_write(&keygpg->priv_key.rsa, rsa_priv, pkey_size); if (reset_cnt) { reset_cnt = 0; nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); } + sw = SW_OK; } // --- ECC KEY --- - else if ((keygpg->attributes.value[0] == 19) || (keygpg->attributes.value[0] == 18) || - (keygpg->attributes.value[0] == 22)) { + else if ((keygpg->attributes.value[0] == KEY_ID_ECDH) || + (keygpg->attributes.value[0] == KEY_ID_ECDSA) || + (keygpg->attributes.value[0] == KEY_ID_EDDSA)) { unsigned int curve; curve = gpg_oid2curve(&keygpg->attributes.value[1], keygpg->attributes.length - 1); if (curve == 0) { - THROW(SW_WRONG_DATA); - return 0; + sw = SW_WRONG_DATA; + break; } ksz = gpg_curve2domainlen(curve); if (ksz == len_p) { @@ -492,12 +509,11 @@ int gpg_apdu_put_data(unsigned int ref) { nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); } } - + sw = SW_OK; } // --- UNSUPPORTED KEY --- else { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; + sw = SW_REFERENCED_DATA_NOT_FOUND; } break; } // endof of 3fff @@ -506,8 +522,8 @@ int gpg_apdu_put_data(unsigned int ref) { /* Name */ case 0x5B: if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->name.value)) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write((void *) N_gpg_pstate->name.value, G_gpg_vstate.work.io_buffer, @@ -515,12 +531,13 @@ int gpg_apdu_put_data(unsigned int ref) { nvm_write((void *) &N_gpg_pstate->name.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); + sw = SW_OK; break; /* Login data */ case 0x5E: if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->login.value)) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write((void *) N_gpg_pstate->login.value, G_gpg_vstate.work.io_buffer, @@ -528,12 +545,13 @@ int gpg_apdu_put_data(unsigned int ref) { nvm_write((void *) &N_gpg_pstate->login.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); + sw = SW_OK; break; /* Language preferences */ case 0x5F2D: if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->lang.value)) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write((void *) N_gpg_pstate->lang.value, G_gpg_vstate.work.io_buffer, @@ -541,22 +559,24 @@ int gpg_apdu_put_data(unsigned int ref) { nvm_write((void *) &N_gpg_pstate->lang.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); + sw = SW_OK; break; - /* Sex */ + /* salutation */ case 0x5F35: - if (G_gpg_vstate.io_length != sizeof(N_gpg_pstate->sex)) { - THROW(SW_WRONG_LENGTH); - return 0; + if (G_gpg_vstate.io_length != sizeof(N_gpg_pstate->salutation)) { + sw = SW_WRONG_LENGTH; + break; } - nvm_write((void *) N_gpg_pstate->sex, + nvm_write((void *) N_gpg_pstate->salutation, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + sw = SW_OK; break; /* Uniform resource locator */ case 0x5F50: if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->url.value)) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write((void *) N_gpg_pstate->url.value, G_gpg_vstate.work.io_buffer, @@ -564,6 +584,7 @@ int gpg_apdu_put_data(unsigned int ref) { nvm_write((void *) &N_gpg_pstate->url.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); + sw = SW_OK; break; /* ----------------- Cardholder certificate ----------------- */ @@ -573,25 +594,29 @@ int gpg_apdu_put_data(unsigned int ref) { case 0: ptr_l = &G_gpg_vstate.kslot->aut.CA.length; ptr_v = G_gpg_vstate.kslot->aut.CA.value; - goto WRITE_CA; + break; case 1: ptr_l = &G_gpg_vstate.kslot->sig.CA.length; ptr_v = G_gpg_vstate.kslot->sig.CA.value; - goto WRITE_CA; + break; case 2: ptr_l = &G_gpg_vstate.kslot->dec.CA.length; ptr_v = G_gpg_vstate.kslot->dec.CA.value; - goto WRITE_CA; + break; default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; + break; + } + if (ptr_v == NULL) { + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; } - WRITE_CA: if (G_gpg_vstate.io_length > GPG_EXT_CARD_HOLDER_CERT_LENTH) { - THROW(SW_WRONG_LENGTH); + sw = SW_WRONG_LENGTH; + break; } nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); + sw = SW_OK; break; /* ----------------- Algorithm attributes ----------------- */ @@ -609,16 +634,18 @@ int gpg_apdu_put_data(unsigned int ref) { goto WRITE_ATTRIBUTES; WRITE_ATTRIBUTES: if (G_gpg_vstate.io_length > 12) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); + sw = SW_OK; break; /* ----------------- PWS status ----------------- */ case 0xC4: gpg_io_fetch_nv((unsigned char *) N_gpg_pstate->PW_status, 1); + sw = SW_OK; break; /* ----------------- Fingerprints ----------------- */ @@ -642,10 +669,11 @@ int gpg_apdu_put_data(unsigned int ref) { goto WRITE_FINGERPRINTS; WRITE_FINGERPRINTS: if (G_gpg_vstate.io_length != 20) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 20); + sw = SW_OK; break; /* ----------------- Generation date/time ----------------- */ @@ -660,44 +688,43 @@ int gpg_apdu_put_data(unsigned int ref) { goto WRITE_DATE; WRITE_DATE: if (G_gpg_vstate.io_length != 4) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 4); + sw = SW_OK; break; /* ----------------- AES key ----------------- */ - { - void *pkey; - cx_aes_key_t aes_key; - case 0xD1: - pkey = (void *) &N_gpg_pstate->SM_enc; - goto init_aes_key; - case 0xD2: - pkey = (void *) &N_gpg_pstate->SM_mac; - goto init_aes_key; - case 0xD5: - pkey = &G_gpg_vstate.kslot->AES_dec; - goto init_aes_key; - init_aes_key: - CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length, - &aes_key)); - nvm_write(pkey, &aes_key, sizeof(cx_aes_key_t)); - break; + case 0xD1: + pkey = (void *) &N_gpg_pstate->SM_enc; + goto init_aes_key; + case 0xD2: + pkey = (void *) &N_gpg_pstate->SM_mac; + goto init_aes_key; + case 0xD5: + pkey = &G_gpg_vstate.kslot->AES_dec; + goto init_aes_key; + init_aes_key: + CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length, + &aes_key)); + nvm_write(pkey, &aes_key, sizeof(cx_aes_key_t)); + sw = SW_OK; + break; - /* AES key: one shot */ - case 0xF4: - CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length, - &aes_key)); - nvm_write((void *) &N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); - CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer + 16, - G_gpg_vstate.io_length, - &aes_key)); - nvm_write((void *) &N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); - break; - } + /* AES key: one shot */ + case 0xF4: + CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length, + &aes_key)); + nvm_write((void *) &N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); + CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer + 16, + G_gpg_vstate.io_length, + &aes_key)); + nvm_write((void *) &N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); + sw = SW_OK; + break; /* ----------------- RC ----------------- */ case 0xD3: { @@ -706,17 +733,15 @@ int gpg_apdu_put_data(unsigned int ref) { pin = gpg_pin_get_pin(PIN_ID_RC); if (G_gpg_vstate.io_length == 0) { nvm_write(pin, NULL, sizeof(gpg_pin_t)); - + sw = SW_OK; } else if ((G_gpg_vstate.io_length > GPG_MAX_PW_LENGTH) || (G_gpg_vstate.io_length < 8)) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; + sw = SW_WRONG_DATA; } else { - gpg_pin_set(pin, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - G_gpg_vstate.io_length); + sw = gpg_pin_set(pin, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + G_gpg_vstate.io_length); } - sw = SW_OK; break; } @@ -732,10 +757,11 @@ int gpg_apdu_put_data(unsigned int ref) { goto WRITE_UIF; WRITE_UIF: if (G_gpg_vstate.io_length != 2) { - THROW(SW_WRONG_LENGTH); - return 0; + sw = SW_WRONG_LENGTH; + break; } nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, 2); + sw = SW_OK; break; /* ----------------- WAT ----------------- */ @@ -747,21 +773,29 @@ int gpg_apdu_put_data(unsigned int ref) { gpg_io_discard(1); return sw; end: - THROW(error); + return error; } -static void gpg_init_keyenc(cx_aes_key_t *keyenc) { +static int gpg_init_keyenc(cx_aes_key_t *keyenc) { + int sw = SW_UNKNOWN; unsigned char seed[32]; cx_err_t error = CX_INTERNAL_ERROR; - gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); - gpg_pso_derive_key_seed(seed, (unsigned char *) PIC("key "), 1, seed, 16); + sw = gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); + if (sw != SW_OK) { + return sw; + } + sw = gpg_pso_derive_key_seed(seed, (unsigned char *) PIC("key "), 1, seed, 16); + if (sw != SW_OK) { + return sw; + } CX_CHECK(cx_aes_init_key_no_throw(seed, 16, keyenc)); end: if (error != CX_OK) { - THROW(error); + return error; } + return SW_OK; } // cmd @@ -770,9 +804,13 @@ int gpg_apdu_get_key_data(unsigned int ref) { cx_aes_key_t keyenc; gpg_key_t *keygpg; unsigned int len = 0; - gpg_init_keyenc(&keyenc); cx_err_t error = CX_INTERNAL_ERROR; + int sw = SW_UNKNOWN; + sw = gpg_init_keyenc(&keyenc); + if (sw != SW_OK) { + return sw; + } switch (ref) { case 0x00B6: keygpg = &G_gpg_vstate.kslot->sig; @@ -784,24 +822,18 @@ int gpg_apdu_get_key_data(unsigned int ref) { keygpg = &G_gpg_vstate.kslot->aut; break; default: - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } gpg_io_discard(1); // clear part gpg_io_insert_u32(TARGET_ID); - - // TODO; Check - // gpg_io_insert_u32(CX_APILEVEL); - // gpg_io_insert_u32(CX_COMPAT_APILEVEL); - gpg_io_insert_u32(get_api_level()); gpg_io_insert_u32(get_api_level()); // encrypted part switch (keygpg->attributes.value[0]) { - case 0x01: // RSA - // insert pubkey; + case KEY_ID_RSA: // RSA + // insert pubkey gpg_io_insert_u32(4); gpg_io_insert(keygpg->pub_key.rsa, 4); @@ -818,12 +850,13 @@ int gpg_apdu_get_key_data(unsigned int ref) { gpg_io_set_offset(IO_OFFSET_MARK); gpg_io_insert_u32(len); gpg_io_set_offset(IO_OFFSET_END); + sw = SW_OK; break; - case 18: // ECC - case 19: - case 22: - // insert pubkey; + case KEY_ID_ECDH: // ECC + case KEY_ID_ECDSA: + case KEY_ID_EDDSA: + // insert pubkey gpg_io_insert_u32(sizeof(cx_ecfp_640_public_key_t)); gpg_io_insert((unsigned char *) &keygpg->pub_key.ecfp640, sizeof(cx_ecfp_640_public_key_t)); @@ -841,15 +874,16 @@ int gpg_apdu_get_key_data(unsigned int ref) { gpg_io_set_offset(IO_OFFSET_MARK); gpg_io_insert_u32(len); gpg_io_set_offset(IO_OFFSET_END); + sw = SW_OK; break; default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; } - return SW_OK; + return sw; end: - THROW(error); + return error; } // cmd TID API COMPAT len_pub len_priv priv @@ -859,21 +893,24 @@ int gpg_apdu_put_key_data(unsigned int ref) { gpg_key_t *keygpg; unsigned int len; unsigned int offset; - gpg_init_keyenc(&keyenc); cx_err_t error = CX_INTERNAL_ERROR; + int sw = SW_UNKNOWN; + sw = gpg_init_keyenc(&keyenc); + if (sw != SW_OK) { + return sw; + } switch (ref) { - case 0xB6: + case KEY_SIG: keygpg = &G_gpg_vstate.kslot->sig; break; - case 0xB8: + case KEY_DEC: keygpg = &G_gpg_vstate.kslot->dec; break; - case 0xA4: + case KEY_AUT: keygpg = &G_gpg_vstate.kslot->aut; break; default: - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } @@ -881,24 +918,23 @@ int gpg_apdu_put_key_data(unsigned int ref) { gpg_io_fetch_u32(); /* unsigned int cx_apilevel = */ gpg_io_fetch_u32(); - /* unsigned int cx_compat_apilevel = */ - gpg_io_fetch_u32(); switch (keygpg->attributes.value[0]) { // RSA - case 0x01: - // insert pubkey; + case KEY_ID_RSA: + // insert pubkey len = gpg_io_fetch_u32(); if (len != 4) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; + sw = SW_WRONG_DATA; + break; } gpg_io_fetch_nv(keygpg->pub_key.rsa, len); // insert privkey len = gpg_io_fetch_u32(); if (len > (G_gpg_vstate.io_length - G_gpg_vstate.io_offset)) { - THROW(SW_WRONG_DATA); + sw = SW_WRONG_DATA; + break; } offset = G_gpg_vstate.io_offset; gpg_io_discard(0); @@ -910,29 +946,32 @@ int gpg_apdu_put_key_data(unsigned int ref) { G_gpg_vstate.work.io_buffer, &len)); if (len != sizeof(cx_rsa_4096_private_key_t)) { - THROW(SW_WRONG_DATA); + sw = SW_WRONG_DATA; + break; } nvm_write((unsigned char *) &keygpg->priv_key.rsa4096, G_gpg_vstate.work.io_buffer, len); + sw = SW_OK; break; // ECC - case 18: /* 12h */ - case 19: /* 13h */ - case 22: /* 16h */ - // insert pubkey; + case KEY_ID_ECDH: // ECC + case KEY_ID_ECDSA: + case KEY_ID_EDDSA: + // insert pubkey len = gpg_io_fetch_u32(); if (len != sizeof(cx_ecfp_640_public_key_t)) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; + sw = SW_WRONG_DATA; + break; } gpg_io_fetch_nv((unsigned char *) &keygpg->pub_key.ecfp640, len); // insert privkey len = gpg_io_fetch_u32(); if (len > (G_gpg_vstate.io_length - G_gpg_vstate.io_offset)) { - THROW(SW_WRONG_DATA); + sw = SW_WRONG_DATA; + break; } offset = G_gpg_vstate.io_offset; gpg_io_discard(0); @@ -945,20 +984,21 @@ int gpg_apdu_put_key_data(unsigned int ref) { G_gpg_vstate.work.io_buffer, &len)); if (len != sizeof(cx_ecfp_640_private_key_t)) { - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; + sw = SW_WRONG_DATA; + break; } nvm_write((unsigned char *) &keygpg->priv_key.ecfp640, G_gpg_vstate.work.io_buffer, len); + sw = SW_OK; break; default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; + sw = SW_REFERENCED_DATA_NOT_FOUND; + break; } gpg_io_discard(1); - return SW_OK; + return sw; end: - THROW(error); + return error; } diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index d3bc82f..8d17e2f 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -1,116 +1,101 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" -void gpg_check_access_ins() { - unsigned int ref; - - ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; +static int gpg_check_access_ins() { + int sw = SW_UNKNOWN; switch (G_gpg_vstate.io_ins) { case INS_EXIT: if (gpg_pin_is_verified(PIN_ID_PW2)) { - return; + sw = SW_OK; } break; -#ifdef GPG_LOG -#warning GPG_LOG activated - case INS_GET_LOG: - return; -#endif - - case INS_SELECT: - return; - case INS_GET_DATA: - case INS_GET_NEXT_DATA: - return; - - case INS_VERIFY: - return; - - case INS_CHANGE_REFERENCE_DATA: - return; case INS_RESET_RETRY_COUNTER: if (gpg_pin_is_verified(PIN_ID_PW3) || gpg_pin_is_verified(PIN_ID_RC)) { - return; + sw = SW_OK; } break; - case INS_PUT_DATA: - case INS_PUT_DATA_ODD: - return; - case INS_GEN_ASYM_KEYPAIR: - if (G_gpg_vstate.io_p1 == 0x81) { - return; - } - if (gpg_pin_is_verified(PIN_ID_PW3)) { - return; + if ((G_gpg_vstate.io_p1 == ((READ_ASYM_KEY >> 8) & 0xFF)) || + (gpg_pin_is_verified(PIN_ID_PW3))) { + sw = SW_OK; } break; - case INS_MSE: - return; - case INS_PSO: - if ((ref == 0x9e9a) && gpg_pin_is_verified(PIN_ID_PW1)) { + if ((G_gpg_vstate.io_p1p2 == PSO_CDS) && gpg_pin_is_verified(PIN_ID_PW1)) { // pso:sign if (N_gpg_pstate->PW_status[0] == 0) { gpg_pin_set_verified(PIN_ID_PW1, 0); } - return; + sw = SW_OK; + break; } - if (((ref == 0x8086) || (ref == 0x8680)) && gpg_pin_is_verified(PIN_ID_PW2)) { + if (((G_gpg_vstate.io_p1p2 == PSO_DEC) || (G_gpg_vstate.io_p1p2 == PSO_ENC)) && + gpg_pin_is_verified(PIN_ID_PW2)) { // pso:dec/enc - return; + sw = SW_OK; } break; case INS_INTERNAL_AUTHENTICATE: if (gpg_pin_is_verified(PIN_ID_PW2)) { - return; + sw = SW_OK; } break; - case INS_GET_CHALLENGE: - return; - case INS_TERMINATE_DF: if (gpg_pin_is_verified(PIN_ID_PW3)) { - return; + sw = SW_OK; } break; +#ifdef GPG_LOG +#warning GPG_LOG activated + case INS_GET_LOG: +#endif + case INS_SELECT: + case INS_GET_DATA: + case INS_GET_NEXT_DATA: + case INS_VERIFY: + case INS_CHANGE_REFERENCE_DATA: + case INS_PUT_DATA: + case INS_PUT_DATA_ODD: + case INS_MSE: + case INS_GET_CHALLENGE: case INS_ACTIVATE_FILE: - return; + sw = SW_OK; + break; default: - THROW(SW_INS_NOT_SUPPORTED); + sw = SW_INS_NOT_SUPPORTED; break; } - THROW(SW_CONDITIONS_NOT_SATISFIED); + return sw; } -void gpg_check_access_read_DO() { - unsigned int ref; - - ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; +static int gpg_check_access_read_DO() { + int sw = SW_UNKNOWN; - switch (ref) { + switch (G_gpg_vstate.io_p1p2) { // ALWAYS case 0x0101: case 0x0102: @@ -152,12 +137,13 @@ void gpg_check_access_read_DO() { case 0x00D6: case 0x00D7: case 0x00D8: - return; + sw = SW_OK; + break; // PW2 case 0x0103: if (gpg_pin_is_verified(PIN_ID_PW2)) { - return; + sw = SW_OK; } break; @@ -167,28 +153,26 @@ void gpg_check_access_read_DO() { case 0x00B8: case 0x0104: if (gpg_pin_is_verified(PIN_ID_PW3)) { - return; + sw = SW_OK; } break; + default: + sw = SW_CONDITIONS_NOT_SATISFIED; + break; } - - THROW(SW_CONDITIONS_NOT_SATISFIED); + return sw; } -char debugbuff[5]; - -void gpg_check_access_write_DO() { - unsigned int ref; - - ref = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; +static int gpg_check_access_write_DO() { + int sw = SW_UNKNOWN; - switch (ref) { + switch (G_gpg_vstate.io_p1p2) { // PW2 case 0x0101: case 0x0103: case 0x01F2: if (gpg_pin_is_verified(PIN_ID_PW2)) { - return; + sw = SW_OK; } break; @@ -234,26 +218,26 @@ void gpg_check_access_write_DO() { case 0x00D7: case 0x00D8: if (gpg_pin_is_verified(PIN_ID_PW3)) { - return; + sw = SW_OK; } break; + default: + sw = SW_CONDITIONS_NOT_SATISFIED; + break; } - THROW(SW_CONDITIONS_NOT_SATISFIED); + return sw; } /* assume command is fully received */ int gpg_dispatch() { unsigned int tag, t, l; - int sw; + int sw = SW_UNKNOWN; - if ((G_gpg_vstate.io_cla != 0x00) && (G_gpg_vstate.io_cla != 0x10) && - (G_gpg_vstate.io_cla != 0xEF)) { - THROW(SW_CLA_NOT_SUPPORTED); + if ((G_gpg_vstate.io_cla != CLA_APP_DEF) && (G_gpg_vstate.io_cla != CLA_APP_CHAIN) && + (G_gpg_vstate.io_cla != CLA_APP_APDU_PIN)) { return SW_CLA_NOT_SUPPORTED; } - tag = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; - switch (G_gpg_vstate.io_ins) { #ifdef GPG_LOG case INS_GET_LOG: @@ -264,8 +248,7 @@ int gpg_dispatch() { /* --- SELECT --- */ case INS_SELECT: - sw = gpg_apdu_select(); - return sw; + return gpg_apdu_select(); break; /* --- ACTIVATE/TERMINATE FILE --- */ @@ -274,27 +257,30 @@ int gpg_dispatch() { if (N_gpg_pstate->histo[7] == STATE_TERMINATE) { gpg_install(STATE_ACTIVATE); } - return (SW_OK); + return SW_OK; break; case INS_TERMINATE_DF: gpg_io_discard(0); if (gpg_pin_is_verified(PIN_ID_PW3) || (N_gpg_pstate->PW3.counter == 0)) { gpg_install(STATE_TERMINATE); - return (SW_OK); + return SW_OK; break; } - THROW(SW_CONDITIONS_NOT_SATISFIED); + return SW_CONDITIONS_NOT_SATISFIED; break; } /* Other commands allowed if not terminated */ if (N_gpg_pstate->histo[7] != STATE_ACTIVATE) { - THROW(SW_STATE_TERMINATED); + return SW_STATE_TERMINATED; } /* Process */ - gpg_check_access_ins(); + sw = gpg_check_access_ins(); + if (sw != SW_OK) { + return sw; + } switch (G_gpg_vstate.io_ins) { #ifdef GPG_DEBUG_APDU @@ -316,86 +302,104 @@ int gpg_dispatch() { /* --- DATA --- */ case INS_SELECT_DATA: - if ((G_gpg_vstate.io_p1 > 2) || (G_gpg_vstate.io_p2 != 0x04)) { - THROW(SW_WRONG_P1P2); + if ((G_gpg_vstate.io_p1 > SELECT_MAX_INSTANCE) || (G_gpg_vstate.io_p2 != SELECT_SKIP)) { + sw = SW_WRONG_P1P2; + break; } gpg_io_fetch_tl(&t, &l); if (t != 0x60) { // TODO add l check - THROW(SW_DATA_INVALID); + sw = SW_WRONG_DATA; + break; } gpg_io_fetch_tl(&t, &l); if (t != 0x5C) { // TODO add l check - THROW(SW_WRONG_DATA); + sw = SW_WRONG_DATA; + break; } if (l == 1) { tag = gpg_io_fetch_u8(); } else if (l == 2) { tag = gpg_io_fetch_u16(); } else { - THROW(SW_WRONG_DATA); + sw = SW_WRONG_DATA; + break; } - sw = gpg_apdu_select_data(tag, G_gpg_vstate.io_p1); + gpg_apdu_select_data(tag, G_gpg_vstate.io_p1); + sw = SW_OK; break; case INS_GET_DATA: - gpg_check_access_read_DO(); - switch (tag) { + sw = gpg_check_access_read_DO(); + if (sw != SW_OK) { + break; + } + switch (G_gpg_vstate.io_p1p2) { case 0x00B6: case 0x00A4: case 0x00B8: - sw = gpg_apdu_get_key_data(tag); + sw = gpg_apdu_get_key_data(G_gpg_vstate.io_p1p2); break; default: - sw = gpg_apdu_get_data(tag); + sw = gpg_apdu_get_data(G_gpg_vstate.io_p1p2); break; } break; case INS_GET_NEXT_DATA: - gpg_check_access_read_DO(); - sw = gpg_apdu_get_next_data(tag); + sw = gpg_check_access_read_DO(); + if (sw != SW_OK) { + break; + } + sw = gpg_apdu_get_next_data(G_gpg_vstate.io_p1p2); break; case INS_PUT_DATA_ODD: case INS_PUT_DATA: - gpg_check_access_write_DO(); - switch (tag) { + sw = gpg_check_access_write_DO(); + if (sw != SW_OK) { + break; + } + switch (G_gpg_vstate.io_p1p2) { case 0x00B6: case 0x00A4: case 0x00B8: - sw = gpg_apdu_put_key_data(tag); + sw = gpg_apdu_put_key_data(G_gpg_vstate.io_p1p2); break; default: - sw = gpg_apdu_put_data(tag); + sw = gpg_apdu_put_data(G_gpg_vstate.io_p1p2); break; } break; /* --- PIN -- */ case INS_VERIFY: - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || - (G_gpg_vstate.io_p2 == 0x83)) { + if ((G_gpg_vstate.io_p2 == PIN_ID_PW1) || (G_gpg_vstate.io_p2 == PIN_ID_PW2) || + (G_gpg_vstate.io_p2 == PIN_ID_PW3)) { sw = gpg_apdu_verify(); break; } - THROW(SW_INCORRECT_P1P2); + sw = SW_WRONG_P1P2; + break; case INS_CHANGE_REFERENCE_DATA: - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x83)) { + if ((G_gpg_vstate.io_p2 == PIN_ID_PW1) || (G_gpg_vstate.io_p2 == PIN_ID_PW3)) { sw = gpg_apdu_change_ref_data(); break; } - THROW(SW_INCORRECT_P1P2); + sw = SW_WRONG_P1P2; + break; case INS_RESET_RETRY_COUNTER: - if ((G_gpg_vstate.io_p2 == 0x81) && - ((G_gpg_vstate.io_p1 == 0) || (G_gpg_vstate.io_p1 == 2))) { + if ((G_gpg_vstate.io_p2 == PIN_ID_PW1) && + ((G_gpg_vstate.io_p1 == RESET_RETRY_WITH_CODE) || + (G_gpg_vstate.io_p1 == RESET_RETRY_WITH_PW3))) { sw = gpg_apdu_reset_retry_counter(); break; } - THROW(SW_INCORRECT_P1P2); + sw = SW_WRONG_P1P2; + break; /* --- Key Management --- */ case INS_GEN_ASYM_KEYPAIR: @@ -417,9 +421,8 @@ int gpg_dispatch() { break; default: - THROW(SW_INS_NOT_SUPPORTED); + sw = SW_INS_NOT_SUPPORTED; break; } - return sw; } diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 21f12ca..ec96dc5 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -1,17 +1,19 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" #include "cx_ram.h" @@ -20,7 +22,7 @@ /* @in slot slot num [0 ; GPG_KEYS_SLOTS[ * @out seed 32 bytes master seed for given slot */ -void gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { +int gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { unsigned int path[2]; unsigned char chain[32]; cx_err_t error = CX_INTERNAL_ERROR; @@ -32,8 +34,9 @@ void gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { end: if (error != CX_OK) { - THROW(error); + return error; } + return SW_OK; } /* @in Sn master seed slot number @@ -42,15 +45,14 @@ void gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { * @out Ski generated sub_seed * @in Ski_len sub-seed length */ -void gpg_pso_derive_key_seed(unsigned char *Sn, - unsigned char *key_name, - unsigned int idx, - unsigned char *Ski, - unsigned int Ski_len) { +int gpg_pso_derive_key_seed(unsigned char *Sn, + unsigned char *key_name, + unsigned int idx, + unsigned char *Ski, + unsigned int Ski_len) { unsigned char h[32]; cx_err_t error = CX_INTERNAL_ERROR; - h[0] = idx >> 8; - h[1] = idx; + U2BE_ENCODE(h, 0, idx); cx_sha256_init(&G_gpg_vstate.work.md.sha256); CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, 0, Sn, 32, NULL, 0)); @@ -61,266 +63,288 @@ void gpg_pso_derive_key_seed(unsigned char *Sn, NULL, 0)); CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, CX_LAST, h, 2, h, 32)); -#ifdef GPG_SHAKE256 CX_CHECK(cx_shake256_init_no_throw(&G_gpg_vstate.work.md.sha3, Ski_len)); CX_CHECK(cx_sha3_update(&G_gpg_vstate.work.md.sha3, h, 32)); CX_CHECK(cx_sha3_final(&G_gpg_vstate.work.md.sha3, Ski)); -#else - CX_CHECK(cx_sha3_xof_init_no_throw(&G_gpg_vstate.work.md.sha3, 256, Ski_len)); - CX_CHECK( - cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha3, CX_LAST, h, 32, Ski, Ski_len)); -#endif + end: if (error != CX_OK) { - THROW(error); + return error; } + return SW_OK; +} + +static int gpg_gen_rsa_kyey(gpg_key_t *keygpg, uint8_t *name) { + cx_rsa_public_key_t *rsa_pub = NULL; + cx_rsa_private_key_t *rsa_priv = NULL; + uint8_t *pq = NULL; + uint32_t ksz = 0, reset_cnt = 0, pkey_size = 0; + int sw = SW_UNKNOWN; + cx_err_t error = CX_INTERNAL_ERROR; + uint8_t seed[66] = {0}; + + ksz = U2BE(keygpg->attributes.value, 1) >> 3; + rsa_pub = (cx_rsa_public_key_t *) &G_gpg_vstate.work.rsa.public; + rsa_priv = (cx_rsa_private_key_t *) &G_gpg_vstate.work.rsa.private; + switch (ksz) { + case 1024 / 8: + pkey_size = sizeof(cx_rsa_1024_private_key_t); + break; + case 2048 / 8: + pkey_size = sizeof(cx_rsa_2048_private_key_t); + break; + case 3072 / 8: + pkey_size = sizeof(cx_rsa_3072_private_key_t); + break; + case 4096 / 8: + pkey_size = sizeof(cx_rsa_4096_private_key_t); + break; + default: + break; + } + if (pkey_size == 0) { + return SW_WRONG_DATA; + } + + if ((G_gpg_vstate.io_p2 == SEEDED_MODE) || (G_gpg_vstate.seed_mode)) { + pq = &rsa_pub->n[0]; + unsigned int size; + size = ksz >> 1; + sw = gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); + if (sw != SW_OK) { + return sw; + } + sw = gpg_pso_derive_key_seed(seed, name, 1, pq, size); + if (sw != SW_OK) { + return sw; + } + sw = gpg_pso_derive_key_seed(seed, name, 2, pq + size, size); + if (sw != SW_OK) { + return sw; + } + *pq |= 0x80; + *(pq + size) |= 0x80; + CX_CHECK(cx_math_next_prime_no_throw(pq, size)); + CX_CHECK(cx_math_next_prime_no_throw(pq + size, size)); + } + + CX_CHECK( + cx_rsa_generate_pair_no_throw(ksz, + rsa_pub, + rsa_priv, + (const unsigned char *) N_gpg_pstate->default_RSA_exponent, + 4, + pq)); + + nvm_write(&keygpg->priv_key.rsa, rsa_priv, pkey_size); + nvm_write(&keygpg->pub_key.rsa[0], rsa_pub->e, 4); + + nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); + gpg_io_clear(); + return SW_OK; + +end: + return error; +} + +static int gpg_read_rsa_kyey(gpg_key_t *keygpg) { + uint32_t ksz = 0; + + gpg_io_discard(1); + // check length + ksz = U2BE(keygpg->attributes.value, 1) >> 3; + gpg_io_mark(); + switch (ksz) { + case 1024 / 8: + if (keygpg->priv_key.rsa1024.size == 0) { + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa1024.n); + break; + case 2048 / 8: + if (keygpg->priv_key.rsa2048.size == 0) { + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa2048.n); + break; + case 3072 / 8: + if (keygpg->priv_key.rsa3072.size == 0) { + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa3072.n); + break; + case 4096 / 8: + if (keygpg->priv_key.rsa4096.size == 0) { + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa4096.n); + break; + } + gpg_io_insert_tlv(0x82, 4, keygpg->pub_key.rsa); + + return SW_OK; +} + +static int gpg_gen_ecc_kyey(gpg_key_t *keygpg, uint8_t *name) { + uint32_t curve = 0, keepprivate = 0; + uint32_t ksz = 0, reset_cnt = 0; + int sw = SW_UNKNOWN; + cx_err_t error = CX_INTERNAL_ERROR; + uint8_t seed[66] = {0}; + + curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); + if (curve == CX_CURVE_NONE) { + return SW_REFERENCED_DATA_NOT_FOUND; + } + if ((G_gpg_vstate.io_p2 == SEEDED_MODE) || (G_gpg_vstate.seed_mode)) { + ksz = gpg_curve2domainlen(curve); + sw = gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); + if (sw != SW_OK) { + return sw; + } + sw = gpg_pso_derive_key_seed(seed, name, 1, seed, ksz); + if (sw != SW_OK) { + return sw; + } + CX_CHECK( + cx_ecfp_init_private_key_no_throw(curve, seed, ksz, &G_gpg_vstate.work.ecfp.private)); + keepprivate = 1; + } + + CX_CHECK(cx_ecfp_generate_pair_no_throw(curve, + &G_gpg_vstate.work.ecfp.public, + &G_gpg_vstate.work.ecfp.private, + keepprivate)); + nvm_write(&keygpg->priv_key.ecfp, + &G_gpg_vstate.work.ecfp.private, + sizeof(cx_ecfp_private_key_t)); + nvm_write(&keygpg->pub_key.ecfp, &G_gpg_vstate.work.ecfp.public, sizeof(cx_ecfp_public_key_t)); + + nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); + gpg_io_clear(); + return SW_OK; + +end: + return error; +} + +static int gpg_read_ecc_kyey(gpg_key_t *keygpg) { + uint32_t curve = 0; + uint32_t i, len; + cx_err_t error = CX_INTERNAL_ERROR; + + if (keygpg->pub_key.ecfp256.W_len == 0) { + return SW_REFERENCED_DATA_NOT_FOUND; + } + gpg_io_discard(1); + gpg_io_mark(); + curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); + if (curve == CX_CURVE_Ed25519) { + memmove(G_gpg_vstate.work.io_buffer + 128, + keygpg->pub_key.ecfp256.W, + keygpg->pub_key.ecfp256.W_len); + CX_CHECK(cx_edwards_compress_point_no_throw(CX_CURVE_Ed25519, + G_gpg_vstate.work.io_buffer + 128, + 65)); + gpg_io_insert_tlv(0x86, 32, + G_gpg_vstate.work.io_buffer + 129); // 129: discard 02 + } else if (curve == CX_CURVE_Curve25519) { + len = keygpg->pub_key.ecfp256.W_len - 1; + for (i = 0; i <= len; i++) { + G_gpg_vstate.work.io_buffer[128 + i] = keygpg->pub_key.ecfp256.W[len - i]; + } + gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 128); + } else { + gpg_io_insert_tlv(0x86, + keygpg->pub_key.ecfp256.W_len, + (unsigned char *) &keygpg->pub_key.ecfp256.W); + } + return SW_OK; + +end: + return error; } /* assume command is fully received */ int gpg_apdu_gen() { - unsigned int t, l, ksz, reset_cnt; - gpg_key_t *keygpg; - unsigned char seed[66]; - unsigned char *name; - cx_err_t error = CX_INTERNAL_ERROR; + uint32_t t, l; + gpg_key_t *keygpg = NULL; + uint8_t *name = NULL; + int sw = SW_UNKNOWN; - switch ((G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2) { - case 0x8000: - case 0x8001: - case 0x8100: + switch (G_gpg_vstate.io_p1p2) { + case GEN_ASYM_KEY: + case GEN_ASYM_KEY_SEED: + case READ_ASYM_KEY: break; default: - THROW(SW_INCORRECT_P1P2); - return SW_INCORRECT_P1P2; + return SW_WRONG_P1P2; } if (G_gpg_vstate.io_lc != 2) { - THROW(SW_WRONG_LENGTH); return SW_WRONG_LENGTH; } gpg_io_fetch_tl(&t, &l); gpg_io_discard(1); - reset_cnt = 0; switch (t) { - case 0xB6: + case KEY_SIG: keygpg = &G_gpg_vstate.kslot->sig; name = (unsigned char *) PIC("sig "); - reset_cnt = 0; break; - case 0xA4: + case KEY_AUT: keygpg = &G_gpg_vstate.kslot->aut; name = (unsigned char *) PIC("aut "); break; - case 0xB8: + case KEY_DEC: keygpg = &G_gpg_vstate.kslot->dec; name = (unsigned char *) PIC("dec "); break; default: - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; + break; + } + if (keygpg == NULL) { + return SW_WRONG_DATA; } - switch ((G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2) { + switch (G_gpg_vstate.io_p1p2) { // -- generate keypair --- - case 0x8000: - case 0x8001: - // RSA - if (keygpg->attributes.value[0] == 0x01) { - unsigned char *pq; - cx_rsa_public_key_t *rsa_pub; - cx_rsa_private_key_t *rsa_priv, *pkey; - unsigned int pkey_size; - - ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; - ksz = ksz >> 3; - rsa_pub = (cx_rsa_public_key_t *) &G_gpg_vstate.work.rsa.public; - rsa_priv = (cx_rsa_private_key_t *) &G_gpg_vstate.work.rsa.private; - pkey = &keygpg->priv_key.rsa; - switch (ksz) { - case 1024 / 8: - pkey_size = sizeof(cx_rsa_1024_private_key_t); - break; - case 2048 / 8: - pkey_size = sizeof(cx_rsa_2048_private_key_t); - break; - case 3072 / 8: - pkey_size = sizeof(cx_rsa_3072_private_key_t); - break; - case 4096 / 8: - pkey_size = sizeof(cx_rsa_4096_private_key_t); - break; - default: - THROW(SW_WRONG_DATA); - } - pq = NULL; - if ((G_gpg_vstate.io_p2 == 0x01) || (G_gpg_vstate.seed_mode)) { - pq = &rsa_pub->n[0]; - unsigned int size; - size = ksz >> 1; - gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); - gpg_pso_derive_key_seed(seed, name, 1, pq, size); - gpg_pso_derive_key_seed(seed, name, 2, pq + size, size); - *pq |= 0x80; - *(pq + size) |= 0x80; - CX_CHECK(cx_math_next_prime_no_throw(pq, size)); - CX_CHECK(cx_math_next_prime_no_throw(pq + size, size)); - } - - CX_CHECK(cx_rsa_generate_pair_no_throw( - ksz, - rsa_pub, - rsa_priv, - (const unsigned char *) N_gpg_pstate->default_RSA_exponent, - 4, - pq)); - - nvm_write(pkey, rsa_priv, pkey_size); - nvm_write(&keygpg->pub_key.rsa[0], rsa_pub->e, 4); - if (reset_cnt) { - reset_cnt = 0; - nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); - } - gpg_io_clear(); + case GEN_ASYM_KEY: + case GEN_ASYM_KEY_SEED: - goto send_rsa_pub; - } - // ECC - if ((keygpg->attributes.value[0] == 18) || (keygpg->attributes.value[0] == 19) || - (keygpg->attributes.value[0] == 22)) { - unsigned int curve, keepprivate; - keepprivate = 0; - curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); - if (curve == CX_CURVE_NONE) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - if ((G_gpg_vstate.io_p2 == 0x01) || (G_gpg_vstate.seed_mode)) { - ksz = gpg_curve2domainlen(curve); - gpg_pso_derive_slot_seed(G_gpg_vstate.slot, seed); - gpg_pso_derive_key_seed(seed, name, 1, seed, ksz); - CX_CHECK(cx_ecfp_init_private_key_no_throw(curve, - seed, - ksz, - &G_gpg_vstate.work.ecfp.private)); - keepprivate = 1; + if (keygpg->attributes.value[0] == KEY_ID_RSA) { + // RSA + sw = gpg_gen_rsa_kyey(keygpg, name); + if (sw != SW_OK) { + break; } - - CX_CHECK(cx_ecfp_generate_pair_no_throw(curve, - &G_gpg_vstate.work.ecfp.public, - &G_gpg_vstate.work.ecfp.private, - keepprivate)); - nvm_write(&keygpg->priv_key.ecfp, - &G_gpg_vstate.work.ecfp.private, - sizeof(cx_ecfp_private_key_t)); - nvm_write(&keygpg->pub_key.ecfp, - &G_gpg_vstate.work.ecfp.public, - sizeof(cx_ecfp_public_key_t)); - if (reset_cnt) { - reset_cnt = 0; - nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); + } else if ((keygpg->attributes.value[0] == KEY_ID_ECDH) || + (keygpg->attributes.value[0] == KEY_ID_ECDSA) || + (keygpg->attributes.value[0] == KEY_ID_EDDSA)) { + // ECC + sw = gpg_gen_ecc_kyey(keygpg, name); + if (sw != SW_OK) { + break; } - gpg_io_clear(); - goto send_ecc_pub; } - break; + __attribute__((fallthrough)); // --- read pubkey --- - case 0x8100: - if (keygpg->attributes.value[0] == 0x01) { - /// read RSA - send_rsa_pub: - gpg_io_discard(1); - // check length - ksz = (keygpg->attributes.value[1] << 8) | keygpg->attributes.value[2]; - ksz = ksz >> 3; - gpg_io_mark(); - switch (ksz) { - case 1024 / 8: - if (keygpg->priv_key.rsa1024.size == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa1024.n); - break; - case 2048 / 8: - if (keygpg->priv_key.rsa2048.size == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa2048.n); - break; - case 3072 / 8: - if (keygpg->priv_key.rsa3072.size == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa3072.n); - break; - case 4096 / 8: - if (keygpg->priv_key.rsa4096.size == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa4096.n); - break; - } - gpg_io_insert_tlv(0x82, 4, keygpg->pub_key.rsa); - - l = G_gpg_vstate.io_length; - gpg_io_set_offset(IO_OFFSET_MARK); - gpg_io_insert_tl(0x7f49, l); - gpg_io_set_offset(IO_OFFSET_END); - - return SW_OK; - } - - if ((keygpg->attributes.value[0] == 18) || (keygpg->attributes.value[0] == 19) || - (keygpg->attributes.value[0] == 22)) { - unsigned int curve; - /// read ECC - send_ecc_pub: - - if (keygpg->pub_key.ecfp256.W_len == 0) { - THROW(SW_REFERENCED_DATA_NOT_FOUND); - return 0; - } - gpg_io_discard(1); - gpg_io_mark(); - curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); - if (curve == CX_CURVE_Ed25519) { - memmove(G_gpg_vstate.work.io_buffer + 128, - keygpg->pub_key.ecfp256.W, - keygpg->pub_key.ecfp256.W_len); - CX_CHECK(cx_edwards_compress_point_no_throw(CX_CURVE_Ed25519, - G_gpg_vstate.work.io_buffer + 128, - 65)); - gpg_io_insert_tlv(0x86, - 32, - G_gpg_vstate.work.io_buffer + 129); // 129: discard 02 - } else if (curve == CX_CURVE_Curve25519) { - unsigned int i, len; - len = keygpg->pub_key.ecfp256.W_len - 1; - for (i = 0; i <= len; i++) { - G_gpg_vstate.work.io_buffer[128 + i] = keygpg->pub_key.ecfp256.W[len - i]; - } - gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 128); - } else { - gpg_io_insert_tlv(0x86, - keygpg->pub_key.ecfp256.W_len, - (unsigned char *) &keygpg->pub_key.ecfp256.W); - } - l = G_gpg_vstate.io_length; - gpg_io_set_offset(IO_OFFSET_MARK); - gpg_io_insert_tl(0x7f49, l); - gpg_io_set_offset(IO_OFFSET_END); - return SW_OK; + case READ_ASYM_KEY: + if (keygpg->attributes.value[0] == KEY_ID_RSA) { + // read RSA + sw = gpg_read_rsa_kyey(keygpg); + } else if ((keygpg->attributes.value[0] == KEY_ID_ECDH) || + (keygpg->attributes.value[0] == KEY_ID_ECDSA) || + (keygpg->attributes.value[0] == KEY_ID_EDDSA)) { + // read ECC + sw = gpg_read_ecc_kyey(keygpg); } + l = G_gpg_vstate.io_length; + gpg_io_set_offset(IO_OFFSET_MARK); + gpg_io_insert_tl(0x7f49, l); + gpg_io_set_offset(IO_OFFSET_END); break; } - - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; -end: - THROW(error); + return sw; } diff --git a/src/gpg_init.c b/src/gpg_init.c index 5b016df..127a3c2 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -1,17 +1,19 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" #include "usbd_ccid_if.h" @@ -219,6 +221,17 @@ const unsigned char C_ext_capabilities[10] = { const unsigned char C_ext_length[8] = {0x02, 0x02, SHORT(GPG_APDU_LENGTH), 0x02, 0x02, SHORT(GPG_APDU_LENGTH)}; +// General feature management +// - b8: Display (defined by ISO/IEC 7816-4) +// - b7: Biometric input sensor (defined by ISO/IEC 7816-4) +// - b6: Button +// - b5: Keypad +// - b4: LED +// - b3: Loudspeaker +// - b2: Microphone +// - b1: Touchscreen +const unsigned char C_gen_feature = 0x20; + /* ---------------------*/ /* -- default values -- */ /* ---------------------*/ @@ -380,7 +393,7 @@ void gpg_install_slot(gpg_key_slot_t *slot) { nvm_write((void *) (&slot->dec.attributes.length), &l, sizeof(unsigned int)); tmp[0] = 0x00; - tmp[1] = 0x20; + tmp[1] = C_gen_feature; nvm_write((void *) (&slot->sig.UIF), &tmp, 2); nvm_write((void *) (&slot->dec.UIF), &tmp, 2); nvm_write((void *) (&slot->aut.UIF), &tmp, 2); @@ -402,20 +415,20 @@ void gpg_install(unsigned char app_state) { nvm_write((void *) (N_gpg_pstate->AID), &G_gpg_vstate.work.io_buffer, sizeof(C_default_AID)); if (app_state == STATE_ACTIVATE) { - // default sex: none + // default salutation: none G_gpg_vstate.work.io_buffer[0] = 0x39; - nvm_write((void *) (&N_gpg_pstate->sex), G_gpg_vstate.work.io_buffer, 1); + nvm_write((void *) (&N_gpg_pstate->salutation), G_gpg_vstate.work.io_buffer, 1); // default PW1/PW2: 1 2 3 4 5 6 memmove(pin.value, C_sha256_PW1, sizeof(C_sha256_PW1)); - pin.length = 6; + pin.length = GPG_MIN_PW1_LENGTH; pin.counter = 3; pin.ref = PIN_ID_PW1; nvm_write((void *) (&N_gpg_pstate->PW1), &pin, sizeof(gpg_pin_t)); // default PW3: 1 2 3 4 5 6 7 8 memmove(pin.value, C_sha256_PW2, sizeof(C_sha256_PW2)); - pin.length = 8; + pin.length = GPG_MIN_PW3_LENGTH; pin.counter = 3; pin.ref = PIN_ID_PW3; nvm_write((void *) (&N_gpg_pstate->PW3), &pin, sizeof(gpg_pin_t)); @@ -434,10 +447,7 @@ void gpg_install(unsigned char app_state) { nvm_write((void *) (&N_gpg_pstate->config_slot), G_gpg_vstate.work.io_buffer, 3); // config rsa pub - G_gpg_vstate.work.io_buffer[0] = (GPG_RSA_DEFAULT_PUB >> 24) & 0xFF; - G_gpg_vstate.work.io_buffer[1] = (GPG_RSA_DEFAULT_PUB >> 16) & 0xFF; - G_gpg_vstate.work.io_buffer[2] = (GPG_RSA_DEFAULT_PUB >> 8) & 0xFF; - G_gpg_vstate.work.io_buffer[3] = (GPG_RSA_DEFAULT_PUB >> 0) & 0xFF; + U4BE_ENCODE(G_gpg_vstate.work.io_buffer, 0, GPG_RSA_DEFAULT_PUB); nvm_write((void *) (&N_gpg_pstate->default_RSA_exponent), G_gpg_vstate.work.io_buffer, 4); // config pin diff --git a/src/gpg_io.c b/src/gpg_io.c index 8ecf276..50e1940 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -1,19 +1,24 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" +#include "offsets.h" +#include "ledger_assert.h" +#include "os_utils.h" /* * io_buff: contains current message part @@ -26,15 +31,17 @@ /* ----------------------------------------------------------------------- */ void gpg_io_set_offset(unsigned int offset) { - if (offset == IO_OFFSET_END) { - G_gpg_vstate.io_offset = G_gpg_vstate.io_length; - } else if (offset == IO_OFFSET_MARK) { - G_gpg_vstate.io_offset = G_gpg_vstate.io_mark; - } else if (offset < G_gpg_vstate.io_length) { - G_gpg_vstate.io_offset = G_gpg_vstate.io_length; - } else { - THROW(ERROR_IO_OFFSET); - return; + switch (offset) { + case IO_OFFSET_END: + G_gpg_vstate.io_offset = G_gpg_vstate.io_length; + break; + case IO_OFFSET_MARK: + G_gpg_vstate.io_offset = G_gpg_vstate.io_mark; + break; + default: + LEDGER_ASSERT(offset < G_gpg_vstate.io_length, "Bad offset!"); + G_gpg_vstate.io_offset = G_gpg_vstate.io_length; + break; } } @@ -64,11 +71,8 @@ void gpg_io_clear() { /* INSERT data to be sent */ /* ----------------------------------------------------------------------- */ -void gpg_io_hole(unsigned int sz) { - if ((G_gpg_vstate.io_length + sz) > GPG_IO_BUFFER_LENGTH) { - THROW(ERROR_IO_FULL); - return; - } +static void gpg_io_hole(unsigned int sz) { + LEDGER_ASSERT((G_gpg_vstate.io_length + sz) <= GPG_IO_BUFFER_LENGTH, "Bad hole!"); memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + sz, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, G_gpg_vstate.io_length - G_gpg_vstate.io_offset); @@ -83,10 +87,7 @@ void gpg_io_insert(unsigned char const *buff, unsigned int len) { void gpg_io_insert_u32(unsigned int v32) { gpg_io_hole(4); - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v32 >> 24; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] = v32 >> 16; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] = v32 >> 8; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 3] = v32 >> 0; + U4BE_ENCODE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset, v32); G_gpg_vstate.io_offset += 4; } @@ -99,8 +100,7 @@ void gpg_io_insert_u24(unsigned int v24) { } void gpg_io_insert_u16(unsigned int v16) { gpg_io_hole(2); - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v16 >> 8; - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] = v16 >> 0; + U2BE_ENCODE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset, v16); G_gpg_vstate.io_offset += 2; } void gpg_io_insert_u8(unsigned int v8) { @@ -140,10 +140,7 @@ void gpg_io_insert_tlv(unsigned int T, unsigned int L, unsigned char const *V) { unsigned int gpg_io_fetch_u32() { unsigned int v32; - v32 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 24) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 16) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] << 8) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 3] << 0)); + v32 = U4BE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset); G_gpg_vstate.io_offset += 4; return v32; } @@ -159,8 +156,7 @@ unsigned int gpg_io_fetch_u24() { unsigned int gpg_io_fetch_u16() { unsigned int v16; - v16 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 8) | - (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 0)); + v16 = U2BE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset); G_gpg_vstate.io_offset += 2; return v16; } @@ -172,17 +168,16 @@ unsigned int gpg_io_fetch_u8() { return v8; } -int gpg_io_fetch_t(unsigned int *T) { +void gpg_io_fetch_t(unsigned int *T) { *T = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; G_gpg_vstate.io_offset++; if ((*T & 0x1F) == 0x1F) { *T = (*T << 8) | G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; G_gpg_vstate.io_offset++; } - return 0; } -int gpg_io_fetch_l(unsigned int *L) { +void gpg_io_fetch_l(unsigned int *L) { *L = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; if ((*L & 0x80) != 0) { @@ -191,8 +186,7 @@ int gpg_io_fetch_l(unsigned int *L) { *L = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1]; G_gpg_vstate.io_offset += 2; } else if (*L == 2) { - *L = (G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 1] << 8) | - G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2]; + *L = U2BE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset + 1); G_gpg_vstate.io_offset += 3; } else { *L = -1; @@ -200,20 +194,18 @@ int gpg_io_fetch_l(unsigned int *L) { } else { G_gpg_vstate.io_offset += 1; } - return 0; } -int gpg_io_fetch_tl(unsigned int *T, unsigned int *L) { +void gpg_io_fetch_tl(unsigned int *T, unsigned int *L) { gpg_io_fetch_t(T); gpg_io_fetch_l(L); - return 0; } -int gpg_io_fetch_nv(unsigned char *buffer, int len) { +void gpg_io_fetch_nv(unsigned char *buffer, int len) { nvm_write(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); G_gpg_vstate.io_offset += len; - return len; } + int gpg_io_fetch(unsigned char *buffer, int len) { if (buffer) { memmove(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); @@ -228,17 +220,17 @@ int gpg_io_fetch(unsigned char *buffer, int len) { #define MAX_OUT GPG_APDU_LENGTH -int gpg_io_do(unsigned int io_flags) { +void gpg_io_do(unsigned int io_flags) { unsigned int rx = 0; // if pending input chaining - if (G_gpg_vstate.io_cla & 0x10) { + if (G_gpg_vstate.io_cla & CLA_APP_CHAIN) { goto in_chaining; } if (io_flags & IO_ASYNCH_REPLY) { - // if IO_ASYNCH_REPLY has been set, - // io_exchange will return when IO_RETURN_AFTER_TX will set in ui + // if IO_ASYNCH_REPLY has been set, + // io_exchange will return when IO_RETURN_AFTER_TX will set in ui rx = io_exchange(CHANNEL_APDU | IO_ASYNCH_REPLY, 0); } else { // --- full out chaining --- @@ -258,11 +250,12 @@ int gpg_io_do(unsigned int io_flags) { } G_io_apdu_buffer[tx + 1] = xx; io_exchange(CHANNEL_APDU, tx + 2); - // check get response - if ((G_io_apdu_buffer[0] != 0x00) || (G_io_apdu_buffer[1] != 0xc0) || - (G_io_apdu_buffer[2] != 0x00) || (G_io_apdu_buffer[3] != 0x00)) { - THROW(SW_COMMAND_NOT_ALLOWED); - return 0; + // check get response APDU + if ((G_io_apdu_buffer[OFFSET_CLA] != CLA_APP_DEF) || + (G_io_apdu_buffer[OFFSET_INS] != INS_GET_RESPONSE) || + (G_io_apdu_buffer[OFFSET_P1] != GET_RESPONSE) || + (G_io_apdu_buffer[OFFSET_P2] != GET_RESPONSE)) { + return; } } memmove(G_io_apdu_buffer, @@ -271,83 +264,83 @@ int gpg_io_do(unsigned int io_flags) { if (io_flags & IO_RETURN_AFTER_TX) { io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, G_gpg_vstate.io_length); - return 0; + return; } rx = io_exchange(CHANNEL_APDU, G_gpg_vstate.io_length); } //--- full in chaining --- if (rx < 4) { - THROW(SW_COMMAND_NOT_ALLOWED); - return SW_COMMAND_NOT_ALLOWED; + return; } if (rx == 4) { - G_io_apdu_buffer[4] = 0; + G_io_apdu_buffer[OFFSET_LC] = 0; } G_gpg_vstate.io_offset = 0; G_gpg_vstate.io_length = 0; - G_gpg_vstate.io_cla = G_io_apdu_buffer[0]; - G_gpg_vstate.io_ins = G_io_apdu_buffer[1]; - G_gpg_vstate.io_p1 = G_io_apdu_buffer[2]; - G_gpg_vstate.io_p2 = G_io_apdu_buffer[3]; + G_gpg_vstate.io_cla = G_io_apdu_buffer[OFFSET_CLA]; + G_gpg_vstate.io_ins = G_io_apdu_buffer[OFFSET_INS]; + G_gpg_vstate.io_p1 = G_io_apdu_buffer[OFFSET_P1]; + G_gpg_vstate.io_p2 = G_io_apdu_buffer[OFFSET_P2]; G_gpg_vstate.io_lc = 0; G_gpg_vstate.io_le = 0; + G_gpg_vstate.io_p1p2 = U2(G_gpg_vstate.io_p1, G_gpg_vstate.io_p2); switch (G_gpg_vstate.io_ins) { case INS_GET_DATA: case INS_GET_RESPONSE: case INS_TERMINATE_DF: case INS_ACTIVATE_FILE: - G_gpg_vstate.io_le = G_io_apdu_buffer[4]; + G_gpg_vstate.io_le = G_io_apdu_buffer[OFFSET_LC]; break; case INS_GET_CHALLENGE: - if (G_gpg_vstate.io_p1 == 0) { - G_gpg_vstate.io_le = G_io_apdu_buffer[4]; + if (G_gpg_vstate.io_p1 == CHALLENGE_NOMINAL) { + G_gpg_vstate.io_le = G_io_apdu_buffer[OFFSET_LC]; break; } __attribute__((fallthrough)); case INS_VERIFY: case INS_CHANGE_REFERENCE_DATA: - if (G_io_apdu_buffer[4] == 0) { + if (G_io_apdu_buffer[OFFSET_LC] == 0) { break; } - goto _default; + __attribute__((fallthrough)); default: - _default: - G_gpg_vstate.io_lc = G_io_apdu_buffer[4]; - memmove(G_gpg_vstate.work.io_buffer, G_io_apdu_buffer + 5, G_gpg_vstate.io_lc); + G_gpg_vstate.io_lc = G_io_apdu_buffer[OFFSET_LC]; + memmove(G_gpg_vstate.work.io_buffer, + G_io_apdu_buffer + OFFSET_CDATA, + G_gpg_vstate.io_lc); G_gpg_vstate.io_length = G_gpg_vstate.io_lc; break; } - while (G_gpg_vstate.io_cla & 0x10) { - G_io_apdu_buffer[0] = 0x90; - G_io_apdu_buffer[1] = 0x00; + while (G_gpg_vstate.io_cla & CLA_APP_CHAIN) { + G_io_apdu_buffer[0] = ((SW_OK >> 8) & 0xFF); + G_io_apdu_buffer[1] = (SW_OK & 0xFF); rx = io_exchange(CHANNEL_APDU, 2); in_chaining: - if ((rx < 4) || ((G_io_apdu_buffer[0] & 0xEF) != (G_gpg_vstate.io_cla & 0xEF)) || - (G_io_apdu_buffer[1] != G_gpg_vstate.io_ins) || - (G_io_apdu_buffer[2] != G_gpg_vstate.io_p1) || - (G_io_apdu_buffer[3] != G_gpg_vstate.io_p2)) { - THROW(SW_COMMAND_NOT_ALLOWED); - return SW_COMMAND_NOT_ALLOWED; + if ((rx < 4) || + ((G_io_apdu_buffer[OFFSET_CLA] & CLA_APP_APDU_PIN) != + (G_gpg_vstate.io_cla & CLA_APP_APDU_PIN)) || + (G_io_apdu_buffer[OFFSET_INS] != G_gpg_vstate.io_ins) || + (G_io_apdu_buffer[OFFSET_P1] != G_gpg_vstate.io_p1) || + (G_io_apdu_buffer[OFFSET_P2] != G_gpg_vstate.io_p2)) { + return; } if (rx == 4) { - G_io_apdu_buffer[4] = 0; + G_io_apdu_buffer[OFFSET_LC] = 0; } - G_gpg_vstate.io_cla = G_io_apdu_buffer[0]; - G_gpg_vstate.io_lc = G_io_apdu_buffer[4]; + G_gpg_vstate.io_cla = G_io_apdu_buffer[OFFSET_CLA]; + G_gpg_vstate.io_lc = G_io_apdu_buffer[OFFSET_LC]; if ((G_gpg_vstate.io_length + G_gpg_vstate.io_lc) > GPG_IO_BUFFER_LENGTH) { - return 1; + return; } memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_length, - G_io_apdu_buffer + 5, + G_io_apdu_buffer + OFFSET_CDATA, G_gpg_vstate.io_lc); G_gpg_vstate.io_length += G_gpg_vstate.io_lc; } - - return 0; } diff --git a/src/gpg_main.c b/src/gpg_main.c index 0399b16..fb17459 100644 --- a/src/gpg_main.c +++ b/src/gpg_main.c @@ -1,19 +1,22 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" +#include "gpg_ux.h" #include "io.h" #include "usbd_ccid_if.h" @@ -24,6 +27,7 @@ void app_main(void) { unsigned int io_flags = 0; io_flags = 0; + volatile unsigned short sw = SW_UNKNOWN; // start communication with MCU ui_CCID_reset(); @@ -38,34 +42,18 @@ void app_main(void) { // start the application // the first exchange will: - // - display the initial screen + // - display the initial screen // - send the ATR // - receive the first command for (;;) { - volatile unsigned short sw = 0; - BEGIN_TRY { - TRY { - gpg_io_do(io_flags); - sw = gpg_dispatch(); - } - CATCH_OTHER(e) { - gpg_io_discard(1); - if ((e & 0xFFFF0000) || (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { - gpg_io_insert_u32(e); - sw = 0x6f42; - } else { - sw = e; - } - } - FINALLY { - if (sw) { - gpg_io_insert_u16(sw); - io_flags = 0; - } else { - io_flags = IO_ASYNCH_REPLY; - } - } + gpg_io_do(io_flags); + sw = gpg_dispatch(); + if (sw) { + PRINTF("[MAIN] - FINALLY INSERT sw=0x%x\n", sw); + gpg_io_insert_u16(sw); + io_flags = 0; + } else { + io_flags = IO_ASYNCH_REPLY; } - END_TRY; } } diff --git a/src/gpg_mse.c b/src/gpg_mse.c index 8406462..b2d4949 100644 --- a/src/gpg_mse.c +++ b/src/gpg_mse.c @@ -1,22 +1,24 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" -static int gpg_mse_set(int crt, int ref) { - if (crt == 0xA4) { +static void gpg_mse_set(int crt, int ref) { + if (crt == KEY_AUT) { if (ref == 0x02) { G_gpg_vstate.mse_aut = &G_gpg_vstate.kslot->dec; } @@ -25,7 +27,7 @@ static int gpg_mse_set(int crt, int ref) { } } - if (crt == 0xB8) { + if (crt == KEY_DEC) { if (ref == 0x02) { G_gpg_vstate.mse_dec = &G_gpg_vstate.kslot->dec; } @@ -33,33 +35,28 @@ static int gpg_mse_set(int crt, int ref) { G_gpg_vstate.mse_dec = &G_gpg_vstate.kslot->aut; } } - return 0; } -int gpg_mse_reset() { - gpg_mse_set(0xA4, 0x03); - gpg_mse_set(0xB8, 0x02); - return 0; +void gpg_mse_reset() { + gpg_mse_set(KEY_AUT, 0x03); + gpg_mse_set(KEY_DEC, 0x02); } int gpg_apdu_mse() { int crt, ref; - if ((G_gpg_vstate.io_p1 != 0x41) || - ((G_gpg_vstate.io_p2 != 0xA4) && (G_gpg_vstate.io_p2 != 0xB8))) { - THROW(SW_INCORRECT_P1P2); - return SW_INCORRECT_P1P2; + if ((G_gpg_vstate.io_p1 != MSE_SET) || + ((G_gpg_vstate.io_p2 != KEY_AUT) && (G_gpg_vstate.io_p2 != KEY_DEC))) { + return SW_WRONG_P1P2; } crt = gpg_io_fetch_u16(); if (crt != 0x8301) { - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } ref = gpg_io_fetch_u8(); if ((ref != 0x02) && (ref != 0x03)) { - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } diff --git a/src/gpg_pin.c b/src/gpg_pin.c index 2ae8474..aa92292 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -1,20 +1,22 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" -#include "gpg_ux_nanos.h" +#include "gpg_ux.h" gpg_pin_t *gpg_pin_get_pin(int pinref) { switch (pinref) { @@ -43,7 +45,7 @@ static int gpg_pin_get_state_index(unsigned int pinref) { return -1; } -static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pin_len) { +static int gpg_pin_check_internal(gpg_pin_t *pin, const unsigned char *pin_val, int pin_len) { unsigned int counter; cx_err_t error = CX_INTERNAL_ERROR; @@ -52,7 +54,6 @@ static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pi } counter = pin->counter - 1; - nvm_write(&(pin->counter), &counter, sizeof(int)); cx_sha256_init(&G_gpg_vstate.work.md.sha256); CX_CHECK(cx_hash_no_throw((cx_hash_t *) &G_gpg_vstate.work.md.sha256, CX_LAST, @@ -61,33 +62,21 @@ static int gpg_pin_check_internal(gpg_pin_t *pin, unsigned char *pin_val, int pi G_gpg_vstate.work.md.H, sizeof(G_gpg_vstate.work.md.H))); if (memcmp(G_gpg_vstate.work.md.H, pin->value, 32)) { - return SW_SECURITY_STATUS_NOT_SATISFIED; + error = (counter == 0) ? SW_PIN_BLOCKED : SW_SECURITY_STATUS_NOT_SATISFIED; + } else { + counter = 3; + error = SW_OK; } - counter = 3; - nvm_write(&(pin->counter), &counter, sizeof(int)); - return SW_OK; end: - if (error != CX_OK) { - THROW(error); - } - return SW_UNKNOWN; -} - -static void gpg_pin_check_throw(gpg_pin_t *pin, int pinID, unsigned char *pin_val, int pin_len) { - int sw; - gpg_pin_set_verified(pinID, 0); - sw = gpg_pin_check_internal(pin, pin_val, pin_len); - if (sw == SW_OK) { - gpg_pin_set_verified(pinID, 1); - return; + if (counter != pin->counter) { + nvm_write(&(pin->counter), &counter, sizeof(int)); } - THROW(sw); - return; + return error; } -int gpg_pin_check(gpg_pin_t *pin, int pinID, unsigned char *pin_val, unsigned int pin_len) { - int sw; +int gpg_pin_check(gpg_pin_t *pin, int pinID, const unsigned char *pin_val, unsigned int pin_len) { + int sw = SW_UNKNOWN; gpg_pin_set_verified(pinID, 0); sw = gpg_pin_check_internal(pin, pin_val, pin_len); if (sw == SW_OK) { @@ -96,7 +85,7 @@ int gpg_pin_check(gpg_pin_t *pin, int pinID, unsigned char *pin_val, unsigned in return sw; } -void gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len) { +int gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len) { cx_sha256_t sha256; cx_err_t error = CX_INTERNAL_ERROR; gpg_pin_t newpin; @@ -109,18 +98,17 @@ void gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len) { nvm_write(pin, &newpin, sizeof(gpg_pin_t)); end: if (error != CX_OK) { - THROW(error); + return error; } + return SW_OK; } -int gpg_pin_set_verified(int pinID, int verified) { +void gpg_pin_set_verified(int pinID, int verified) { int idx; idx = gpg_pin_get_state_index(pinID); if (idx >= 0) { G_gpg_vstate.verified_pin[idx] = verified; - return verified; } - return 0; } int gpg_pin_is_verified(int pinID) { @@ -137,83 +125,84 @@ int gpg_pin_is_blocked(gpg_pin_t *pin) { } int gpg_apdu_verify() { + int sw = SW_UNKNOWN; gpg_pin_t *pin; pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); if (pin == NULL) { - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } // PINPAD - if (G_gpg_vstate.io_cla == 0xEF) { + if (G_gpg_vstate.io_cla == CLA_APP_APDU_PIN) { if (gpg_pin_is_blocked(pin)) { - THROW(SW_PIN_BLOCKED); return SW_PIN_BLOCKED; } - if (G_gpg_vstate.pinmode == PIN_MODE_SCREEN) { - // Delegate pin check to ui - gpg_io_discard(1); - ui_menu_pinentry_display(0); - return 0; + switch (G_gpg_vstate.pinmode) { + case PIN_MODE_SCREEN: + // Delegate pin check to ui + gpg_io_discard(1); + ui_menu_pinentry_display(0); + sw = 0; + break; + case PIN_MODE_CONFIRM: + // Delegate pin check to ui + gpg_io_discard(1); + ui_menu_pinconfirm_display(G_gpg_vstate.io_p2); + sw = 0; + break; + case PIN_MODE_TRUST: + gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); + gpg_io_discard(1); + sw = 0; + break; + default: + sw = SW_WRONG_DATA; + break; } - if (G_gpg_vstate.pinmode == PIN_MODE_CONFIRM) { - // Delegate pin check to ui - gpg_io_discard(1); - ui_menu_pinconfirm_display(0); - return 0; - } - if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { - gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); - gpg_io_discard(1); - return SW_OK; - } - THROW(SW_WRONG_DATA); - return SW_WRONG_DATA; + return sw; } // NORMAL CHECK - if ((G_gpg_vstate.io_p1 == 0) && G_gpg_vstate.io_length) { + if ((G_gpg_vstate.io_p1 == PIN_VERIFY) && G_gpg_vstate.io_length) { if (gpg_pin_is_blocked(pin)) { - THROW(SW_PIN_BLOCKED); return SW_PIN_BLOCKED; } - gpg_pin_check_throw(pin, - G_gpg_vstate.io_p2, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - G_gpg_vstate.io_length); + sw = gpg_pin_check(pin, + G_gpg_vstate.io_p2, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + G_gpg_vstate.io_length); gpg_io_discard(1); - return SW_OK; + return sw; } gpg_io_discard(1); // STATUS REQUEST - if ((G_gpg_vstate.io_p1 == 0) && G_gpg_vstate.io_length == 0) { + if ((G_gpg_vstate.io_p1 == PIN_VERIFY) && G_gpg_vstate.io_length == 0) { if (gpg_pin_is_verified(G_gpg_vstate.io_p2)) { return SW_OK; } - return 0x63C0 | pin->counter; + return SW_PWD_NOT_CHECKED | pin->counter; } // RESET REQUEST - if ((G_gpg_vstate.io_p1 == 0xFF) && G_gpg_vstate.io_length == 0) { + if ((G_gpg_vstate.io_p1 == PIN_NOT_VERIFIED) && G_gpg_vstate.io_length == 0) { gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); return SW_OK; } - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } int gpg_apdu_change_ref_data() { + int sw = SW_UNKNOWN; gpg_pin_t *pin; int len, newlen; pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); if (pin == NULL) { - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } @@ -221,7 +210,6 @@ int gpg_apdu_change_ref_data() { // --- PW1/PW3 pin --- if (gpg_pin_is_blocked(pin)) { - THROW(SW_PIN_BLOCKED); return SW_PIN_BLOCKED; } // avoid any-overflow without giving info @@ -234,26 +222,25 @@ int gpg_apdu_change_ref_data() { } } - if (pin->length > G_gpg_vstate.io_length) { - len = G_gpg_vstate.io_length; - } else { - len = pin->length; + len = MIN(G_gpg_vstate.io_length, pin->length); + sw = gpg_pin_check(pin, pin->ref, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); + if (sw != SW_OK) { + return sw; } - gpg_pin_check_throw(pin, pin->ref, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); - newlen = G_gpg_vstate.io_length - len; - if ((newlen > GPG_MAX_PW_LENGTH) || ((pin->ref == PIN_ID_PW1) && (newlen < 6)) || - ((pin->ref == PIN_ID_PW3) && (newlen < 8))) { - THROW(SW_WRONG_DATA); + if ((newlen > GPG_MAX_PW_LENGTH) || + ((pin->ref == PIN_ID_PW1) && (newlen < GPG_MIN_PW1_LENGTH)) || + ((pin->ref == PIN_ID_PW3) && (newlen < GPG_MIN_PW3_LENGTH))) { return SW_WRONG_DATA; } - gpg_pin_set(pin, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + len, newlen); + sw = gpg_pin_set(pin, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + len, newlen); gpg_io_discard(1); - return SW_OK; + return sw; } int gpg_apdu_reset_retry_counter() { + int sw = SW_UNKNOWN; gpg_pin_t *pin_pw1; gpg_pin_t *pin_rc; int rc_len, pw1_len; @@ -261,32 +248,33 @@ int gpg_apdu_reset_retry_counter() { pin_pw1 = gpg_pin_get_pin(PIN_ID_PW1); pin_rc = gpg_pin_get_pin(PIN_ID_RC); - if (G_gpg_vstate.io_p1 == 2) { + if (G_gpg_vstate.io_p1 == RESET_RETRY_WITH_PW3) { + // PW3 must be verified, and the data contain the new PW1 if (!gpg_pin_is_verified(PIN_ID_PW3)) { - THROW(SW_SECURITY_STATUS_NOT_SATISFIED); return SW_SECURITY_STATUS_NOT_SATISFIED; } rc_len = 0; pw1_len = G_gpg_vstate.io_length; } else { + // The data contain the Resetting Code + the new PW1 // avoid any-overflow without giving info - if (pin_rc->length > G_gpg_vstate.io_length) { - rc_len = G_gpg_vstate.io_length; - } else { - rc_len = pin_rc->length; - } + rc_len = MIN(G_gpg_vstate.io_length, pin_rc->length); pw1_len = G_gpg_vstate.io_length - rc_len; - gpg_pin_check_throw(pin_rc, - pin_rc->ref, - G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, - rc_len); + sw = gpg_pin_check(pin_rc, + pin_rc->ref, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, + rc_len); + if (sw != SW_OK) { + return sw; + } } - if ((pw1_len > GPG_MAX_PW_LENGTH) || (pw1_len < 6)) { - THROW(SW_WRONG_DATA); + if ((pw1_len > GPG_MAX_PW_LENGTH) || (pw1_len < GPG_MIN_PW1_LENGTH)) { return SW_WRONG_DATA; } - gpg_pin_set(pin_pw1, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + rc_len, pw1_len); + sw = gpg_pin_set(pin_pw1, + G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + rc_len, + pw1_len); gpg_io_discard(1); - return SW_OK; + return sw; } diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 226ee75..e01968b 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -1,20 +1,22 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" -#include "gpg_ux_nanos.h" +#include "gpg_ux.h" #include "cx_errors.h" const unsigned char gpg_oid_sha256[] = {0x30, @@ -65,11 +67,10 @@ static void gpg_pso_reset_PW1() { static int gpg_sign(gpg_key_t *sigkey) { // --- RSA cx_err_t error = CX_INTERNAL_ERROR; - if (sigkey->attributes.value[0] == 1) { - cx_rsa_private_key_t *key; + if (sigkey->attributes.value[0] == KEY_ID_RSA) { + cx_rsa_private_key_t *key = NULL; unsigned int ksz, l; - ksz = (sigkey->attributes.value[1] << 8) | sigkey->attributes.value[2]; - ksz = ksz >> 3; + ksz = U2BE(sigkey->attributes.value, 1) >> 3; switch (ksz) { case 1024 / 8: key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa1024; @@ -84,17 +85,15 @@ static int gpg_sign(gpg_key_t *sigkey) { key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa4096; break; default: - THROW(SW_DATA_INVALID); - return 0; + break; } - if (key->size != ksz) { - THROW(SW_CONDITIONS_NOT_SATISFIED); + if ((key == NULL) || (key->size != ksz)) { return SW_CONDITIONS_NOT_SATISFIED; } // sign if (ksz < G_gpg_vstate.io_length) { - THROW(SW_WRONG_LENGTH); + return SW_WRONG_LENGTH; } l = ksz - G_gpg_vstate.io_length; memmove(G_gpg_vstate.work.io_buffer + l, @@ -118,9 +117,10 @@ static int gpg_sign(gpg_key_t *sigkey) { return SW_OK; } // --- ECDSA/EdDSA - if ((sigkey->attributes.value[0] == 19) || (sigkey->attributes.value[0] == 22)) { + if ((sigkey->attributes.value[0] == KEY_ID_ECDSA) || + (sigkey->attributes.value[0] == KEY_ID_EDDSA)) { cx_ecfp_private_key_t *key; - size_t sz; + size_t ksz; unsigned int s_len, i, rs_len, info; unsigned char *rs; @@ -128,10 +128,9 @@ static int gpg_sign(gpg_key_t *sigkey) { // sign #define RS (G_gpg_vstate.work.io_buffer + (GPG_IO_BUFFER_LENGTH - 256)) - if (sigkey->attributes.value[0] == 19) { - sz = (unsigned int) gpg_curve2domainlen(key->curve); - if ((sz == 0) || (key->d_len != sz)) { - THROW(SW_CONDITIONS_NOT_SATISFIED); + if (sigkey->attributes.value[0] == KEY_ID_ECDSA) { + ksz = (unsigned int) gpg_curve2domainlen(key->curve); + if ((ksz == 0) || (key->d_len != ksz)) { return SW_CONDITIONS_NOT_SATISFIED; } s_len = 256; @@ -139,7 +138,7 @@ static int gpg_sign(gpg_key_t *sigkey) { CX_RND_TRNG, CX_NONE, G_gpg_vstate.work.io_buffer, - sz, + ksz, RS, &s_len, &info)); @@ -161,44 +160,37 @@ static int gpg_sign(gpg_key_t *sigkey) { rs += 2; } } else { - sz = 256; + ksz = 256; CX_CHECK(cx_eddsa_sign_no_throw(key, CX_SHA512, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, RS, - sz)); - CX_CHECK(cx_ecdomain_parameters_length(key->curve, &sz)); - sz *= 2; + ksz)); + CX_CHECK(cx_ecdomain_parameters_length(key->curve, &ksz)); + ksz *= 2; gpg_io_discard(0); - gpg_io_insert(RS, sz); + gpg_io_insert(RS, ksz); } -#undef RS // send gpg_pso_reset_PW1(); return SW_OK; } // --- PSO:CDS NOT SUPPORTED - THROW(SW_REFERENCED_DATA_NOT_FOUND); return SW_REFERENCED_DATA_NOT_FOUND; end: - THROW(error); + return error; } int gpg_apdu_pso() { unsigned int t, l, ksz; - - unsigned int pso; - unsigned int sz; cx_err_t error = CX_INTERNAL_ERROR; - pso = (G_gpg_vstate.io_p1 << 8) | G_gpg_vstate.io_p2; - // UIF HANDLE - switch (pso) { + switch (G_gpg_vstate.io_p1p2) { // --- PSO:CDS --- - case 0x9e9a: + case PSO_CDS: if (G_gpg_vstate.kslot->sig.UIF[0]) { if ((G_gpg_vstate.UIF_flags) == 0) { ui_menu_uifconfirm_display(0); @@ -208,8 +200,8 @@ int gpg_apdu_pso() { } break; // --- PSO:DEC --- - case 0x8086: - case 0x8680: + case PSO_DEC: + case PSO_ENC: if (G_gpg_vstate.kslot->dec.UIF[0]) { if ((G_gpg_vstate.UIF_flags) == 0) { ui_menu_uifconfirm_display(0); @@ -221,42 +213,41 @@ int gpg_apdu_pso() { } // --- PSO:ENC --- - switch (pso) { + switch (G_gpg_vstate.io_p1p2) { // --- PSO:CDS --- - case 0x9e9a: { + case PSO_CDS: { unsigned int cnt; - int sw; + int sw = SW_UNKNOWN; sw = gpg_sign(&G_gpg_vstate.kslot->sig); cnt = G_gpg_vstate.kslot->sig_count + 1; nvm_write(&G_gpg_vstate.kslot->sig_count, &cnt, sizeof(unsigned int)); return sw; } // --- PSO:ENC --- - case 0x8680: { + case PSO_ENC: { unsigned int msg_len; cx_aes_key_t *key; key = &G_gpg_vstate.kslot->AES_dec; if (!(key->size != 16)) { - THROW(SW_CONDITIONS_NOT_SATISFIED + 5); return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = GPG_IO_BUFFER_LENGTH - 1; + ksz = GPG_IO_BUFFER_LENGTH - 1; CX_CHECK(cx_aes_no_throw(key, CX_ENCRYPT | CX_CHAIN_CBC | CX_LAST, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, msg_len, G_gpg_vstate.work.io_buffer + 1, - &sz)); + &ksz)); // send gpg_io_discard(0); G_gpg_vstate.work.io_buffer[0] = 0x02; - gpg_io_inserted(1 + sz); + gpg_io_inserted(1 + ksz); return SW_OK; } // --- PSO:DEC --- - case 0x8086: { + case PSO_DEC: { unsigned int msg_len; unsigned int pad_byte; pad_byte = gpg_io_fetch_u8(); @@ -265,13 +256,10 @@ int gpg_apdu_pso() { // --- PSO:DEC:RSA case 0x00: { cx_rsa_private_key_t *key; - if (G_gpg_vstate.mse_dec->attributes.value[0] != 0x01) { - THROW(SW_CONDITIONS_NOT_SATISFIED); + if (G_gpg_vstate.mse_dec->attributes.value[0] != KEY_ID_RSA) { return SW_CONDITIONS_NOT_SATISFIED; } - ksz = (G_gpg_vstate.mse_dec->attributes.value[1] << 8) | - G_gpg_vstate.mse_dec->attributes.value[2]; - ksz = ksz >> 3; + ksz = U2BE(G_gpg_vstate.mse_dec->attributes.value, 1) >> 3; key = NULL; switch (ksz) { case 1024 / 8: @@ -289,11 +277,9 @@ int gpg_apdu_pso() { } if ((key == NULL) || (key->size != ksz)) { - THROW(SW_CONDITIONS_NOT_SATISFIED); return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = ksz; CX_CHECK(cx_rsa_decrypt_no_throw( key, CX_PAD_PKCS1_1o5, @@ -301,10 +287,10 @@ int gpg_apdu_pso() { G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, msg_len, G_gpg_vstate.work.io_buffer, - &sz)); + &ksz)); // send gpg_io_discard(0); - gpg_io_inserted(sz); + gpg_io_inserted(ksz); return SW_OK; } @@ -313,20 +299,19 @@ int gpg_apdu_pso() { cx_aes_key_t *key; key = &G_gpg_vstate.kslot->AES_dec; if (!(key->size != 16)) { - THROW(SW_CONDITIONS_NOT_SATISFIED + 5); return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; - sz = GPG_IO_BUFFER_LENGTH; + ksz = GPG_IO_BUFFER_LENGTH; CX_CHECK(cx_aes_no_throw(key, CX_DECRYPT | CX_CHAIN_CBC | CX_LAST, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, msg_len, G_gpg_vstate.work.io_buffer, - &sz)); + &ksz)); // send gpg_io_discard(0); - gpg_io_inserted(sz); + gpg_io_inserted(ksz); return SW_OK; } @@ -335,27 +320,23 @@ int gpg_apdu_pso() { cx_ecfp_private_key_t *key; unsigned int curve; - if (G_gpg_vstate.mse_dec->attributes.value[0] != 0x12) { - THROW(SW_CONDITIONS_NOT_SATISFIED); + if (G_gpg_vstate.mse_dec->attributes.value[0] != KEY_ID_ECDH) { return SW_CONDITIONS_NOT_SATISFIED; } key = &G_gpg_vstate.mse_dec->priv_key.ecfp; gpg_io_fetch_l(&l); gpg_io_fetch_tl(&t, &l); if (t != 0x7f49) { - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } gpg_io_fetch_tl(&t, &l); if (t != 0x86) { - THROW(SW_WRONG_DATA); return SW_WRONG_DATA; } curve = gpg_oid2curve(G_gpg_vstate.mse_dec->attributes.value + 1, G_gpg_vstate.mse_dec->attributes.length - 1); if (key->curve != curve) { - THROW(SW_CONDITIONS_NOT_SATISFIED); return SW_CONDITIONS_NOT_SATISFIED; } if (curve == CX_CURVE_Curve25519) { @@ -372,13 +353,13 @@ int gpg_apdu_pso() { 65, G_gpg_vstate.work.io_buffer + 256, 160)); - CX_CHECK(cx_ecdomain_parameters_length(key->curve, &sz)); + CX_CHECK(cx_ecdomain_parameters_length(key->curve, &ksz)); for (i = 0; i <= 31; i++) { G_gpg_vstate.work.io_buffer[128 + i] = G_gpg_vstate.work.io_buffer[287 - i]; } - sz = 32; + ksz = 32; } else { CX_CHECK( cx_ecdh_no_throw(key, @@ -387,30 +368,27 @@ int gpg_apdu_pso() { 65, G_gpg_vstate.work.io_buffer + 128, 160)); - CX_CHECK(cx_ecdomain_parameters_length(key->curve, &sz)); + CX_CHECK(cx_ecdomain_parameters_length(key->curve, &ksz)); } // send gpg_io_discard(0); - gpg_io_insert(G_gpg_vstate.work.io_buffer + 128, sz); + gpg_io_insert(G_gpg_vstate.work.io_buffer + 128, ksz); return SW_OK; } // --- PSO:DEC:xx NOT SUPPORTED default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); return SW_REFERENCED_DATA_NOT_FOUND; } } //--- PSO:yy NOT SUPPORTED --- default: - THROW(SW_REFERENCED_DATA_NOT_FOUND); return SW_REFERENCED_DATA_NOT_FOUND; } - THROW(SW_REFERENCED_DATA_NOT_FOUND); return SW_REFERENCED_DATA_NOT_FOUND; end: - THROW(error); + return error; } int gpg_apdu_internal_authenticate() { @@ -423,11 +401,8 @@ int gpg_apdu_internal_authenticate() { G_gpg_vstate.UIF_flags = 0; } - if (G_gpg_vstate.mse_aut->attributes.value[0] == 1) { - if (G_gpg_vstate.io_length > ((G_gpg_vstate.mse_aut->attributes.value[1] << 8) | - G_gpg_vstate.mse_aut->attributes.value[2]) * - 40 / 100) { - THROW(SW_WRONG_LENGTH); + if (G_gpg_vstate.mse_aut->attributes.value[0] == KEY_ID_RSA) { + if (G_gpg_vstate.io_length > U2BE(G_gpg_vstate.mse_aut->attributes.value, 1) * 40 / 100) { return SW_WRONG_LENGTH; } } diff --git a/src/gpg_select.c b/src/gpg_select.c index ae577d8..af68837 100644 --- a/src/gpg_select.c +++ b/src/gpg_select.c @@ -1,31 +1,40 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" const unsigned char C_MF[] = {0x3F, 0x00}; +const unsigned char C_ATR[] = {0x2F, 0x02}; int gpg_apdu_select() { - int sw; + int sw = SW_UNKNOWN; // MF - if ((G_gpg_vstate.io_length == 2) && + if ((G_gpg_vstate.io_length == sizeof(C_MF)) && (memcmp(G_gpg_vstate.work.io_buffer, C_MF, G_gpg_vstate.io_length) == 0)) { gpg_io_discard(0); sw = SW_OK; } + // EF.ATR + else if ((G_gpg_vstate.io_length == sizeof(C_ATR)) && + (memcmp(G_gpg_vstate.work.io_buffer, C_ATR, G_gpg_vstate.io_length) == 0)) { + gpg_io_discard(0); + sw = SW_OK; + } // AID APP else if ((G_gpg_vstate.io_length == 6) && (memcmp(G_gpg_vstate.work.io_buffer, (const void *) N_gpg_pstate->AID, @@ -43,14 +52,14 @@ int gpg_apdu_select() { gpg_io_discard(0); if (N_gpg_pstate->histo[7] != STATE_ACTIVATE) { - THROW(SW_STATE_TERMINATED); + sw = SW_STATE_TERMINATED; + } else { + sw = SW_OK; } - sw = SW_OK; } // NOT FOUND else { - THROW(SW_FILE_NOT_FOUND); - return SW_FILE_NOT_FOUND; + sw = SW_FILE_NOT_FOUND; } return sw; } diff --git a/src/gpg_types.h b/src/gpg_types.h index 2672892..016587e 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -1,22 +1,25 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #ifndef GPG_TYPES_H #define GPG_TYPES_H #include "lcx_sha3.h" +#include "usbd_ccid_if.h" /* cannot send more that F0 bytes in CCID, why? do not know for now * So set up length to F0 minus 2 bytes for SW @@ -30,7 +33,9 @@ /* random choice */ #define GPG_EXT_CHALLENGE_LENTH 254 /* accept long PW, but less than one sha256 block */ -#define GPG_MAX_PW_LENGTH 12 +#define GPG_MAX_PW_LENGTH 12 +#define GPG_MIN_PW1_LENGTH 6 +#define GPG_MIN_PW3_LENGTH 8 #if GPG_MULTISLOT #define GPG_KEYS_SLOTS 3 @@ -42,6 +47,13 @@ #define GPG_RSA_DEFAULT_PUB 0x00010001U +/* --- Keys IDs --- */ +// https://www.rfc-editor.org/rfc/rfc4880#section-9.1 +#define KEY_ID_RSA 1 // RSA (Encrypt or Sign) +#define KEY_ID_ECDH 18 // Elliptic Curve Diffie-Hellman +#define KEY_ID_ECDSA 19 // Elliptic Curve Digital Signature Algorithm +#define KEY_ID_EDDSA 22 // Edwards-curve Digital Signature Algorithm + struct gpg_pin_s { unsigned int ref; // initial pin length, 0 means not set @@ -58,11 +70,6 @@ typedef struct gpg_pin_s gpg_pin_t; unsigned char value[maxlen]; \ } name -typedef struct gpg_lv_s { - unsigned int length; - unsigned char value[]; -} gpg_lv_t; - typedef struct gpg_key_s { /* C1 C2 C3 */ LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); @@ -146,17 +153,13 @@ struct gpg_nv_state_s { /* 5F2D */ LV(lang, 8); /* 5F35 */ - unsigned char sex[1]; + unsigned char salutation[1]; /* -- Application Related Data -- */ /* 4F */ unsigned char AID[16]; /* 5F52 */ unsigned char histo[15]; - /* 7f66 */ - // unsigned char ext_length_info[8]; - /* C0 */ - // unsigned char ext_capabilities[10]; /* C4 */ unsigned char PW_status[4]; @@ -202,6 +205,7 @@ struct gpg_v_state_s { unsigned short io_length; unsigned short io_offset; unsigned short io_mark; + unsigned short io_p1p2; union { unsigned char io_buffer[GPG_IO_BUFFER_LENGTH]; struct { @@ -264,11 +268,11 @@ struct gpg_v_state_s { unsigned int ux_key; unsigned int ux_type; -#ifdef UI_NANO_S +#ifdef TARGET_NANOS ux_menu_entry_t ui_dogsays[2]; #endif -#ifdef UI_NANO_X +#if defined(TARGET_NANOX) || defined(TARGET_NANOS2) char ux_buff1[32]; char ux_buff2[32]; char ux_buff3[32]; @@ -282,18 +286,7 @@ struct gpg_v_state_s { }; typedef struct gpg_v_state_s gpg_v_state_t; -/* --- Errors --- */ - -#define ERROR(x) ((x) << 16) - -#define ERROR_IO_OFFSET ERROR(1) -#define ERROR_IO_FULL ERROR(2) - -/* --- IDentifiers --- */ - -#define ID_AUTH 1 -#define ID_DEC 2 -#define ID_SIG 3 +/* --- Identifiers --- */ #define STATE_ACTIVATE 0x07 #define STATE_TERMINATE 0x03 @@ -311,83 +304,83 @@ typedef struct gpg_v_state_s gpg_v_state_t; #define PIN_MODE_CONFIRM 3 #define PIN_MODE_TRUST 4 +/* --- CLA --- */ +#define CLA_APP_DEF 0x00 +#define CLA_APP_SM 0x0C +#define CLA_APP_CHAIN 0x10 +#define CLA_APP_CHAIN_SM 0x1C +#define CLA_APP_APDU_PIN PIN_OPR_APDU_CLA + /* --- INS --- */ -#define INS_EXIT 0x02 #ifdef GPG_LOG #define INS_GET_LOG 0x04 #endif - -#define INS_SELECT 0xa4 -#define INS_TERMINATE_DF 0xe6 -#define INS_ACTIVATE_FILE 0x44 - -#define INS_SELECT_DATA 0xa5 -#define INS_GET_DATA 0xca -#define INS_GET_NEXT_DATA 0xcc -#define INS_PUT_DATA 0xda -#define INS_PUT_DATA_ODD 0xdb - +#define INS_EXIT 0x02 #define INS_VERIFY 0x20 #define INS_MSE 0x22 #define INS_CHANGE_REFERENCE_DATA 0x24 +#define INS_PSO 0x2a #define INS_RESET_RETRY_COUNTER 0x2c - -#define INS_GEN_ASYM_KEYPAIR 0x47 -#define INS_PSO 0x2a -// #define INS_COMPUTEDIGSIG 0x2a -// #define INS_DECIPHER 0x2a +#define INS_ACTIVATE_FILE 0x44 +#define INS_GEN_ASYM_KEYPAIR 0x47 +#define INS_GET_CHALLENGE 0x84 #define INS_INTERNAL_AUTHENTICATE 0x88 - -#define INS_GET_CHALLENGE 0x84 -#define INS_GET_RESPONSE 0xc0 - -/* --- IO constants --- */ -#define OFFSET_CLA 0 -#define OFFSET_INS 1 -#define OFFSET_P1 2 -#define OFFSET_P2 3 -#define OFFSET_P3 4 -#define OFFSET_CDATA 5 -#define OFFSET_EXT_CDATA 7 - -#define SW_OK 0x9000 -#define SW_ALGORITHM_UNSUPPORTED 0x9484 - -#define SW_BYTES_REMAINING_00 0x6100 - -#define SW_WARNING_STATE_UNCHANGED 0x6200 -#define SW_STATE_TERMINATED 0x6285 - -#define SW_MORE_DATA_AVAILABLE 0x6310 - -#define SW_WRONG_LENGTH 0x6700 - -#define SW_LOGICAL_CHANNEL_NOT_SUPPORTED 0x6881 -#define SW_SECURE_MESSAGING_NOT_SUPPORTED 0x6882 -#define SW_LAST_COMMAND_EXPECTED 0x6883 -#define SW_COMMAND_CHAINING_NOT_SUPPORTED 0x6884 - +#define INS_SELECT 0xa4 +#define INS_SELECT_DATA 0xa5 +#define INS_GET_RESPONSE 0xc0 +#define INS_GET_DATA 0xca +#define INS_GET_NEXT_DATA 0xcc +#define INS_PUT_DATA 0xda +#define INS_PUT_DATA_ODD 0xdb +#define INS_TERMINATE_DF 0xe6 + +/* --- Error constants --- */ +// #define SW_LOGICAL_CHANNEL_NOT_SUPPORTED 0x6881 +// #define SW_SECURE_MESSAGING_NOT_SUPPORTED 0x6882 +// #define SW_COMMAND_CHAINING_NOT_SUPPORTED 0x6884 +// #define SW_SM_DATA_MISSING 0x6987 +// #define SW_SM_DATA_INCORRECT 0x6988 +#define SW_STATE_TERMINATED 0x6285 +#define SW_PWD_NOT_CHECKED 0x63c0 +#define SW_MEMORY_FAILURE 0x6581 +#define SW_SECURITY_UIF_ISSUE 0x6600 +#define SW_WRONG_LENGTH 0x6700 +#define SW_LAST_COMMAND_CHAIN_EXPECTED 0x6883 #define SW_SECURITY_STATUS_NOT_SATISFIED 0x6982 -#define SW_FILE_INVALID 0x6983 #define SW_PIN_BLOCKED 0x6983 -#define SW_DATA_INVALID 0x6984 #define SW_CONDITIONS_NOT_SATISFIED 0x6985 -#define SW_COMMAND_NOT_ALLOWED 0x6986 -#define SW_APPLET_SELECT_FAILED 0x6999 - -#define SW_WRONG_DATA 0x6a80 -#define SW_FUNC_NOT_SUPPORTED 0x6a81 -#define SW_FILE_NOT_FOUND 0x6a82 -#define SW_RECORD_NOT_FOUND 0x6a83 -#define SW_FILE_FULL 0x6a84 -#define SW_INCORRECT_P1P2 0x6a86 -#define SW_REFERENCED_DATA_NOT_FOUND 0x6a88 - -#define SW_WRONG_P1P2 0x6b00 -#define SW_CORRECT_LENGTH_00 0x6c00 -#define SW_INS_NOT_SUPPORTED 0x6d00 -#define SW_CLA_NOT_SUPPORTED 0x6e00 - -#define SW_UNKNOWN 0x6f00 +#define SW_WRONG_DATA 0x6a80 +#define SW_FILE_NOT_FOUND 0x6a82 +#define SW_REFERENCED_DATA_NOT_FOUND 0x6a88 +#define SW_WRONG_P1P2 0x6b00 +#define SW_INS_NOT_SUPPORTED 0x6d00 +#define SW_CLA_NOT_SUPPORTED 0x6e00 +#define SW_UNKNOWN 0x6f00 +#define SW_OK 0x9000 + +/* --- P1/P2 constants --- */ +#define GEN_ASYM_KEY 0x8000 +#define SEEDED_MODE 0x01 +#define GEN_ASYM_KEY_SEED (GEN_ASYM_KEY | SEEDED_MODE) +#define READ_ASYM_KEY 0x8100 +#define PSO_CDS 0x9e9a +#define PSO_DEC 0x8086 +#define PSO_ENC 0x8680 +#define MSE_SET 0x41 +#define GET_RESPONSE 0x00 +#define PIN_NOT_VERIFIED 0xFF +#define PIN_VERIFY 0x00 +#define SELECT_MAX_INSTANCE 0x02 +#define SELECT_SKIP 0x04 +#define RESET_RETRY_WITH_PW3 0x02 +#define RESET_RETRY_WITH_CODE 0x00 +#define PRIME_MODE 0x02 +#define CHALLENGE_NOMINAL 0x00 + +/* --- Keys constants --- */ +#define KEY_SIG 0xb6 +#define KEY_DEC 0xb8 +#define KEY_AUT 0xa4 +#define KEY_NB 3 #endif diff --git a/src/gpg_ux.c b/src/gpg_ux.c new file mode 100644 index 0000000..a175f9e --- /dev/null +++ b/src/gpg_ux.c @@ -0,0 +1,24 @@ + +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +#include "usbd_ccid_if.h" + +void ui_CCID_reset(void) { + io_usb_ccid_set_card_inserted(0); + io_usb_ccid_set_card_inserted(1); +} diff --git a/src/gpg_ux.h b/src/gpg_ux.h new file mode 100644 index 0000000..509ed8a --- /dev/null +++ b/src/gpg_ux.h @@ -0,0 +1,48 @@ + +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +#ifndef GPG_UX_H +#define GPG_UX_H + +#if GPG_MULTISLOT +#if GPG_KEYS_SLOTS != 3 +#error menu definition not correct for current value of GPG_KEYS_SLOTS +#endif +#endif + +#define STR(x) #x +#define XSTR(x) STR(x) + +#define LABEL_SIG "Signature" +#define LABEL_AUT "Authentication" +#define LABEL_DEC "Decryption" + +#define LABEL_RSA2048 "RSA 2048" +#define LABEL_RSA3072 "RSA 3072" +#define LABEL_RSA4096 "RSA 4096" +#define LABEL_NISTP256 "NIST P256" +#define LABEL_SECP256K1 "SECP 256K1" +#define LABEL_Ed25519 "Ed25519" + +void ui_CCID_reset(void); +void ui_init(void); +void ui_menu_pinconfirm_display(unsigned int value); +void ui_menu_pinentry_display(unsigned int value); +void ui_menu_uifconfirm_display(unsigned int value); + +#endif // GPG_UX_H diff --git a/src/gpg_ux_msg.c b/src/gpg_ux_msg.c index ea0c4ca..616775b 100644 --- a/src/gpg_ux_msg.c +++ b/src/gpg_ux_msg.c @@ -1,17 +1,19 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ const char *const C_TEMPLATE_TYPE = "Key type"; const char *const C_TEMPLATE_KEY = "Key"; @@ -23,8 +25,10 @@ const char *const C_NOK = "NOK"; const char *const C_WRONG_PIN = "PIN Incorrect"; const char *const C_RIGHT_PIN = "PIN Correct"; const char *const C_PIN_CHANGED = "PIN changed"; +const char *const C_PIN_LOCKED = "PIN locked"; const char *const C_PIN_DIFFERS = "2 PINs differs"; -const char *const C_PIN_USER = "User PIN"; +const char *const C_PIN_USER_81 = "User PIN 0x81"; +const char *const C_PIN_USER_82 = "User PIN 0x82"; const char *const C_PIN_ADMIN = "Admin PIN"; const char *const C_VERIFIED = "Verified"; diff --git a/src/gpg_ux_msg.h b/src/gpg_ux_msg.h index ade9c3f..c5ebdf6 100644 --- a/src/gpg_ux_msg.h +++ b/src/gpg_ux_msg.h @@ -1,17 +1,19 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #ifndef GPG_UX_MSG_H #define GPG_UX_MSG_H @@ -26,8 +28,10 @@ extern const char *const C_NOK; extern const char *const C_WRONG_PIN; extern const char *const C_RIGHT_PIN; extern const char *const C_PIN_CHANGED; +extern const char *const C_PIN_LOCKED; extern const char *const C_PIN_DIFFERS; -extern const char *const C_PIN_USER; +extern const char *const C_PIN_USER_81; +extern const char *const C_PIN_USER_82; extern const char *const C_PIN_ADMIN; extern const char *const C_VERIFIED; @@ -49,8 +53,10 @@ extern const char *const C_UIF_INVALID; #define WRONG_PIN PICSTR(C_WRONG_PIN) #define RIGHT_PIN PICSTR(C_RIGHT_PIN) #define PIN_CHANGED PICSTR(C_PIN_CHANGED) +#define PIN_LOCKED PICSTR(C_PIN_LOCKED) #define PIN_DIFFERS PICSTR(C_PIN_DIFFERS) -#define PIN_USER PICSTR(C_PIN_USER) +#define PIN_USER_81 PICSTR(C_PIN_USER_81) +#define PIN_USER_82 PICSTR(C_PIN_USER_82) #define PIN_ADMIN PICSTR(C_PIN_ADMIN) #define VERIFIED PICSTR(C_VERIFIED) #define NOT_VERIFIED PICSTR(C_NOT_VERIFIED) diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 5af5994..3e9e8cc 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -1,79 +1,47 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ -#ifdef UI_NANO_S +#include "bolos_target.h" +#if defined(HAVE_BAGL) && defined(TARGET_NANOS) #include "gpg_vars.h" #include "gpg_ux_msg.h" +#include "gpg_ux.h" #include "usbd_ccid_if.h" /* ----------------------------------------------------------------------- */ /* --- NanoS UI layout --- */ /* ----------------------------------------------------------------------- */ -const ux_menu_entry_t ui_menu_template[]; -void ui_menu_template_display(unsigned int value); -const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element); void ui_menu_tmpl_set_action(unsigned int value); -const ux_menu_entry_t ui_menu_tmpl_key[]; void ui_menu_tmpl_key_action(unsigned int value); -const ux_menu_entry_t ui_menu_tmpl_type[]; void ui_menu_tmpl_type_action(unsigned int value); - -const ux_menu_entry_t ui_menu_seed[]; -void ui_menu_seed_display(unsigned int value); -const bagl_element_t *ui_menu_seed_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element); -void ui_menu_seed_action(unsigned int value); - -const ux_menu_entry_t ui_menu_reset[]; +void ui_menu_seedmode_action(unsigned int value); void ui_menu_reset_action(unsigned int value); #if GPG_MULTISLOT -const ux_menu_entry_t ui_menu_slot[]; -void ui_menu_slot_display(unsigned int value); -const bagl_element_t *ui_menu_slot_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element); void ui_menu_slot_action(unsigned int value); #endif const ux_menu_entry_t ui_menu_settings[]; - -const ux_menu_entry_t ui_menu_main[]; void ui_menu_main_display(unsigned int value); -const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element); - -const bagl_element_t ui_pinconfirm_nanos[]; -void ui_menu_pinconfirm_action(unsigned int value); -unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); -unsigned int ui_pinconfirm_prepro(const bagl_element_t *element); - -const bagl_element_t ui_pinentry_nanos[]; -void ui_menu_pinentry_display(unsigned int value); -void ui_menu_pinentry_action(unsigned int value); -unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); -unsigned int ui_pinentry_prepro(const bagl_element_t *element); -static unsigned int validate_pin(); +unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter); /* ------------------------------- Helpers UX ------------------------------- */ -void ui_CCID_reset(void) { - io_usb_ccid_set_card_inserted(0); - io_usb_ccid_set_card_inserted(1); -} void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { memset(&G_gpg_vstate.ui_dogsays[0], 0, sizeof(ux_menu_entry_t)); @@ -87,10 +55,12 @@ void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsig }; /* ------------------------------ UIF CONFIRM UX ----------------------------- */ -unsigned int ui_uifconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); -unsigned int ui_uifconfirm_prepro(const bagl_element_t *element); -const bagl_element_t ui_uifconfirm_nanos[] = { +unsigned int ui_uifconfirm_action_button(unsigned int button_mask, + unsigned int button_mask_counter); +unsigned int ui_uifconfirm_predisplay(const bagl_element_t *element); + +const bagl_element_t ui_uifconfirm_action[] = { // type userid x y w h str rad fill fg bg // font_id icon_id {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, @@ -131,90 +101,87 @@ const bagl_element_t ui_uifconfirm_nanos[] = { void ui_menu_uifconfirm_display(unsigned int value) { UNUSED(value); - UX_DISPLAY(ui_uifconfirm_nanos, (void *) ui_uifconfirm_prepro); + UX_DISPLAY(ui_uifconfirm_action, (void *) ui_uifconfirm_predisplay); } -unsigned int ui_uifconfirm_prepro(const bagl_element_t *element) { - if (element->component.userid == 1) { - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm:"); - return 1; +unsigned int ui_uifconfirm_predisplay(const bagl_element_t *element) { + memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + + switch (element->component.userid) { + case 1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm:"); + break; + case 2: + switch (G_gpg_vstate.io_ins) { + case INS_INTERNAL_AUTHENTICATE: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Authentication"); + break; + case INS_PSO: + switch (G_gpg_vstate.io_p1p2) { + case PSO_CDS: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); + break; + case PSO_ENC: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); + break; + case PSO_DEC: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); + break; + default: + break; + } + break; + default: + break; + } + break; + default: + break; } - if (element->component.userid == 2) { - unsigned int uif_case = - (G_gpg_vstate.io_ins << 16) | (G_gpg_vstate.io_p1 << 8) | (G_gpg_vstate.io_p2); - switch (uif_case) { - case 0x002A9E9A: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); - return 1; - case 0x002A8680: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); - return 1; - case 0x002A8086: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); - return 1; - case 0x00880000: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Authentication"); - return 1; - } + if (G_gpg_vstate.menu[0] == 0) { + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); } - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); return 1; } -unsigned int ui_uifconfirm_nanos_button(unsigned int button_mask, - unsigned int button_mask_counter) { +unsigned int ui_uifconfirm_action_button(unsigned int button_mask, + unsigned int button_mask_counter) { UNUSED(button_mask_counter); - unsigned int sw; + unsigned int sw = SW_SECURITY_UIF_ISSUE; - sw = 0x6985; switch (button_mask) { case BUTTON_EVT_RELEASED | BUTTON_LEFT: // CANCEL gpg_io_discard(1); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - sw = 0x6985; break; - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // OK - BEGIN_TRY { - TRY { - G_gpg_vstate.UIF_flags = 1; - if (G_gpg_vstate.io_ins == INS_PSO) { - sw = gpg_apdu_pso(); - } else if (G_gpg_vstate.io_ins == INS_INTERNAL_AUTHENTICATE) { - sw = gpg_apdu_internal_authenticate(); - } else { - gpg_io_discard(1); - sw = 0x6985; - } - } - CATCH_OTHER(e) { + G_gpg_vstate.UIF_flags = 1; + switch (G_gpg_vstate.io_ins) { + case INS_PSO: + sw = gpg_apdu_pso(); + break; + case INS_INTERNAL_AUTHENTICATE: + sw = gpg_apdu_internal_authenticate(); + break; + default: gpg_io_discard(1); - if ((e & 0xFFFF0000) || - (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { - gpg_io_insert_u32(e); - sw = 0x6f42; - } else { - sw = e; - } - } - FINALLY { - G_gpg_vstate.UIF_flags = 0; - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - } - break; + sw = SW_CONDITIONS_NOT_SATISFIED; + break; } - END_TRY; + G_gpg_vstate.UIF_flags = 0; + break; } + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); return 0; } /* ------------------------------ PIN CONFIRM UX ----------------------------- */ -const bagl_element_t ui_pinconfirm_nanos[] = { +unsigned int ui_pinconfirm_action_button(unsigned int button_mask, + unsigned int button_mask_counter); + +const bagl_element_t ui_pinconfirm_action[] = { // type userid x y w h str rad fill fg bg // font_id icon_id {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, @@ -253,26 +220,21 @@ const bagl_element_t ui_pinconfirm_nanos[] = { G_gpg_vstate.menu}, }; -void ui_menu_pinconfirm_display(unsigned int value) { - UNUSED(value); - UX_DISPLAY(ui_pinconfirm_nanos, (void *) ui_pinconfirm_prepro); -} - -unsigned int ui_pinconfirm_prepro(const bagl_element_t *element) { +unsigned int ui_pinconfirm_predisplay(const bagl_element_t *element) { if (element->component.userid == 1) { - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || - (G_gpg_vstate.io_p2 == 0x83)) { + if ((G_gpg_vstate.io_p2 == PIN_ID_PW1) || (G_gpg_vstate.io_p2 == PIN_ID_PW2) || + (G_gpg_vstate.io_p2 == PIN_ID_PW3)) { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm PIN"); return 1; } } if (element->component.userid == 2) { - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || - (G_gpg_vstate.io_p2 == 0x83)) { + if ((G_gpg_vstate.io_p2 == PIN_ID_PW1) || (G_gpg_vstate.io_p2 == PIN_ID_PW2) || + (G_gpg_vstate.io_p2 == PIN_ID_PW3)) { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s %x", - G_gpg_vstate.io_p2 == 0x83 ? "Admin" : "User", + G_gpg_vstate.io_p2 == PIN_ID_PW3 ? "Admin" : "User", G_gpg_vstate.io_p2); return 1; } @@ -281,21 +243,25 @@ unsigned int ui_pinconfirm_prepro(const bagl_element_t *element) { return 1; } -unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, - unsigned int button_mask_counter) { +void ui_menu_pinconfirm_display(unsigned int value) { + UNUSED(value); + UX_DISPLAY(ui_pinconfirm_action, (void *) ui_pinconfirm_predisplay); +} + +unsigned int ui_pinconfirm_action_button(unsigned int button_mask, + unsigned int button_mask_counter) { UNUSED(button_mask_counter); - unsigned int sw; + unsigned int sw = SW_CONDITIONS_NOT_SATISFIED; - sw = 0x6985; switch (button_mask) { case BUTTON_EVT_RELEASED | BUTTON_LEFT: // CANCEL gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); - sw = 0x6985; + sw = SW_CONDITIONS_NOT_SATISFIED; break; case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // OK gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); - sw = 0x9000; + sw = SW_OK; break; default: return 0; @@ -309,15 +275,19 @@ unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, /* ------------------------------- PIN ENTRY UX ------------------------------ */ -const bagl_element_t ui_pinentry_nanos[] = { +const bagl_element_t ui_pinentry_action[] = { // type userid x y w h str rad fill fg bg // font_id icon_id - {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 32, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, - {{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_DOWN}, NULL}, + // clear screen + {{BAGL_RECTANGLE, 0x00, 0, 0, 128, BAGL_HEIGHT, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, + NULL}, + // left/rights icons + {{BAGL_ICON, 0x00, 3, 12, 7, 7, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_DOWN}, NULL}, {{BAGL_ICON, 0x00, 117, 13, 8, 6, 0, 0, 0, 0xFFFFFF, 0x000000, 0, BAGL_GLYPH_ICON_UP}, NULL}, + // PIN text identifier {{BAGL_LABELINE, 0x01, 0, @@ -332,6 +302,8 @@ const bagl_element_t ui_pinentry_nanos[] = { BAGL_FONT_OPEN_SANS_EXTRABOLD_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, G_gpg_vstate.menu}, + + // PIN Value {{BAGL_LABELINE, 0x02, 0, @@ -345,69 +317,53 @@ const bagl_element_t ui_pinentry_nanos[] = { 0x000000, BAGL_FONT_OPEN_SANS_REGULAR_11px | BAGL_FONT_ALIGNMENT_CENTER, 0}, - G_gpg_vstate.menu}, -}; + G_gpg_vstate.menu}}; static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '<', 'A', 'V'}; -void ui_menu_pinentry_display(unsigned int value) { - if (value == 0) { - memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); - G_gpg_vstate.ux_pinentry[0] = 1; - G_gpg_vstate.ux_pinentry[1] = 5; - } - UX_DISPLAY(ui_pinentry_nanos, (void *) ui_pinentry_prepro); -} - -unsigned int ui_pinentry_prepro(const bagl_element_t *element) { +unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { if (element->component.userid == 1) { - if (G_gpg_vstate.io_ins == 0x24) { + if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { switch (G_gpg_vstate.io_p1) { case 0: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Current %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); break; case 1: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "New %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); break; case 2: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); break; default: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "WAT %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); break; } } else { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); } } else if (element->component.userid == 2) { unsigned int i; G_gpg_vstate.menu[0] = ' '; -#if 0 - for (i = 1; i <= G_gpg_vstate.ux_pinentry[0]; i++) { - G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; - } -#else for (i = 1; i < G_gpg_vstate.ux_pinentry[0]; i++) { G_gpg_vstate.menu[i] = '*'; } G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; i++; -#endif for (; i <= GPG_MAX_PW_LENGTH; i++) { G_gpg_vstate.menu[i] = '-'; } @@ -417,76 +373,24 @@ unsigned int ui_pinentry_prepro(const bagl_element_t *element) { return 1; } -unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { - UNUSED(button_mask_counter); - unsigned int offset = G_gpg_vstate.ux_pinentry[0]; - char digit; - - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down - if (G_gpg_vstate.ux_pinentry[offset]) { - G_gpg_vstate.ux_pinentry[offset]--; - } else { - G_gpg_vstate.ux_pinentry[offset] = sizeof(C_pin_digit) - 1; - } - ui_menu_pinentry_display(1); - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // up - G_gpg_vstate.ux_pinentry[offset]++; - if (G_gpg_vstate.ux_pinentry[offset] == sizeof(C_pin_digit)) { - G_gpg_vstate.ux_pinentry[offset] = 0; - } - ui_menu_pinentry_display(1); - break; - - case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: - digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; - // next digit - if ((digit >= '0') && (digit <= '9')) { - offset++; - G_gpg_vstate.ux_pinentry[0] = offset; - if (offset == GPG_MAX_PW_LENGTH + 1) { - validate_pin(); - } else { - G_gpg_vstate.ux_pinentry[offset] = 5; - ui_menu_pinentry_display(1); - } - } - // cancel digit - else if (digit == '<') { - if (offset > 1) { - offset--; - G_gpg_vstate.ux_pinentry[0] = offset; - } - ui_menu_pinentry_display(1); - } - // validate pin - else if (digit == 'V') { - G_gpg_vstate.ux_pinentry[0] = offset - 1; - validate_pin(); - } - // cancel input without check - else { //(digit == 'A') - gpg_io_discard(0); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - } - break; +void ui_menu_pinentry_display(unsigned int value) { + if (value == 0) { + memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + G_gpg_vstate.ux_pinentry[0] = 1; + G_gpg_vstate.ux_pinentry[1] = 5; } - return 0; + UX_DISPLAY(ui_pinentry_action, (void *) ui_pinentry_predisplay); } -// >= 0 -static unsigned int validate_pin() { - unsigned int offset, len, sw; + +static void validate_pin() { + unsigned int offset, len, sw = SW_UNKNOWN; gpg_pin_t *pin; for (offset = 1; offset <= G_gpg_vstate.ux_pinentry[0]; offset++) { G_gpg_vstate.menu[offset] = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; } - if (G_gpg_vstate.io_ins == 0x20) { + if (G_gpg_vstate.io_ins == INS_VERIFY) { pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); sw = gpg_pin_check(pin, G_gpg_vstate.io_p2, @@ -506,7 +410,7 @@ static unsigned int validate_pin() { } } - if (G_gpg_vstate.io_ins == 0x24) { + if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { if (G_gpg_vstate.io_p1 <= 2) { gpg_io_insert_u8(G_gpg_vstate.ux_pinentry[0]); gpg_io_insert((unsigned char *) (G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); @@ -526,7 +430,7 @@ static unsigned int validate_pin() { " %d tries remaining", pin->counter); ui_info(WRONG_PIN, NULL, ui_menu_main_display, 0); - return 0; + return; } offset = 1 + G_gpg_vstate.work.io_buffer[0]; len = G_gpg_vstate.work.io_buffer[offset]; @@ -539,39 +443,85 @@ static unsigned int validate_pin() { gpg_io_do(IO_RETURN_AFTER_TX); ui_info(PIN_DIFFERS, NULL, ui_menu_main_display, 0); } else { - gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), - G_gpg_vstate.work.io_buffer + offset + 1, - len); + sw = gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), + G_gpg_vstate.work.io_buffer + offset + 1, + len); gpg_io_discard(1); - gpg_io_insert_u16(SW_OK); + gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); - // ui_info(PIN_CHANGED, NULL, ui_menu_main_display, 0); ui_menu_main_display(0); } - return 0; } else { ui_menu_pinentry_display(0); } } +} + +unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter) { + UNUSED(button_mask_counter); + unsigned int offset = G_gpg_vstate.ux_pinentry[0]; + char digit; + + switch (button_mask) { + case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down + if (G_gpg_vstate.ux_pinentry[offset]) { + G_gpg_vstate.ux_pinentry[offset]--; + } else { + G_gpg_vstate.ux_pinentry[offset] = sizeof(C_pin_digit) - 1; + } + ui_menu_pinentry_display(1); + break; + + case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // up + G_gpg_vstate.ux_pinentry[offset]++; + if (G_gpg_vstate.ux_pinentry[offset] == sizeof(C_pin_digit)) { + G_gpg_vstate.ux_pinentry[offset] = 0; + } + ui_menu_pinentry_display(1); + break; + + case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: + digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; + // next digit + if ((digit >= '0') && (digit <= '9')) { + offset++; + G_gpg_vstate.ux_pinentry[0] = offset; + if (offset == GPG_MAX_PW_LENGTH + 1) { + validate_pin(); + } else { + G_gpg_vstate.ux_pinentry[offset] = 5; + ui_menu_pinentry_display(1); + } + } + // cancel digit + else if (digit == '<') { + if (offset > 1) { + offset--; + G_gpg_vstate.ux_pinentry[0] = offset; + } + ui_menu_pinentry_display(1); + } + // validate pin + else if (digit == 'V') { + G_gpg_vstate.ux_pinentry[0] = offset - 1; + validate_pin(); + } + // cancel input without check + else { //(digit == 'A') + gpg_io_discard(0); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); + } + break; + } return 0; } + /* ------------------------------- template UX ------------------------------- */ -#define LABEL_SIG "Signature" -#define LABEL_AUT "Authentication" -#define LABEL_DEC "Decryption" - -#define LABEL_RSA2048 "RSA 2048" -#define LABEL_RSA3072 "RSA 3072" -#define LABEL_RSA4096 "RSA 4096" -#define LABEL_NISTP256 "NIST P256" -// #define LABEL_NISTP384 "NIST P384" -// #define LABEL_NISTP521 "NIST P521" -#define LABEL_SECP256K1 "SECP 256K1" -// #define LABEL_BPOOL256R1 "Brainpool 256R1" -// #define LABEL_BPOOL384R1 "Brainpool 384R1" -// #define LABEL_BPOOL512R1 "Brainpool 512R1" -#define LABEL_Ed25519 "Ed25519" +const ux_menu_entry_t ui_menu_tmpl_key[]; +const ux_menu_entry_t ui_menu_tmpl_type[]; const ux_menu_entry_t ui_menu_template[] = { {ui_menu_tmpl_key, NULL, -1, NULL, "Choose key...", NULL, 0, 0}, @@ -580,12 +530,24 @@ const ux_menu_entry_t ui_menu_template[] = { {ui_menu_settings, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; -void ui_menu_template_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_template, ui_menu_template_preprocessor); -} +const ux_menu_entry_t ui_menu_tmpl_key[] = { + {NULL, ui_menu_tmpl_key_action, 1, NULL, LABEL_SIG, NULL, 0, 0}, + {NULL, ui_menu_tmpl_key_action, 2, NULL, LABEL_DEC, NULL, 0, 0}, + {NULL, ui_menu_tmpl_key_action, 3, NULL, LABEL_AUT, NULL, 0, 0}, + {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, + UX_MENU_END}; -const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element) { +const ux_menu_entry_t ui_menu_tmpl_type[] = { + {NULL, ui_menu_tmpl_type_action, 2048, NULL, LABEL_RSA2048, NULL, 0, 0}, + {NULL, ui_menu_tmpl_type_action, 3072, NULL, LABEL_RSA3072, NULL, 0, 0}, + {NULL, ui_menu_tmpl_type_action, 4096, NULL, LABEL_RSA4096, NULL, 0, 0}, + {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256R1, NULL, LABEL_NISTP256, NULL, 0, 0}, + {NULL, ui_menu_tmpl_type_action, CX_CURVE_Ed25519, NULL, LABEL_Ed25519, NULL, 0, 0}, + {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, + UX_MENU_END}; + +const bagl_element_t *ui_menu_template_predisplay(const ux_menu_entry_t *entry, + bagl_element_t *element) { if (element->component.userid == 0x20) { if (entry == &ui_menu_template[0]) { switch (G_gpg_vstate.ux_key) { @@ -619,29 +581,6 @@ const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry case CX_CURVE_SECP256R1: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_NISTP256); break; - /* - case CX_CURVE_SECP384R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_NISTP384); - break; - case CX_CURVE_SECP521R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_NISTP521); - break; - case CX_CURVE_SECP256K1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_SECP256K1); - break; - */ - /* - case CX_CURVE_BrainPoolP256R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL256R1); - break; - case CX_CURVE_BrainPoolP384R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL384R1); - break; - case CX_CURVE_BrainPoolP512R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)," %s", LABEL_BPOOL512R1); - break; - */ - case CX_CURVE_Ed25519: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_Ed25519); break; @@ -655,23 +594,24 @@ const bagl_element_t *ui_menu_template_preprocessor(const ux_menu_entry_t *entry return element; } +void ui_menu_template_display(unsigned int value) { + UX_MENU_DISPLAY(value, ui_menu_template, ui_menu_template_predisplay); +} + void ui_menu_tmpl_set_action(unsigned int value) { UNUSED(value); LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); - gpg_key_t *dest; - const char *err; + gpg_key_t *dest = NULL; const unsigned char *oid; unsigned int oid_len; - err = NULL; memset(&attributes, 0, sizeof(attributes)); switch (G_gpg_vstate.ux_type) { case 2048: case 3072: case 4096: - attributes.value[0] = 0x01; - attributes.value[1] = (G_gpg_vstate.ux_type >> 8) & 0xFF; - attributes.value[2] = G_gpg_vstate.ux_type & 0xFF; + attributes.value[0] = KEY_ID_RSA; + U2BE_ENCODE(attributes.value, 1, G_gpg_vstate.ux_type); attributes.value[3] = 0x00; attributes.value[4] = 0x20; attributes.value[5] = 0x01; @@ -679,16 +619,10 @@ void ui_menu_tmpl_set_action(unsigned int value) { break; case CX_CURVE_SECP256R1: - // case CX_CURVE_SECP256K1: - // case CX_CURVE_SECP384R1: - // case CX_CURVE_SECP521R1: - // case CX_CURVE_BrainPoolP256R1: - // case CX_CURVE_BrainPoolP384R1: - // case CX_CURVE_BrainPoolP512R1: if (G_gpg_vstate.ux_key == 2) { - attributes.value[0] = 18; // ecdh + attributes.value[0] = KEY_ID_ECDH; } else { - attributes.value[0] = 19; // ecdsa + attributes.value[0] = KEY_ID_ECDSA; } oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); memmove(attributes.value + 1, oid, sizeof(oid_len)); @@ -697,22 +631,24 @@ void ui_menu_tmpl_set_action(unsigned int value) { case CX_CURVE_Ed25519: if (G_gpg_vstate.ux_key == 2) { - attributes.value[0] = 18; // ecdh + attributes.value[0] = KEY_ID_ECDH; memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); attributes.length = 1 + sizeof(C_OID_cv25519); } else { - attributes.value[0] = 22; // eddsa + attributes.value[0] = KEY_ID_EDDSA; memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); attributes.length = 1 + sizeof(C_OID_Ed25519); } break; default: - err = TEMPLATE_TYPE; - goto ERROR; + break; + } + if (attributes.value[0] == 0) { + ui_info(INVALID_SELECTION, TEMPLATE_TYPE, ui_menu_template_display, 0); + return; } - dest = NULL; switch (G_gpg_vstate.ux_key) { case 1: dest = &G_gpg_vstate.kslot->sig; @@ -724,48 +660,23 @@ void ui_menu_tmpl_set_action(unsigned int value) { dest = &G_gpg_vstate.kslot->aut; break; default: - err = TEMPLATE_KEY; - goto ERROR; + break; } - nvm_write(dest, NULL, sizeof(gpg_key_t)); - nvm_write(&dest->attributes, &attributes, sizeof(attributes)); - ui_info(OK, NULL, ui_menu_template_display, 0); - return; - -ERROR: - ui_info(INVALID_SELECTION, err, ui_menu_template_display, 0); + if (dest != NULL) { + nvm_write(dest, NULL, sizeof(gpg_key_t)); + nvm_write(&dest->attributes, &attributes, sizeof(attributes)); + ui_info(OK, NULL, ui_menu_template_display, 0); + } else { + ui_info(INVALID_SELECTION, TEMPLATE_KEY, ui_menu_template_display, 0); + } } -const ux_menu_entry_t ui_menu_tmpl_key[] = { - {NULL, ui_menu_tmpl_key_action, 1, NULL, LABEL_SIG, NULL, 0, 0}, - {NULL, ui_menu_tmpl_key_action, 2, NULL, LABEL_DEC, NULL, 0, 0}, - {NULL, ui_menu_tmpl_key_action, 3, NULL, LABEL_AUT, NULL, 0, 0}, - {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, - UX_MENU_END}; - void ui_menu_tmpl_key_action(unsigned int value) { G_gpg_vstate.ux_key = value; ui_menu_template_display(0); } -const ux_menu_entry_t ui_menu_tmpl_type[] = { - {NULL, ui_menu_tmpl_type_action, 2048, NULL, LABEL_RSA2048, NULL, 0, 0}, - {NULL, ui_menu_tmpl_type_action, 3072, NULL, LABEL_RSA3072, NULL, 0, 0}, - {NULL, ui_menu_tmpl_type_action, 4096, NULL, LABEL_RSA4096, NULL, 0, 0}, - {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256R1, NULL, LABEL_NISTP256, NULL, 0, 0}, - // {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP384R1, NULL, - // LABEL_NISTP384, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, - // CX_CURVE_SECP521R1, NULL, LABEL_NISTP521, NULL, 0, 0}, {NULL, - // ui_menu_tmpl_type_action, CX_CURVE_SECP256K1, NULL, LABEL_SECP256K1, NULL, 0, 0}, - // {NULL, ui_menu_tmpl_type_action, CX_CURVE_BrainPoolP256R1, NULL, - // LABEL_BPOOL256R1, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, - // CX_CURVE_BrainPoolP384R1, NULL, LABEL_BPOOL384R1, NULL, 0, 0}, {NULL, - // ui_menu_tmpl_type_action, CX_CURVE_BrainPoolP512R1, NULL, LABEL_BPOOL512R1, NULL, 0, 0}, - {NULL, ui_menu_tmpl_type_action, CX_CURVE_Ed25519, NULL, LABEL_Ed25519, NULL, 0, 0}, - {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, - UX_MENU_END}; - void ui_menu_tmpl_type_action(unsigned int value) { G_gpg_vstate.ux_type = value; ui_menu_template_display(1); @@ -773,21 +684,17 @@ void ui_menu_tmpl_type_action(unsigned int value) { /* --------------------------------- SEED UX --------------------------------- */ -const ux_menu_entry_t ui_menu_seed[] = { +const ux_menu_entry_t ui_menu_seedmode[] = { {NULL, NULL, 0, NULL, "", NULL, 0, 0}, - {NULL, ui_menu_seed_action, 1, NULL, "Set on", NULL, 0, 0}, - {NULL, ui_menu_seed_action, 0, NULL, "Set off", NULL, 0, 0}, + {NULL, ui_menu_seedmode_action, 1, NULL, "Set on", NULL, 0, 0}, + {NULL, ui_menu_seedmode_action, 0, NULL, "Set off", NULL, 0, 0}, {ui_menu_settings, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; -void ui_menu_seed_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_seed, ui_menu_seed_preprocessor); -} - -const bagl_element_t *ui_menu_seed_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element) { +const bagl_element_t *ui_menu_seedmode_predisplay(const ux_menu_entry_t *entry, + bagl_element_t *element) { if (element->component.userid == 0x20) { - if (entry == &ui_menu_seed[0]) { + if (entry == &ui_menu_seedmode[0]) { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "< %s >", @@ -798,17 +705,20 @@ const bagl_element_t *ui_menu_seed_preprocessor(const ux_menu_entry_t *entry, return element; } -void ui_menu_seed_action(unsigned int value) { +void ui_menu_seedmode_display(unsigned int value) { + UX_MENU_DISPLAY(value, ui_menu_seedmode, ui_menu_seedmode_predisplay); +} + +void ui_menu_seedmode_action(unsigned int value) { G_gpg_vstate.seed_mode = value; - ui_menu_seed_display(0); + ui_menu_seedmode_display(0); } /* ------------------------------- PIN MODE UX ------------------------------ */ -const ux_menu_entry_t ui_menu_pinmode[]; -void ui_menu_pinmode_display(unsigned int value); -const bagl_element_t *ui_menu_pinmode_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element); + void ui_menu_pinmode_action(unsigned int value); +const bagl_element_t *ui_menu_pinmode_predisplay(const ux_menu_entry_t *entry, + bagl_element_t *element); const ux_menu_entry_t ui_menu_pinmode[] = { {NULL, NULL, -1, NULL, "Choose:", NULL, 0, 0}, @@ -821,11 +731,11 @@ const ux_menu_entry_t ui_menu_pinmode[] = { UX_MENU_END}; void ui_menu_pinmode_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_pinmode, ui_menu_pinmode_preprocessor); + UX_MENU_DISPLAY(value, ui_menu_pinmode, ui_menu_pinmode_predisplay); } -const bagl_element_t *ui_menu_pinmode_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element) { +const bagl_element_t *ui_menu_pinmode_predisplay(const ux_menu_entry_t *entry, + bagl_element_t *element) { if (element->component.userid == 0x20) { if ((entry->userid >= (0x8000 | PIN_MODE_HOST)) && (entry->userid <= (0x8000 | PIN_MODE_TRUST))) { @@ -869,7 +779,7 @@ void ui_menu_pinmode_action(unsigned int value) { case PIN_MODE_SCREEN: case PIN_MODE_CONFIRM: if (!gpg_pin_is_verified(PIN_ID_PW2)) { - ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display, 0); + ui_info(PIN_USER_82, NOT_VERIFIED, ui_menu_pinmode_display, 0); return; } break; @@ -891,11 +801,10 @@ void ui_menu_pinmode_action(unsigned int value) { } /* ------------------------------- UIF MODE UX ------------------------------ */ -const ux_menu_entry_t ui_menu_uifmode[]; -void ui_menu_uifmode_display(unsigned int value); -const bagl_element_t *ui_menu_uifmode_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element); + void ui_menu_uifmode_action(unsigned int value); +const bagl_element_t *ui_menu_uifmode_predisplay(const ux_menu_entry_t *entry, + bagl_element_t *element); const ux_menu_entry_t ui_menu_uifmode[] = { {NULL, NULL, -1, NULL, "Activate (+) for:", NULL, 0, 0}, @@ -906,11 +815,11 @@ const ux_menu_entry_t ui_menu_uifmode[] = { UX_MENU_END}; void ui_menu_uifmode_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_uifmode, ui_menu_uifmode_preprocessor); + UX_MENU_DISPLAY(value, ui_menu_uifmode, ui_menu_uifmode_predisplay); } -const bagl_element_t *ui_menu_uifmode_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element) { +const bagl_element_t *ui_menu_uifmode_predisplay(const ux_menu_entry_t *entry, + bagl_element_t *element) { if (element->component.userid == 0x20) { if ((entry->userid >= 1) && (entry->userid <= 3)) { unsigned char uif[2]; @@ -991,6 +900,7 @@ void ui_menu_reset_action(unsigned int value) { } /* ------------------------------ RESET KEY SLOT ----------------------------- */ + void ui_menu_reset_slot_action(unsigned int value); const ux_menu_entry_t ui_menu_reset_slot[] = { @@ -1009,7 +919,7 @@ void ui_menu_reset_slot_action(unsigned int value) { const ux_menu_entry_t ui_menu_settings[] = { {NULL, ui_menu_template_display, 0, NULL, "Key template", NULL, 0, 0}, - {NULL, ui_menu_seed_display, 0, NULL, "Seed mode", NULL, 0, 0}, + {NULL, ui_menu_seedmode_display, 0, NULL, "Seed mode", NULL, 0, 0}, {NULL, ui_menu_pinmode_display, 0, NULL, "PIN mode", NULL, 0, 0}, {NULL, ui_menu_uifmode_display, 0, NULL, "UIF mode", NULL, 0, 0}, {ui_menu_reset, NULL, 0, NULL, "Reset App", NULL, 0, 0}, @@ -1020,9 +930,6 @@ const ux_menu_entry_t ui_menu_settings[] = { /* --------------------------------- SLOT UX --------------------------------- */ #if GPG_MULTISLOT -#if GPG_KEYS_SLOTS != 3 -#error menu definition not correct for current value of GPG_KEYS_SLOTS -#endif const ux_menu_entry_t ui_menu_slot[] = { {NULL, NULL, -1, NULL, "Choose:", NULL, 0, 0}, @@ -1032,12 +939,9 @@ const ux_menu_entry_t ui_menu_slot[] = { {NULL, ui_menu_slot_action, 128, NULL, "Set Default", NULL, 0, 0}, {NULL, ui_menu_main_display, 1, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; -void ui_menu_slot_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_slot, ui_menu_slot_preprocessor); -} -const bagl_element_t *ui_menu_slot_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element) { +const bagl_element_t *ui_menu_slot_predisplay(const ux_menu_entry_t *entry, + bagl_element_t *element) { unsigned int slot; if (element->component.userid == 0x20) { for (slot = 1; slot <= 3; slot++) { @@ -1057,6 +961,11 @@ const bagl_element_t *ui_menu_slot_preprocessor(const ux_menu_entry_t *entry, } return element; } + +void ui_menu_slot_display(unsigned int value) { + UX_MENU_DISPLAY(value, ui_menu_slot, ui_menu_slot_predisplay); +} + void ui_menu_slot_action(unsigned int value) { unsigned char s; @@ -1068,7 +977,7 @@ void ui_menu_slot_action(unsigned int value) { s = (unsigned char) (value - 1); if (s != G_gpg_vstate.slot) { G_gpg_vstate.slot = s; - G_gpg_vstate.kslot = &N_gpg_pstate->keys[G_gpg_vstate.slot]; + G_gpg_vstate.kslot = (gpg_key_slot_t *) &N_gpg_pstate->keys[G_gpg_vstate.slot]; gpg_mse_reset(); ui_CCID_reset(); } @@ -1080,20 +989,18 @@ void ui_menu_slot_action(unsigned int value) { /* --------------------------------- INFO UX --------------------------------- */ -#define STR(x) #x -#define XSTR(x) STR(x) - const ux_menu_entry_t ui_menu_info[] = { {NULL, NULL, -1, NULL, "OpenPGP Card", NULL, 0, 0}, {NULL, NULL, -1, NULL, "(c) Ledger SAS", NULL, 0, 0}, {NULL, NULL, -1, NULL, "Spec " XSTR(SPEC_VERSION), NULL, 0, 0}, +#ifdef HAVE_PRINTF + {NULL, NULL, -1, NULL, "[DBG] App " XSTR(APPVERSION), NULL, 0, 0}, +#else {NULL, NULL, -1, NULL, "App " XSTR(APPVERSION), NULL, 0, 0}, +#endif {NULL, ui_menu_main_display, 3, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; -#undef STR -#undef XSTR - /* --------------------------------- MAIN UX --------------------------------- */ const ux_menu_entry_t ui_menu_main[] = { @@ -1105,8 +1012,9 @@ const ux_menu_entry_t ui_menu_main[] = { {ui_menu_info, NULL, 0, NULL, "About", NULL, 0, 0}, {NULL, (void *) os_sched_exit, 0, &C_icon_dashboard, "Quit app", NULL, 50, 29}, UX_MENU_END}; -const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, - bagl_element_t *element) { + +const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, + bagl_element_t *element) { if (entry == &ui_menu_main[0]) { if (element->component.userid == 0x21) { memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); @@ -1115,16 +1023,14 @@ const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, memmove(G_gpg_vstate.menu, "", 9); } else { for (int i = 0; i < 12; i++) { - if (G_gpg_vstate.menu[i] == 0x3c) { + if (G_gpg_vstate.menu[i] == '<') { G_gpg_vstate.menu[i] = ' '; } } } } if (element->component.userid == 0x22) { - unsigned int serial; - serial = (G_gpg_vstate.kslot->serial[0] << 24) | (G_gpg_vstate.kslot->serial[1] << 16) | - (G_gpg_vstate.kslot->serial[2] << 8) | (G_gpg_vstate.kslot->serial[3]); + unsigned int serial = U4BE(G_gpg_vstate.kslot->serial, 0); memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); #if GPG_MULTISLOT snprintf(G_gpg_vstate.menu, @@ -1141,9 +1047,11 @@ const bagl_element_t *ui_menu_main_preprocessor(const ux_menu_entry_t *entry, return element; } void ui_menu_main_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_main, ui_menu_main_preprocessor); + UX_MENU_DISPLAY(value, ui_menu_main, ui_menu_main_predisplay); } +/* --- INIT --- */ + void ui_init(void) { ui_menu_main_display(0); // setup the first screen changing @@ -1154,4 +1062,4 @@ void io_seproxyhal_display(const bagl_element_t *element) { io_seproxyhal_display_default((bagl_element_t *) element); } -#endif +#endif // defined(HAVE_BAGL) && defined(TARGET_NANOS) diff --git a/src/gpg_ux_nanos.h b/src/gpg_ux_nanos.h deleted file mode 100644 index 1236858..0000000 --- a/src/gpg_ux_nanos.h +++ /dev/null @@ -1,25 +0,0 @@ - -/* Copyright 2017 Cedric Mesnil , Ledger SAS - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef GPG_UX_NANOS_H -#define GPG_UX_NANOS_H - -void ui_init(void); -void ui_main_display(unsigned int value); -void ui_menu_pinconfirm_display(unsigned int value); -void ui_menu_pinentry_display(unsigned int value); -void ui_menu_uifconfirm_display(unsigned int value); -#endif diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 0bd621c..58246ef 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -1,71 +1,53 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ -#ifdef UI_NANO_X +#include "bolos_target.h" +#if defined(HAVE_BAGL) && (defined(TARGET_NANOX) || defined(TARGET_NANOS2)) #include "gpg_vars.h" #include "gpg_ux_msg.h" +#include "gpg_ux.h" #include "usbd_ccid_if.h" /* ----------------------------------------------------------------------- */ -/* --- NanoS UI layout --- */ +/* --- NanoX UI layout --- */ /* ----------------------------------------------------------------------- */ -void ui_menu_settings_display(unsigned int value); - -void ui_menu_template_display(unsigned int value); void ui_menu_tmpl_set_action(unsigned int value); void ui_menu_tmpl_key_action(unsigned int value); void ui_menu_tmpl_type_action(unsigned int value); - -void ui_menu_seed_display(unsigned int value); -void ui_menu_seed_action(unsigned int value); - +void ui_menu_seedmode_action(unsigned int value); void ui_menu_reset_action(unsigned int value); #if GPG_MULTISLOT -void ui_menu_slot_display(unsigned int value); void ui_menu_slot_action(unsigned int value); #endif +void ui_menu_settings_display(unsigned int value); void ui_menu_main_display(unsigned int value); - -void ui_menu_pinconfirm_action(unsigned int value); -unsigned int ui_pinconfirm_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); -unsigned int ui_pinconfirm_prepro(const bagl_element_t *element); - -const bagl_element_t ui_pinentry_nanos[]; -void ui_menu_pinentry_display(unsigned int value); -void ui_menu_pinentry_action(unsigned int value); -unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter); -unsigned int ui_pinentry_prepro(const bagl_element_t *element); -static unsigned int validate_pin(); +unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter); /* ------------------------------- Helpers UX ------------------------------- */ + #define ui_flow_display(f, i) \ if ((i) < ARRAYLEN(f)) \ ux_flow_init(0, f, f[i]); \ else \ ux_flow_init(0, f, NULL) -void ui_CCID_reset(void) { -#ifdef HAVE_USB_CLASS_CCID - io_usb_ccid_set_card_inserted(0); - io_usb_ccid_set_card_inserted(1); -#endif -} - UX_STEP_CB(ux_menu_popup_1_step, bnnn_paging, ui_menu_main_display(0), @@ -100,23 +82,30 @@ UX_FLOW(ux_flow_uifconfirm, &ux_menu_uifconfirm_2_step); void ui_menu_uifconfirm_predisplay() { - unsigned int uif_case = - (G_gpg_vstate.io_ins << 16) | (G_gpg_vstate.io_p1 << 8) | (G_gpg_vstate.io_p2); - switch (uif_case) { - case 0x002A9E9A: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); - break; - case 0x002A8680: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); - break; - case 0x002A8086: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); - break; - case 0x00880000: + switch (G_gpg_vstate.io_ins) { + case INS_INTERNAL_AUTHENTICATE: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Authentication"); break; + case INS_PSO: + switch (G_gpg_vstate.io_p1p2) { + case PSO_CDS: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); + break; + case PSO_ENC: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); + break; + case PSO_DEC: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); + break; + default: + break; + } + break; default: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); + break; + } + if (G_gpg_vstate.menu[0] == 0) { + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); } } @@ -125,52 +114,36 @@ void ui_menu_uifconfirm_display(unsigned int value) { } unsigned int ui_uifconfirm_action(unsigned int value) { - unsigned int sw; + unsigned int sw = SW_SECURITY_UIF_ISSUE; - sw = 0x6985; if (value == 1) { - BEGIN_TRY { - TRY { - G_gpg_vstate.UIF_flags = 1; - if (G_gpg_vstate.io_ins == INS_PSO) { - sw = gpg_apdu_pso(); - } else if (G_gpg_vstate.io_ins == INS_INTERNAL_AUTHENTICATE) { - sw = gpg_apdu_internal_authenticate(); - } else { - gpg_io_discard(1); - sw = 0x6985; - } - } - CATCH_OTHER(e) { + G_gpg_vstate.UIF_flags = 1; + switch (G_gpg_vstate.io_ins) { + case INS_PSO: + sw = gpg_apdu_pso(); + break; + case INS_INTERNAL_AUTHENTICATE: + sw = gpg_apdu_internal_authenticate(); + break; + default: gpg_io_discard(1); - if ((e & 0xFFFF0000) || (((e & 0xF000) != 0x6000) && ((e & 0xF000) != 0x9000))) { - gpg_io_insert_u32(e); - sw = 0x6f42; - } else { - sw = e; - } - } - FINALLY { - G_gpg_vstate.UIF_flags = 0; - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - } + sw = SW_CONDITIONS_NOT_SATISFIED; + break; } - END_TRY; + G_gpg_vstate.UIF_flags = 0; } else { gpg_io_discard(1); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); } + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); return 0; } /* ------------------------------ PIN CONFIRM UX ----------------------------- */ + unsigned int ui_pinconfirm_action(unsigned int value); void ui_menu_pinconfirm_predisplay(void); -void ui_menu_pinconfirm_display(unsigned int value); UX_STEP_NOCB_INIT(ux_menu_pinconfirm_1_step, nnn, @@ -199,12 +172,12 @@ UX_FLOW(ux_flow_pinconfirm, &ux_menu_pinconfirm_3_step); void ui_menu_pinconfirm_predisplay() { - if ((G_gpg_vstate.io_p2 == 0x81) || (G_gpg_vstate.io_p2 == 0x82) || - (G_gpg_vstate.io_p2 == 0x83)) { + if ((G_gpg_vstate.io_p2 == PIN_ID_PW1) || (G_gpg_vstate.io_p2 == PIN_ID_PW2) || + (G_gpg_vstate.io_p2 == PIN_ID_PW3)) { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s %x", - G_gpg_vstate.io_p2 == 0x83 ? "Admin" : "User", + G_gpg_vstate.io_p2 == PIN_ID_PW3 ? "Admin" : "User", G_gpg_vstate.io_p2); } else { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); @@ -217,14 +190,14 @@ void ui_menu_pinconfirm_display(unsigned int value) { } unsigned int ui_pinconfirm_action(unsigned int value) { - unsigned int sw; + unsigned int sw = SW_UNKNOWN; if (value == 1) { gpg_pin_set_verified(G_gpg_vstate.io_p2, 1); - sw = 0x9000; + sw = SW_OK; } else { gpg_pin_set_verified(G_gpg_vstate.io_p2, 0); - sw = 0x6985; + sw = SW_CONDITIONS_NOT_SATISFIED; } gpg_io_discard(0); gpg_io_insert_u16(sw); @@ -235,12 +208,13 @@ unsigned int ui_pinconfirm_action(unsigned int value) { /* ------------------------------- PIN ENTRY UX ------------------------------ */ -const bagl_element_t ui_pinentry_nanos[] = { +const bagl_element_t ui_pinentry_action[] = { // type userid x y w h str rad fill fg bg // font_id icon_id // clear screen - {{BAGL_RECTANGLE, 0x00, 0, 0, 128, 64, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, NULL}, + {{BAGL_RECTANGLE, 0x00, 0, 0, 128, BAGL_HEIGHT, 0, 0, BAGL_FILL, 0x000000, 0xFFFFFF, 0, 0}, + NULL}, // left/rights icons {{BAGL_ICON, 0x00, 0, 30, 7, 4, 0, 0, 0, 0xFFFFFF, 0x000000, 0, 0}, @@ -279,66 +253,52 @@ const bagl_element_t ui_pinentry_nanos[] = { BAGL_FONT_OPEN_SANS_LIGHT_16px | BAGL_FONT_ALIGNMENT_CENTER, 0}, G_gpg_vstate.menu}}; -static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '<', 'A', 'V'}; -void ui_menu_pinentry_display(unsigned int value) { - if (value == 0) { - memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); - G_gpg_vstate.ux_pinentry[0] = 1; - G_gpg_vstate.ux_pinentry[1] = 5; - } - UX_DISPLAY(ui_pinentry_nanos, (void *) ui_pinentry_prepro); -} +static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '<', 'A', 'V'}; -unsigned int ui_pinentry_prepro(const bagl_element_t *element) { +unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { if (element->component.userid == 1) { - if (G_gpg_vstate.io_ins == 0x24) { + if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { switch (G_gpg_vstate.io_p1) { case 0: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Current %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); break; case 1: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "New %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); break; case 2: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Confirm %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); break; default: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "WAT %s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); break; } } else { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s PIN", - (G_gpg_vstate.io_p2 == 0x83) ? "Admin" : "User"); + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); } } else if (element->component.userid == 2) { unsigned int i; G_gpg_vstate.menu[0] = ' '; -#if 0 - for (i = 1; i <= G_gpg_vstate.ux_pinentry[0]; i++) { - G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; - } -#else for (i = 1; i < G_gpg_vstate.ux_pinentry[0]; i++) { G_gpg_vstate.menu[i] = '*'; } G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; i++; -#endif for (; i <= GPG_MAX_PW_LENGTH; i++) { G_gpg_vstate.menu[i] = '-'; } @@ -348,77 +308,24 @@ unsigned int ui_pinentry_prepro(const bagl_element_t *element) { return 1; } -unsigned int ui_pinentry_nanos_button(unsigned int button_mask, unsigned int button_mask_counter) { - unsigned int offset = G_gpg_vstate.ux_pinentry[0]; - char digit; - - UNUSED(button_mask_counter); - - switch (button_mask) { - case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down - if (G_gpg_vstate.ux_pinentry[offset]) { - G_gpg_vstate.ux_pinentry[offset]--; - } else { - G_gpg_vstate.ux_pinentry[offset] = sizeof(C_pin_digit) - 1; - } - ui_menu_pinentry_display(1); - break; - - case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // up - G_gpg_vstate.ux_pinentry[offset]++; - if (G_gpg_vstate.ux_pinentry[offset] == sizeof(C_pin_digit)) { - G_gpg_vstate.ux_pinentry[offset] = 0; - } - ui_menu_pinentry_display(1); - break; - - case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: - digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; - // next digit - if ((digit >= '0') && (digit <= '9')) { - offset++; - G_gpg_vstate.ux_pinentry[0] = offset; - if (offset == GPG_MAX_PW_LENGTH + 1) { - validate_pin(); - } else { - G_gpg_vstate.ux_pinentry[offset] = 5; - ui_menu_pinentry_display(1); - } - } - // cancel digit - else if (digit == '<') { - if (offset > 1) { - offset--; - G_gpg_vstate.ux_pinentry[0] = offset; - } - ui_menu_pinentry_display(1); - } - // validate pin - else if (digit == 'V') { - G_gpg_vstate.ux_pinentry[0] = offset - 1; - validate_pin(); - } - // cancel input without check - else { //(digit == 'A') - gpg_io_discard(0); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_menu_main_display(0); - } - break; +void ui_menu_pinentry_display(unsigned int value) { + if (value == 0) { + memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + G_gpg_vstate.ux_pinentry[0] = 1; + G_gpg_vstate.ux_pinentry[1] = 5; } - return 0; + UX_DISPLAY(ui_pinentry_action, (void *) ui_pinentry_predisplay); } -// >= 0 -static unsigned int validate_pin() { - unsigned int offset, len, sw; + +static void validate_pin() { + unsigned int offset, len, sw = SW_UNKNOWN; gpg_pin_t *pin; for (offset = 1; offset <= G_gpg_vstate.ux_pinentry[0]; offset++) { G_gpg_vstate.menu[offset] = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; } - if (G_gpg_vstate.io_ins == 0x20) { + if (G_gpg_vstate.io_ins == INS_VERIFY) { pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); sw = gpg_pin_check(pin, G_gpg_vstate.io_p2, @@ -438,7 +345,7 @@ static unsigned int validate_pin() { } } - if (G_gpg_vstate.io_ins == 0x24) { + if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { if (G_gpg_vstate.io_p1 <= 2) { gpg_io_insert_u8(G_gpg_vstate.ux_pinentry[0]); gpg_io_insert((unsigned char *) (G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); @@ -458,7 +365,7 @@ static unsigned int validate_pin() { " %d tries remaining", pin->counter); ui_info(WRONG_PIN, NULL, ui_menu_main_display, 0); - return 0; + return; } offset = 1 + G_gpg_vstate.work.io_buffer[0]; len = G_gpg_vstate.work.io_buffer[offset]; @@ -471,33 +378,84 @@ static unsigned int validate_pin() { gpg_io_do(IO_RETURN_AFTER_TX); ui_info(PIN_DIFFERS, NULL, ui_menu_main_display, 0); } else { - gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), - G_gpg_vstate.work.io_buffer + offset + 1, - len); + sw = gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), + G_gpg_vstate.work.io_buffer + offset + 1, + len); gpg_io_discard(1); - gpg_io_insert_u16(SW_OK); + gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); - // ui_info(PIN_CHANGED, NULL, ui_menu_main_display, 0); ui_menu_main_display(0); } - return 0; } else { ui_menu_pinentry_display(0); } } +} + +unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter) { + UNUSED(button_mask_counter); + unsigned int offset = G_gpg_vstate.ux_pinentry[0]; + char digit; + + switch (button_mask) { + case BUTTON_EVT_RELEASED | BUTTON_LEFT: // Down + if (G_gpg_vstate.ux_pinentry[offset]) { + G_gpg_vstate.ux_pinentry[offset]--; + } else { + G_gpg_vstate.ux_pinentry[offset] = sizeof(C_pin_digit) - 1; + } + ui_menu_pinentry_display(1); + break; + + case BUTTON_EVT_RELEASED | BUTTON_RIGHT: // up + G_gpg_vstate.ux_pinentry[offset]++; + if (G_gpg_vstate.ux_pinentry[offset] == sizeof(C_pin_digit)) { + G_gpg_vstate.ux_pinentry[offset] = 0; + } + ui_menu_pinentry_display(1); + break; + + case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: + digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; + // next digit + if ((digit >= '0') && (digit <= '9')) { + offset++; + G_gpg_vstate.ux_pinentry[0] = offset; + if (offset == GPG_MAX_PW_LENGTH + 1) { + validate_pin(); + } else { + G_gpg_vstate.ux_pinentry[offset] = 5; + ui_menu_pinentry_display(1); + } + } + // cancel digit + else if (digit == '<') { + if (offset > 1) { + offset--; + G_gpg_vstate.ux_pinentry[0] = offset; + } + ui_menu_pinentry_display(1); + } + // validate pin + else if (digit == 'V') { + G_gpg_vstate.ux_pinentry[0] = offset - 1; + validate_pin(); + } + // cancel input without check + else { //(digit == 'A') + gpg_io_discard(0); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_menu_main_display(0); + } + break; + } return 0; } /* ------------------------------- template UX ------------------------------- */ -#define LABEL_SIG "Signature" -#define LABEL_AUT "Authentication" -#define LABEL_DEC "Decryption" -#define LABEL_RSA2048 "RSA 2048" -#define LABEL_RSA3072 "RSA 3072" -#define LABEL_RSA4096 "RSA 4096" -#define LABEL_SECP256K1 "SECP 256K1" -#define LABEL_Ed25519 "Ed25519" +void ui_menu_template_display(unsigned int value); const char *const tmpl_key_getter_values[] = {LABEL_SIG, LABEL_DEC, LABEL_AUT}; @@ -635,22 +593,19 @@ void ui_menu_template_display(unsigned int value) { } void ui_menu_tmpl_set_action(unsigned int value) { + UNUSED(value); LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); - gpg_key_t *dest; - const char *err; + gpg_key_t *dest = NULL; const unsigned char *oid; unsigned int oid_len; - err = NULL; - UNUSED(value); memset(&attributes, 0, sizeof(attributes)); switch (G_gpg_vstate.ux_type) { case 2048: case 3072: case 4096: - attributes.value[0] = 0x01; - attributes.value[1] = (G_gpg_vstate.ux_type >> 8) & 0xFF; - attributes.value[2] = G_gpg_vstate.ux_type & 0xFF; + attributes.value[0] = KEY_ID_RSA; + U2BE_ENCODE(attributes.value, 1, G_gpg_vstate.ux_type); attributes.value[3] = 0x00; attributes.value[4] = 0x20; attributes.value[5] = 0x01; @@ -659,9 +614,9 @@ void ui_menu_tmpl_set_action(unsigned int value) { case CX_CURVE_SECP256R1: if (G_gpg_vstate.ux_key == 2) { - attributes.value[0] = 18; // ecdh + attributes.value[0] = KEY_ID_ECDH; } else { - attributes.value[0] = 19; // ecdsa + attributes.value[0] = KEY_ID_ECDSA; } oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); memmove(attributes.value + 1, oid, sizeof(oid_len)); @@ -670,22 +625,24 @@ void ui_menu_tmpl_set_action(unsigned int value) { case CX_CURVE_Ed25519: if (G_gpg_vstate.ux_key == 2) { - attributes.value[0] = 18; // ecdh + attributes.value[0] = KEY_ID_ECDH; memmove(attributes.value + 1, C_OID_cv25519, sizeof(C_OID_cv25519)); attributes.length = 1 + sizeof(C_OID_cv25519); } else { - attributes.value[0] = 22; // eddsa + attributes.value[0] = KEY_ID_EDDSA; memmove(attributes.value + 1, C_OID_Ed25519, sizeof(C_OID_Ed25519)); attributes.length = 1 + sizeof(C_OID_Ed25519); } break; default: - err = TEMPLATE_TYPE; - goto ERROR; + break; + } + if (attributes.value[0] == 0) { + ui_info(INVALID_SELECTION, TEMPLATE_TYPE); + return; } - dest = NULL; switch (G_gpg_vstate.ux_key) { case 1: dest = &G_gpg_vstate.kslot->sig; @@ -697,44 +654,29 @@ void ui_menu_tmpl_set_action(unsigned int value) { dest = &G_gpg_vstate.kslot->aut; break; default: - err = TEMPLATE_KEY; - goto ERROR; + break; } - nvm_write(dest, NULL, sizeof(gpg_key_t)); - nvm_write(&dest->attributes, &attributes, sizeof(attributes)); - ui_info(OK, NULL, ui_menu_template_display, 0); - return; - -ERROR: - ui_info(INVALID_SELECTION, err, ui_menu_template_display, 0); + if (dest != NULL) { + nvm_write(dest, NULL, sizeof(gpg_key_t)); + nvm_write(&dest->attributes, &attributes, sizeof(attributes)); + ui_menu_template_display(1); + } else { + ui_info(INVALID_SELECTION, TEMPLATE_KEY); + } } -#undef KEY_KEY -#undef KEY_TYPE - -#undef LABEL_SIG -#undef LABEL_AUT -#undef LABEL_DEC - -#undef LABEL_RSA2048 -#undef LABEL_RSA3072 -#undef LABEL_RSA4096 -#undef LABEL_NISTP256 -#undef LABEL_SECP256K1 -#undef LABEL_Ed25519 - /* --------------------------------- SEED UX --------------------------------- */ + #define CUR_SEED_MODE G_gpg_vstate.ux_buff1 -void ui_menu_seed_action(unsigned int); -void ui_menu_seedmode_display(unsigned int); +void ui_menu_seedmode_action(unsigned int); void ui_menu_seedmode_predisplay(void); UX_STEP_CB_INIT(ux_menu_seedmode_1_step, bn, ui_menu_seedmode_predisplay(), - ui_menu_seed_action(0), + ui_menu_seedmode_action(0), {"Toggle seed mode", CUR_SEED_MODE}); UX_STEP_CB(ux_menu_seedmode_2_step, @@ -755,7 +697,7 @@ void ui_menu_seedmode_display(unsigned int value) { ui_flow_display(ux_flow_seedmode, value); } -void ui_menu_seed_action(unsigned int value) { +void ui_menu_seedmode_action(unsigned int value) { UNUSED(value); if (G_gpg_vstate.seed_mode) { G_gpg_vstate.seed_mode = 0; @@ -765,11 +707,9 @@ void ui_menu_seed_action(unsigned int value) { ui_menu_seedmode_display(0); } -#undef CUR_SEED_MODE - /* ------------------------------- PIN MODE UX ------------------------------ */ + void ui_menu_pinmode_action(unsigned int value); -void ui_menu_pinmode_display(unsigned int value); void ui_menu_pinmode_predisplay(void); #define ONHST_BUFF G_gpg_vstate.ux_buff1 @@ -853,13 +793,9 @@ void ui_menu_pinmode_display(unsigned int value) { ui_flow_display(ux_flow_pinmode, value); } -#undef ONHST_BUFF -#undef ONSCR_BUFF -#undef CONFI_BUFF -#undef TRUST_BUFF - void ui_menu_pinmode_action(unsigned int value) { unsigned char s; + value = value & 0x7FFF; if (value == 128) { if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { @@ -884,7 +820,7 @@ void ui_menu_pinmode_action(unsigned int value) { case PIN_MODE_SCREEN: case PIN_MODE_CONFIRM: if (!gpg_pin_is_verified(PIN_ID_PW2)) { - ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display, 0); + ui_info(PIN_USER_82, NOT_VERIFIED); return; } break; @@ -972,10 +908,6 @@ void ui_menu_uifmode_display(unsigned int value) { ui_flow_display(ux_flow_uif, value); } -#undef SIG_BUFF -#undef DEC_BUFF -#undef AUT_BUFF - void ui_menu_uifmode_action(unsigned int value) { unsigned char *uif; unsigned char new_uif; @@ -1036,7 +968,7 @@ void ui_menu_reset_action(unsigned int value) { ui_menu_main_display(0); } -/* ------------------------------ RESET SLOT UX ------------------------------ */ +/* ------------------------------ RESET KEY SLOT ----------------------------- */ void ui_menu_reset_slot_action(unsigned int value); @@ -1093,6 +1025,7 @@ void settings_selector(unsigned int idx) { break; } } + void ui_menu_settings_display(unsigned int value) { ux_menulist_init_select(G_ux.stack_count - 1, settings_getter, settings_selector, value); } @@ -1100,9 +1033,6 @@ void ui_menu_settings_display(unsigned int value) { /* --------------------------------- SLOT UX --------------------------------- */ #if GPG_MULTISLOT -#if GPG_KEYS_SLOTS != 3 -#error menu definition not correct for current value of GPG_KEYS_SLOTS -#endif void ui_menu_slot_action(unsigned int value); void ui_menu_slot_predisplay(void); @@ -1171,16 +1101,12 @@ void ui_menu_slot_display(unsigned int value) { ui_flow_display(ux_flow_slot, value); } -#undef SLOT1 -#undef SLOT2 -#undef SLOT3 - void ui_menu_slot_action(unsigned int value) { unsigned char s; if (value == 128) { s = G_gpg_vstate.slot; - nvm_write((void *) &N_gpg_pstate->config_slot[1], &s, 1); + nvm_write((void *) (&N_gpg_pstate->config_slot[1]), &s, 1); } else { s = (unsigned char) (value - 1); if (s != G_gpg_vstate.slot) { @@ -1196,16 +1122,17 @@ void ui_menu_slot_action(unsigned int value) { /* --------------------------------- INFO UX --------------------------------- */ -#define STR(x) #x -#define XSTR(x) STR(x) - UX_STEP_NOCB(ux_menu_info_1_step, bnnn, { "OpenPGP Card", "(c) Ledger SAS", "Spec " XSTR(SPEC_VERSION), +#ifdef HAVE_PRINTF + "[DBG] App " XSTR(APPVERSION), +#else "App " XSTR(APPVERSION), +#endif }); UX_STEP_CB(ux_menu_info_2_step, @@ -1223,10 +1150,8 @@ void ui_menu_info_display(unsigned int value) { ux_flow_init(0, ux_flow_info, NULL); } -#undef STR -#undef XSTR - /* --------------------------------- MAIN UX --------------------------------- */ + void ui_menu_main_predisplay(void); UX_STEP_NOCB_INIT(ux_menu_main_1_step, @@ -1264,15 +1189,13 @@ void ui_menu_main_predisplay() { memmove(G_gpg_vstate.ux_buff1, "", 9); } else { for (int i = 0; i < 12; i++) { - if (G_gpg_vstate.ux_buff1[i] == 0x3c) { + if (G_gpg_vstate.ux_buff1[i] == '<') { G_gpg_vstate.ux_buff1[i] = ' '; } } } - unsigned int serial; - serial = (G_gpg_vstate.kslot->serial[0] << 24) | (G_gpg_vstate.kslot->serial[1] << 16) | - (G_gpg_vstate.kslot->serial[2] << 8) | (G_gpg_vstate.kslot->serial[3]); + unsigned int serial = U4BE(G_gpg_vstate.kslot->serial, 0); memset(G_gpg_vstate.ux_buff2, 0, sizeof(G_gpg_vstate.ux_buff2)); #if GPG_MULTISLOT snprintf(G_gpg_vstate.ux_buff2, @@ -1293,6 +1216,7 @@ void ui_menu_main_display(unsigned int value) { ui_flow_display(ux_flow_main, value); } + /* --- INIT --- */ void ui_init(void) { @@ -1303,6 +1227,4 @@ void io_seproxyhal_display(const bagl_element_t *element) { io_seproxyhal_display_default((bagl_element_t *) element); } -///----- - -#endif // UI_NANOX +#endif // defined(HAVE_BAGL) && (defined(TARGET_NANOX) || defined(TARGET_NANOS2)) diff --git a/src/gpg_vars.c b/src/gpg_vars.c index 1f976c4..2cb0a4a 100644 --- a/src/gpg_vars.c +++ b/src/gpg_vars.c @@ -1,21 +1,22 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #include "gpg_vars.h" gpg_v_state_t G_gpg_vstate; const gpg_nv_state_t N_state_pic; - diff --git a/src/gpg_vars.h b/src/gpg_vars.h index 0257ff1..4313607 100644 --- a/src/gpg_vars.h +++ b/src/gpg_vars.h @@ -1,17 +1,19 @@ -/* Copyright 2017 Cedric Mesnil , Ledger SAS +/***************************************************************************** + * Ledger App OpenPGP. + * (c) 2024 Ledger SAS. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ #ifndef GPG_VARS_H #define GPG_VARS_H @@ -30,6 +32,7 @@ extern const unsigned char C_OID_BRAINPOOL256R1[9]; extern const unsigned char C_OID_BRAINPOOL256T1[9]; extern const unsigned char C_OID_Ed25519[9]; extern const unsigned char C_OID_cv25519[10]; +extern const unsigned char C_gen_feature; extern gpg_v_state_t G_gpg_vstate; From f336a1988f3363d35017e26e10a358edfa15ef16 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 18 Jan 2024 15:58:44 +0100 Subject: [PATCH 15/75] Code bugfix - Fix APDU Set Slot to refresh the current key slot - Fix Manage Security Environment bad parameter - Fix set offset in APDU buffer (io buffers) - Fix ui_info empty string - Fix Nanos Main menu bad display --- src/gpg_data.c | 6 +++++- src/gpg_dispatch.c | 2 +- src/gpg_io.c | 6 +++--- src/gpg_mse.c | 2 +- src/gpg_ux_msg.c | 2 ++ src/gpg_ux_msg.h | 3 +++ src/gpg_ux_nanos.c | 18 ++++++++++-------- src/gpg_ux_nanox.c | 20 +++++++++----------- 8 files changed, 34 insertions(+), 25 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index 9df7f5f..d32d49b 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -16,6 +16,7 @@ *****************************************************************************/ #include "gpg_vars.h" +#include "gpg_ux.h" #include "cx_errors.h" void gpg_apdu_select_data(unsigned int ref, int record) { @@ -281,7 +282,7 @@ int gpg_apdu_put_data(unsigned int ref) { break; case 0x01F2: - if ((N_gpg_pstate->config_slot[2] & 2) == 0) { + if ((N_gpg_pstate->config_slot[2] & 1) == 0) { sw = SW_CONDITIONS_NOT_SATISFIED; break; } @@ -291,6 +292,9 @@ int gpg_apdu_put_data(unsigned int ref) { break; } G_gpg_vstate.slot = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; + G_gpg_vstate.kslot = (gpg_key_slot_t *) &N_gpg_pstate->keys[G_gpg_vstate.slot]; + gpg_mse_reset(); + ui_CCID_reset(); sw = SW_OK; break; diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index 8d17e2f..74fe471 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -408,7 +408,7 @@ int gpg_dispatch() { /* --- MSE --- */ case INS_MSE: - sw = gpg_apdu_mse(tag); + sw = gpg_apdu_mse(); break; /* --- PSO --- */ diff --git a/src/gpg_io.c b/src/gpg_io.c index 50e1940..0d08fee 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -21,8 +21,8 @@ #include "os_utils.h" /* - * io_buff: contains current message part - * io_off: offset in current message part + * io_buffer: contains current message part + * io_offset: offset in current message part * io_length: length of current message part */ @@ -40,7 +40,7 @@ void gpg_io_set_offset(unsigned int offset) { break; default: LEDGER_ASSERT(offset < G_gpg_vstate.io_length, "Bad offset!"); - G_gpg_vstate.io_offset = G_gpg_vstate.io_length; + G_gpg_vstate.io_offset = offset; break; } } diff --git a/src/gpg_mse.c b/src/gpg_mse.c index b2d4949..ebd4d72 100644 --- a/src/gpg_mse.c +++ b/src/gpg_mse.c @@ -60,7 +60,7 @@ int gpg_apdu_mse() { return SW_WRONG_DATA; } - gpg_mse_set(crt, ref); + gpg_mse_set(G_gpg_vstate.io_p2, ref); gpg_io_discard(1); return SW_OK; } diff --git a/src/gpg_ux_msg.c b/src/gpg_ux_msg.c index 616775b..182d818 100644 --- a/src/gpg_ux_msg.c +++ b/src/gpg_ux_msg.c @@ -39,3 +39,5 @@ const char *const C_NOT_ALLOWED = "Not Allowed "; const char *const C_DEFAULT_MODE = "Default mode"; const char *const C_UIF_LOCKED = "UIF locked"; + +const char *const C_EMPTY = ""; diff --git a/src/gpg_ux_msg.h b/src/gpg_ux_msg.h index c5ebdf6..de81d81 100644 --- a/src/gpg_ux_msg.h +++ b/src/gpg_ux_msg.h @@ -43,6 +43,8 @@ extern const char *const C_DEFAULT_MODE; extern const char *const C_UIF_LOCKED; extern const char *const C_UIF_INVALID; +extern const char *const C_EMPTY; + #define PICSTR(x) ((char *) PIC(x)) #define TEMPLATE_TYPE PICSTR(C_TEMPLATE_TYPE) @@ -65,5 +67,6 @@ extern const char *const C_UIF_INVALID; #define DEFAULT_MODE PICSTR(C_DEFAULT_MODE) #define UIF_LOCKED PICSTR(C_UIF_LOCKED) #define UIF_INVALID PICSTR(C_UIF_INVALID) +#define EMPTY PICSTR(C_EMPTY) #endif diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 3e9e8cc..0117afc 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -429,7 +429,7 @@ static void validate_pin() { sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, NULL, ui_menu_main_display, 0); + ui_info(WRONG_PIN, EMPTY, ui_menu_main_display, 0); return; } offset = 1 + G_gpg_vstate.work.io_buffer[0]; @@ -441,7 +441,7 @@ static void validate_pin() { gpg_io_discard(1); gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); gpg_io_do(IO_RETURN_AFTER_TX); - ui_info(PIN_DIFFERS, NULL, ui_menu_main_display, 0); + ui_info(PIN_DIFFERS, EMPTY, ui_menu_main_display, 0); } else { sw = gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), G_gpg_vstate.work.io_buffer + offset + 1, @@ -666,7 +666,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { if (dest != NULL) { nvm_write(dest, NULL, sizeof(gpg_key_t)); nvm_write(&dest->attributes, &attributes, sizeof(attributes)); - ui_info(OK, NULL, ui_menu_template_display, 0); + ui_info(OK, EMPTY, ui_menu_template_display, 0); } else { ui_info(INVALID_SELECTION, TEMPLATE_KEY, ui_menu_template_display, 0); } @@ -791,7 +791,7 @@ void ui_menu_pinmode_action(unsigned int value) { } break; default: - ui_info(INVALID_SELECTION, NULL, ui_menu_pinmode_display, 0); + ui_info(INVALID_SELECTION, EMPTY, ui_menu_pinmode_display, 0); return; } G_gpg_vstate.pinmode = value; @@ -862,7 +862,7 @@ void ui_menu_uifmode_action(unsigned int value) { uif = &G_gpg_vstate.kslot->aut.UIF[0]; break; default: - ui_info(INVALID_SELECTION, NULL, ui_menu_uifmode_display, 0); + ui_info(INVALID_SELECTION, EMPTY, ui_menu_uifmode_display, 0); return; } if (uif[0] == 0) { @@ -872,7 +872,7 @@ void ui_menu_uifmode_action(unsigned int value) { new_uif = 0; nvm_write(&uif[0], &new_uif, 1); } else /*if (uif[0] == 2 )*/ { - ui_info(UIF_LOCKED, NULL, ui_menu_uifmode_display, 0); + ui_info(UIF_LOCKED, EMPTY, ui_menu_uifmode_display, 0); return; } ui_menu_uifmode_display(value); @@ -1016,8 +1016,8 @@ const ux_menu_entry_t ui_menu_main[] = { const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, bagl_element_t *element) { if (entry == &ui_menu_main[0]) { + memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); if (element->component.userid == 0x21) { - memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); memmove(G_gpg_vstate.menu, (void *) (N_gpg_pstate->name.value), 12); if (G_gpg_vstate.menu[0] == 0) { memmove(G_gpg_vstate.menu, "", 9); @@ -1042,7 +1042,9 @@ const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "ID: %x", serial); #endif } - element->text = G_gpg_vstate.menu; + if (G_gpg_vstate.menu[0] != 0) { + element->text = G_gpg_vstate.menu; + } } return element; } diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 58246ef..72f7f49 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -55,9 +55,7 @@ UX_STEP_CB(ux_menu_popup_1_step, UX_FLOW(ux_flow_popup, &ux_menu_popup_1_step); -void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { - UNUSED(menu_display); - UNUSED(value); +void ui_info(const char *msg1, const char *msg2) { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s. %s", msg1, msg2); ux_flow_init(0, ux_flow_popup, NULL); }; @@ -339,7 +337,7 @@ static void validate_pin() { sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display, 0); + ui_info(WRONG_PIN, G_gpg_vstate.menu); } else { ui_menu_main_display(0); } @@ -364,7 +362,7 @@ static void validate_pin() { sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, NULL, ui_menu_main_display, 0); + ui_info(WRONG_PIN, EMPTY); return; } offset = 1 + G_gpg_vstate.work.io_buffer[0]; @@ -376,7 +374,7 @@ static void validate_pin() { gpg_io_discard(1); gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); gpg_io_do(IO_RETURN_AFTER_TX); - ui_info(PIN_DIFFERS, NULL, ui_menu_main_display, 0); + ui_info(PIN_DIFFERS, EMPTY); } else { sw = gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), G_gpg_vstate.work.io_buffer + offset + 1, @@ -799,7 +797,7 @@ void ui_menu_pinmode_action(unsigned int value) { if (value == 128) { if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { - ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display, 0); + ui_info(DEFAULT_MODE, NOT_ALLOWED); return; } // set new mode @@ -827,12 +825,12 @@ void ui_menu_pinmode_action(unsigned int value) { case PIN_MODE_TRUST: if (!gpg_pin_is_verified(PIN_ID_PW3)) { - ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display, 0); + ui_info(PIN_ADMIN, NOT_VERIFIED); return; } break; default: - ui_info(INVALID_SELECTION, NULL, ui_menu_pinmode_display, 0); + ui_info(INVALID_SELECTION, EMPTY); return; } G_gpg_vstate.pinmode = value; @@ -922,7 +920,7 @@ void ui_menu_uifmode_action(unsigned int value) { uif = &G_gpg_vstate.kslot->aut.UIF[0]; break; default: - ui_info(INVALID_SELECTION, NULL, ui_menu_uifmode_display, 0); + ui_info(INVALID_SELECTION, EMPTY); return; } if (uif[0] == 0) { @@ -932,7 +930,7 @@ void ui_menu_uifmode_action(unsigned int value) { new_uif = 0; nvm_write(&uif[0], &new_uif, 1); } else /*if (uif[0] == 2 )*/ { - ui_info(UIF_LOCKED, NULL, ui_menu_uifmode_display, 0); + ui_info(UIF_LOCKED, EMPTY); return; } ui_menu_uifmode_display(value); From 9f3130e88b607a91ef0d66660d2f44c1b6d16c1e Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 6 Feb 2024 16:30:09 +0100 Subject: [PATCH 16/75] PRODUCT: Change Key slots management - Only a single slot for "Nanos" - 3 slots for other platforms - No more Variants to manage, only OpenPGP is a valid App Name --- Makefile | 18 --------- src/gpg_types.h | 7 ++-- src/gpg_ux.h | 6 --- src/gpg_ux_nanos.c | 92 ---------------------------------------------- src/gpg_ux_nanox.c | 38 ------------------- 5 files changed, 4 insertions(+), 157 deletions(-) diff --git a/Makefile b/Makefile index e929b9e..88e519b 100644 --- a/Makefile +++ b/Makefile @@ -25,20 +25,7 @@ include $(BOLOS_SDK)/Makefile.defines # Mandatory configuration # ######################################## # Application name -ifeq ($(APPNAME),) APPNAME = OpenPGP -endif -ifeq ($(APPNAME),OpenPGP) -ifeq ($(TARGET_NAME),TARGET_NANOS) -GPG_MULTISLOT:=0 -else -GPG_MULTISLOT:=1 -endif -else ifeq ($(APPNAME),OpenPGP.XL) -GPG_MULTISLOT:=1 -else -$(error APPNAME ($(APPNAME)) is not set or unknown) -endif # Application version APPVERSION_M = 2 @@ -85,11 +72,7 @@ PATH_APP_LOAD_PARAMS = "2152157255'" # * It must at least contains one value. # * Values can be the app ticker or anything else but should be unique. VARIANT_PARAM = APPNAME -ifeq ($(TARGET_NAME),TARGET_NANOS) -VARIANT_VALUES = OpenPGP OpenPGP.XL -else VARIANT_VALUES = OpenPGP -endif # Enabling DEBUG flag will enable PRINTF and disable optimizations #DEBUG = 1 @@ -135,7 +118,6 @@ DISABLE_STANDARD_WEBUSB = 1 # Main app configuration # ######################################## -DEFINES += GPG_MULTISLOT=$(GPG_MULTISLOT) DEFINES += CUSTOM_IO_APDU_BUFFER_SIZE=\(255+5+64\) DEFINES += HAVE_USB_CLASS_CCID DEFINES += HAVE_RSA diff --git a/src/gpg_types.h b/src/gpg_types.h index 016587e..d0f9239 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -20,6 +20,7 @@ #include "lcx_sha3.h" #include "usbd_ccid_if.h" +#include "bolos_target.h" /* cannot send more that F0 bytes in CCID, why? do not know for now * So set up length to F0 minus 2 bytes for SW @@ -37,10 +38,10 @@ #define GPG_MIN_PW1_LENGTH 6 #define GPG_MIN_PW3_LENGTH 8 -#if GPG_MULTISLOT -#define GPG_KEYS_SLOTS 3 -#else +#ifdef TARGET_NANOS #define GPG_KEYS_SLOTS 1 +#else +#define GPG_KEYS_SLOTS 3 #endif #define GPG_KEY_ATTRIBUTES_LENGTH 12 diff --git a/src/gpg_ux.h b/src/gpg_ux.h index 509ed8a..207643d 100644 --- a/src/gpg_ux.h +++ b/src/gpg_ux.h @@ -19,12 +19,6 @@ #ifndef GPG_UX_H #define GPG_UX_H -#if GPG_MULTISLOT -#if GPG_KEYS_SLOTS != 3 -#error menu definition not correct for current value of GPG_KEYS_SLOTS -#endif -#endif - #define STR(x) #x #define XSTR(x) STR(x) diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 0117afc..ff446eb 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -33,10 +33,6 @@ void ui_menu_tmpl_type_action(unsigned int value); void ui_menu_seedmode_action(unsigned int value); void ui_menu_reset_action(unsigned int value); -#if GPG_MULTISLOT -void ui_menu_slot_action(unsigned int value); -#endif - const ux_menu_entry_t ui_menu_settings[]; void ui_menu_main_display(unsigned int value); unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter); @@ -899,22 +895,6 @@ void ui_menu_reset_action(unsigned int value) { ui_menu_main_display(0); } -/* ------------------------------ RESET KEY SLOT ----------------------------- */ - -void ui_menu_reset_slot_action(unsigned int value); - -const ux_menu_entry_t ui_menu_reset_slot[] = { - {NULL, NULL, 0, NULL, "Really Reset ?", NULL, 0, 0}, - {NULL, ui_menu_main_display, 0, &C_icon_back, "No", NULL, 61, 40}, - {NULL, ui_menu_reset_slot_action, 0, NULL, "Yes", NULL, 0, 0}, - UX_MENU_END}; - -void ui_menu_reset_slot_action(unsigned int value) { - UNUSED(value); - gpg_install_slot(G_gpg_vstate.kslot); - ui_menu_main_display(0); -} - /* ------------------------------- SETTINGS UX ------------------------------- */ const ux_menu_entry_t ui_menu_settings[] = { @@ -923,70 +903,9 @@ const ux_menu_entry_t ui_menu_settings[] = { {NULL, ui_menu_pinmode_display, 0, NULL, "PIN mode", NULL, 0, 0}, {NULL, ui_menu_uifmode_display, 0, NULL, "UIF mode", NULL, 0, 0}, {ui_menu_reset, NULL, 0, NULL, "Reset App", NULL, 0, 0}, - {ui_menu_reset_slot, NULL, 0, NULL, "Reset Slot", NULL, 0, 0}, {NULL, ui_menu_main_display, 2, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; -/* --------------------------------- SLOT UX --------------------------------- */ - -#if GPG_MULTISLOT - -const ux_menu_entry_t ui_menu_slot[] = { - {NULL, NULL, -1, NULL, "Choose:", NULL, 0, 0}, - {NULL, ui_menu_slot_action, 1, NULL, "", NULL, 0, 0}, - {NULL, ui_menu_slot_action, 2, NULL, "", NULL, 0, 0}, - {NULL, ui_menu_slot_action, 3, NULL, "", NULL, 0, 0}, - {NULL, ui_menu_slot_action, 128, NULL, "Set Default", NULL, 0, 0}, - {NULL, ui_menu_main_display, 1, &C_icon_back, "Back", NULL, 61, 40}, - UX_MENU_END}; - -const bagl_element_t *ui_menu_slot_predisplay(const ux_menu_entry_t *entry, - bagl_element_t *element) { - unsigned int slot; - if (element->component.userid == 0x20) { - for (slot = 1; slot <= 3; slot++) { - if (entry == &ui_menu_slot[slot]) { - break; - } - } - if (slot != 4) { - snprintf(G_gpg_vstate.menu, - sizeof(G_gpg_vstate.menu), - "Slot %d %s %s", - slot, - slot == N_gpg_pstate->config_slot[1] + 1 ? "#" : " ", /* default */ - slot == G_gpg_vstate.slot + 1 ? "+" : " " /* selected*/); - element->text = G_gpg_vstate.menu; - } - } - return element; -} - -void ui_menu_slot_display(unsigned int value) { - UX_MENU_DISPLAY(value, ui_menu_slot, ui_menu_slot_predisplay); -} - -void ui_menu_slot_action(unsigned int value) { - unsigned char s; - - if (value == 128) { - s = G_gpg_vstate.slot; - nvm_write((void *) (&N_gpg_pstate->config_slot[1]), &s, 1); - value = s + 1; - } else { - s = (unsigned char) (value - 1); - if (s != G_gpg_vstate.slot) { - G_gpg_vstate.slot = s; - G_gpg_vstate.kslot = (gpg_key_slot_t *) &N_gpg_pstate->keys[G_gpg_vstate.slot]; - gpg_mse_reset(); - ui_CCID_reset(); - } - } - // redisplay first entry of the idle menu - ui_menu_slot_display(value); -} -#endif - /* --------------------------------- INFO UX --------------------------------- */ const ux_menu_entry_t ui_menu_info[] = { @@ -1005,9 +924,6 @@ const ux_menu_entry_t ui_menu_info[] = { const ux_menu_entry_t ui_menu_main[] = { {NULL, NULL, 0, NULL, "", "", 0, 0}, -#if GPG_MULTISLOT - {NULL, ui_menu_slot_display, 0, NULL, "Select slot", NULL, 0, 0}, -#endif {ui_menu_settings, NULL, 0, NULL, "Settings", NULL, 0, 0}, {ui_menu_info, NULL, 0, NULL, "About", NULL, 0, 0}, {NULL, (void *) os_sched_exit, 0, &C_icon_dashboard, "Quit app", NULL, 50, 29}, @@ -1032,15 +948,7 @@ const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, if (element->component.userid == 0x22) { unsigned int serial = U4BE(G_gpg_vstate.kslot->serial, 0); memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); -#if GPG_MULTISLOT - snprintf(G_gpg_vstate.menu, - sizeof(G_gpg_vstate.menu), - "ID: %x / %d", - serial, - G_gpg_vstate.slot + 1); -#else snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "ID: %x", serial); -#endif } if (G_gpg_vstate.menu[0] != 0) { element->text = G_gpg_vstate.menu; diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 72f7f49..b0f575e 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -32,10 +32,6 @@ void ui_menu_tmpl_type_action(unsigned int value); void ui_menu_seedmode_action(unsigned int value); void ui_menu_reset_action(unsigned int value); -#if GPG_MULTISLOT -void ui_menu_slot_action(unsigned int value); -#endif - void ui_menu_settings_display(unsigned int value); void ui_menu_main_display(unsigned int value); unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter); @@ -966,29 +962,6 @@ void ui_menu_reset_action(unsigned int value) { ui_menu_main_display(0); } -/* ------------------------------ RESET KEY SLOT ----------------------------- */ - -void ui_menu_reset_slot_action(unsigned int value); - -UX_STEP_CB(ux_menu_reset_slot_1_step, - bnn, - ui_menu_settings_display(4), - {"Ooops, NO!", "Do not reset", "the key slot"}); - -UX_STEP_CB(ux_menu_reset_slot_2_step, bn, ui_menu_reset_slot_action(0), {"YES!", "Reset the slot"}); - -UX_FLOW(ux_flow_reset_slot, &ux_menu_reset_slot_1_step, &ux_menu_reset_slot_2_step); - -void ui_menu_reset_slot_display(unsigned int value) { - ux_flow_init(value, ux_flow_reset_slot, NULL); -} - -void ui_menu_reset_slot_action(unsigned int value) { - UNUSED(value); - gpg_install_slot(G_gpg_vstate.kslot); - ui_menu_main_display(0); -} - /* ------------------------------- SETTINGS UX ------------------------------- */ const char *const settings_getter_values[] = @@ -1030,8 +1003,6 @@ void ui_menu_settings_display(unsigned int value) { /* --------------------------------- SLOT UX --------------------------------- */ -#if GPG_MULTISLOT - void ui_menu_slot_action(unsigned int value); void ui_menu_slot_predisplay(void); @@ -1116,7 +1087,6 @@ void ui_menu_slot_action(unsigned int value) { } ui_menu_slot_display(G_gpg_vstate.slot); } -#endif /* --------------------------------- INFO UX --------------------------------- */ @@ -1161,9 +1131,7 @@ UX_STEP_NOCB_INIT(ux_menu_main_1_step, G_gpg_vstate.ux_buff2, }); -#if GPG_MULTISLOT UX_STEP_CB(ux_menu_main_2_step, pb, ui_menu_slot_display(0), {&C_icon_coggle, "Select Slot"}); -#endif UX_STEP_CB(ux_menu_main_3_step, pb, ui_menu_settings_display(0), {&C_icon_coggle, "Settings"}); @@ -1173,9 +1141,7 @@ UX_STEP_CB(ux_menu_main_5_step, pb, os_sched_exit(0), {&C_icon_dashboard_x, "Qui UX_FLOW(ux_flow_main, &ux_menu_main_1_step, -#if GPG_MULTISLOT &ux_menu_main_2_step, -#endif &ux_menu_main_3_step, &ux_menu_main_4_step, &ux_menu_main_5_step); @@ -1195,15 +1161,11 @@ void ui_menu_main_predisplay() { unsigned int serial = U4BE(G_gpg_vstate.kslot->serial, 0); memset(G_gpg_vstate.ux_buff2, 0, sizeof(G_gpg_vstate.ux_buff2)); -#if GPG_MULTISLOT snprintf(G_gpg_vstate.ux_buff2, sizeof(G_gpg_vstate.ux_buff2), "ID: %x / %d", serial, G_gpg_vstate.slot + 1); -#else - snprintf(G_gpg_vstate.ux_buff2, sizeof(G_gpg_vstate.ux_buff2), "ID: %x", serial); -#endif } void ui_menu_main_display(unsigned int value) { From 56c0ece628d8ed49933afd3b14337cc941c8cd1d Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 6 Feb 2024 16:46:25 +0100 Subject: [PATCH 17/75] PRODUCT: Remove deprecated RSA1024 --- src/gpg_data.c | 4 ---- src/gpg_gen.c | 9 --------- src/gpg_pso.c | 6 ------ src/gpg_types.h | 6 ------ 4 files changed, 25 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index d32d49b..fe6fc37 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -407,10 +407,6 @@ int gpg_apdu_put_data(unsigned int ref) { rsa_pub = (cx_rsa_public_key_t *) &G_gpg_vstate.work.rsa.public; rsa_priv = (cx_rsa_private_key_t *) &G_gpg_vstate.work.rsa.private; switch (ksz) { - case 1024 / 8: - pkey_size = sizeof(cx_rsa_1024_private_key_t); - pq = G_gpg_vstate.work.rsa.public1024.n; - break; case 2048 / 8: pkey_size = sizeof(cx_rsa_2048_private_key_t); pq = G_gpg_vstate.work.rsa.public2048.n; diff --git a/src/gpg_gen.c b/src/gpg_gen.c index ec96dc5..17f4864 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -87,9 +87,6 @@ static int gpg_gen_rsa_kyey(gpg_key_t *keygpg, uint8_t *name) { rsa_pub = (cx_rsa_public_key_t *) &G_gpg_vstate.work.rsa.public; rsa_priv = (cx_rsa_private_key_t *) &G_gpg_vstate.work.rsa.private; switch (ksz) { - case 1024 / 8: - pkey_size = sizeof(cx_rsa_1024_private_key_t); - break; case 2048 / 8: pkey_size = sizeof(cx_rsa_2048_private_key_t); break; @@ -155,12 +152,6 @@ static int gpg_read_rsa_kyey(gpg_key_t *keygpg) { ksz = U2BE(keygpg->attributes.value, 1) >> 3; gpg_io_mark(); switch (ksz) { - case 1024 / 8: - if (keygpg->priv_key.rsa1024.size == 0) { - return SW_REFERENCED_DATA_NOT_FOUND; - } - gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa1024.n); - break; case 2048 / 8: if (keygpg->priv_key.rsa2048.size == 0) { return SW_REFERENCED_DATA_NOT_FOUND; diff --git a/src/gpg_pso.c b/src/gpg_pso.c index e01968b..7d92b8f 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -72,9 +72,6 @@ static int gpg_sign(gpg_key_t *sigkey) { unsigned int ksz, l; ksz = U2BE(sigkey->attributes.value, 1) >> 3; switch (ksz) { - case 1024 / 8: - key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa1024; - break; case 2048 / 8: key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa2048; break; @@ -262,9 +259,6 @@ int gpg_apdu_pso() { ksz = U2BE(G_gpg_vstate.mse_dec->attributes.value, 1) >> 3; key = NULL; switch (ksz) { - case 1024 / 8: - key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa1024; - break; case 2048 / 8: key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa2048; break; diff --git a/src/gpg_types.h b/src/gpg_types.h index d0f9239..bfb166c 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -75,12 +75,8 @@ typedef struct gpg_key_s { /* C1 C2 C3 */ LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); /* key value */ - /* WARN: changing the cx__t structures breaks backup/restore. Adapt backup/restore code - * to ensure backward compatibility. - */ union { cx_rsa_private_key_t rsa; - cx_rsa_1024_private_key_t rsa1024; cx_rsa_2048_private_key_t rsa2048; cx_rsa_3072_private_key_t rsa3072; cx_rsa_4096_private_key_t rsa4096; @@ -212,14 +208,12 @@ struct gpg_v_state_s { struct { union { cx_rsa_public_key_t public; - cx_rsa_1024_public_key_t public1024; cx_rsa_2048_public_key_t public2048; cx_rsa_3072_public_key_t public3072; cx_rsa_4096_public_key_t public4096; }; union { cx_rsa_private_key_t private; - cx_rsa_1024_private_key_t private1024; cx_rsa_2048_private_key_t private2048; cx_rsa_3072_private_key_t private3072; cx_rsa_4096_private_key_t private4096; From 1eda5785e7989c014ea07f7a46a07e877d25b5c7 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 6 Feb 2024 18:37:54 +0100 Subject: [PATCH 18/75] PRODUCT: Update PIN modes management - Remove support of "On Host" - Add warnning message if user select "Trust" --- src/gpg_pin.c | 10 ++-- src/gpg_types.h | 10 ++-- src/gpg_ux_nanos.c | 101 +++++++++++++++++++------------ src/gpg_ux_nanox.c | 146 ++++++++++++++++++++++++--------------------- 4 files changed, 148 insertions(+), 119 deletions(-) diff --git a/src/gpg_pin.c b/src/gpg_pin.c index aa92292..60aa810 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -214,12 +214,10 @@ int gpg_apdu_change_ref_data() { } // avoid any-overflow without giving info if (G_gpg_vstate.io_length == 0) { - if (G_gpg_vstate.pinmode != PIN_MODE_HOST) { - // Delegate pin change to ui - gpg_io_discard(1); - ui_menu_pinentry_display(0); - return 0; - } + // Delegate pin change to ui + gpg_io_discard(1); + ui_menu_pinentry_display(0); + return 0; } len = MIN(G_gpg_vstate.io_length, pin->length); diff --git a/src/gpg_types.h b/src/gpg_types.h index bfb166c..8c8a5a3 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -271,8 +271,6 @@ struct gpg_v_state_s { char ux_buff1[32]; char ux_buff2[32]; char ux_buff3[32]; - char ux_buff4[32]; - char ux_buff5[32]; #endif #ifdef GPG_LOG @@ -294,10 +292,10 @@ typedef struct gpg_v_state_s gpg_v_state_t; #define PIN_ID_PW3 0x83 #define PIN_ID_RC 0x84 -#define PIN_MODE_HOST 1 -#define PIN_MODE_SCREEN 2 -#define PIN_MODE_CONFIRM 3 -#define PIN_MODE_TRUST 4 +// PIN_MODE_HOST not supported by Ledger App +#define PIN_MODE_SCREEN 0 +#define PIN_MODE_CONFIRM 1 +#define PIN_MODE_TRUST 2 /* --- CLA --- */ #define CLA_APP_DEF 0x00 diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index ff446eb..7d7befa 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -718,7 +718,6 @@ const bagl_element_t *ui_menu_pinmode_predisplay(const ux_menu_entry_t *entry, const ux_menu_entry_t ui_menu_pinmode[] = { {NULL, NULL, -1, NULL, "Choose:", NULL, 0, 0}, - {NULL, ui_menu_pinmode_action, 0x8000 | PIN_MODE_HOST, NULL, "Host", NULL, 0, 0}, {NULL, ui_menu_pinmode_action, 0x8000 | PIN_MODE_SCREEN, NULL, "On Screen", NULL, 0, 0}, {NULL, ui_menu_pinmode_action, 0x8000 | PIN_MODE_CONFIRM, NULL, "Confirm only", NULL, 0, 0}, {NULL, ui_menu_pinmode_action, 0x8000 | PIN_MODE_TRUST, NULL, "Trust", NULL, 0, 0}, @@ -733,7 +732,7 @@ void ui_menu_pinmode_display(unsigned int value) { const bagl_element_t *ui_menu_pinmode_predisplay(const ux_menu_entry_t *entry, bagl_element_t *element) { if (element->component.userid == 0x20) { - if ((entry->userid >= (0x8000 | PIN_MODE_HOST)) && + if ((entry->userid >= (0x8000 | PIN_MODE_SCREEN)) && (entry->userid <= (0x8000 | PIN_MODE_TRUST))) { unsigned char id = entry->userid & 0x7FFFF; snprintf(G_gpg_vstate.menu, @@ -749,51 +748,77 @@ const bagl_element_t *ui_menu_pinmode_predisplay(const ux_menu_entry_t *entry, return element; } +const ux_menu_entry_t ui_trust_warning[] = { + {NULL, NULL, -1, &C_icon_warning, "Warning", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "TRUST mode", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "won't request", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "any more PINs", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "or validation", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "before", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "operations!", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "Are you sure", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "you want to", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "select", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "TRUST mode?", NULL, 0, 0}, + {NULL, ui_menu_pinmode_display, 3, &C_icon_back, "Cancel", NULL, 61, 40}, + {NULL, ui_menu_pinmode_action, 127, &C_icon_validate_14, "Select", NULL, 61, 40}, + UX_MENU_END}; + void ui_menu_pinmode_action(unsigned int value) { unsigned char s; value = value & 0x7FFF; - if (value == 128) { - if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { - if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { - ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display, 0); - return; - } - // set new mode - s = G_gpg_vstate.pinmode; - nvm_write((void *) (&N_gpg_pstate->config_pin[0]), &s, 1); - // disactivate pinpad if any - if (G_gpg_vstate.pinmode == PIN_MODE_HOST) { - s = 0; - } else { - s = 3; - } - gpg_activate_pinpad(s); - } - } else { - switch (value) { - case PIN_MODE_HOST: - case PIN_MODE_SCREEN: - case PIN_MODE_CONFIRM: - if (!gpg_pin_is_verified(PIN_ID_PW2)) { - ui_info(PIN_USER_82, NOT_VERIFIED, ui_menu_pinmode_display, 0); - return; - } - break; - case PIN_MODE_TRUST: - if (!gpg_pin_is_verified(PIN_ID_PW3)) { - ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display, 0); + switch (value) { + case 128: + if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { + if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { + ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display, 0); return; } + // set new mode + s = G_gpg_vstate.pinmode; + nvm_write((void *) (&N_gpg_pstate->config_pin[0]), &s, 1); + gpg_activate_pinpad(3); + } + value = G_gpg_vstate.pinmode + 1; + break; + case PIN_MODE_SCREEN: + case PIN_MODE_CONFIRM: + if (value == G_gpg_vstate.pinmode) { + // Current selected mode + value++; break; - default: - ui_info(INVALID_SELECTION, EMPTY, ui_menu_pinmode_display, 0); + } + if (!gpg_pin_is_verified(PIN_ID_PW2)) { + ui_info(PIN_USER_82, NOT_VERIFIED, ui_menu_pinmode_display, 0); return; - } - G_gpg_vstate.pinmode = value; + } + G_gpg_vstate.pinmode = value; + value++; + break; + case PIN_MODE_TRUST: + if (value == G_gpg_vstate.pinmode) { + // Current selected mode + value++; + break; + } + if (!gpg_pin_is_verified(PIN_ID_PW3)) { + ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display, 0); + return; + } + // Confirm request + UX_MENU_DISPLAY(0, ui_trust_warning, NULL); + return; + case 127: + G_gpg_vstate.pinmode = PIN_MODE_TRUST; + value = PIN_MODE_TRUST + 1; + break; + default: + value = 0; + ui_info(INVALID_SELECTION, EMPTY, ui_menu_pinmode_display, 0); + break; } - // redisplay first entry of the idle menu - ui_menu_pinmode_display(0); + ui_menu_pinmode_display(value); } /* ------------------------------- UIF MODE UX ------------------------------ */ diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index b0f575e..2e80384 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -706,36 +706,29 @@ void ui_menu_seedmode_action(unsigned int value) { void ui_menu_pinmode_action(unsigned int value); void ui_menu_pinmode_predisplay(void); -#define ONHST_BUFF G_gpg_vstate.ux_buff1 -#define ONSCR_BUFF G_gpg_vstate.ux_buff2 -#define CONFI_BUFF G_gpg_vstate.ux_buff3 -#define TRUST_BUFF G_gpg_vstate.ux_buff4 +#define ONSCR_BUFF G_gpg_vstate.ux_buff1 +#define CONFI_BUFF G_gpg_vstate.ux_buff2 +#define TRUST_BUFF G_gpg_vstate.ux_buff3 UX_STEP_CB_INIT(ux_menu_pinmode_1_step, - bnn, - ui_menu_pinmode_predisplay(), - ui_menu_pinmode_action(PIN_MODE_HOST), - {"On Host", ONHST_BUFF, ONHST_BUFF + 5}); - -UX_STEP_CB_INIT(ux_menu_pinmode_2_step, bnn, ui_menu_pinmode_predisplay(), ui_menu_pinmode_action(PIN_MODE_SCREEN), {"On Screen", ONSCR_BUFF, ONSCR_BUFF + 5}); -UX_STEP_CB_INIT(ux_menu_pinmode_3_step, +UX_STEP_CB_INIT(ux_menu_pinmode_2_step, bnn, ui_menu_pinmode_predisplay(), ui_menu_pinmode_action(PIN_MODE_CONFIRM), {"Confirm Only", CONFI_BUFF, CONFI_BUFF + 5}); -UX_STEP_CB_INIT(ux_menu_pinmode_4_step, +UX_STEP_CB_INIT(ux_menu_pinmode_3_step, bnn, ui_menu_pinmode_predisplay(), ui_menu_pinmode_action(PIN_MODE_TRUST), {"Trust", TRUST_BUFF, TRUST_BUFF + 5}); -UX_STEP_CB(ux_menu_pinmode_6_step, +UX_STEP_CB(ux_menu_pinmode_4_step, pb, ui_menu_pinmode_action(128), { @@ -743,7 +736,7 @@ UX_STEP_CB(ux_menu_pinmode_6_step, "Set as Default", }); -UX_STEP_CB(ux_menu_pinmode_7_step, +UX_STEP_CB(ux_menu_pinmode_5_step, pb, ui_menu_settings_display(2), { @@ -756,19 +749,13 @@ UX_FLOW(ux_flow_pinmode, &ux_menu_pinmode_2_step, &ux_menu_pinmode_3_step, &ux_menu_pinmode_4_step, - &ux_menu_pinmode_6_step, - &ux_menu_pinmode_7_step); + &ux_menu_pinmode_5_step); void ui_menu_pinmode_predisplay() { - snprintf(ONHST_BUFF, 5, "%s", PIN_MODE_HOST == G_gpg_vstate.pinmode ? "ON" : "OFF"); snprintf(ONSCR_BUFF, 5, "%s", PIN_MODE_SCREEN == G_gpg_vstate.pinmode ? "ON" : "OFF"); snprintf(CONFI_BUFF, 5, "%s", PIN_MODE_CONFIRM == G_gpg_vstate.pinmode ? "ON" : "OFF"); snprintf(TRUST_BUFF, 5, "%s", PIN_MODE_TRUST == G_gpg_vstate.pinmode ? "ON" : "OFF"); - snprintf(ONHST_BUFF + 5, - sizeof(ONHST_BUFF) - 5, - "%s", - PIN_MODE_HOST == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); snprintf(ONSCR_BUFF + 5, sizeof(ONSCR_BUFF) - 5, "%s", @@ -787,68 +774,89 @@ void ui_menu_pinmode_display(unsigned int value) { ui_flow_display(ux_flow_pinmode, value); } +UX_STEP_NOCB(ui_trust_warning_step, + paging, + {.title = "Warning", + .text = "TRUST mode won't request any more PINs " + "or validation before operations!\n\n" + "Are you sure you want " + "to select TRUST mode?"}); + +UX_STEP_CB(ui_trust_warning_flow_cancel_step, + pb, + ui_menu_pinmode_display(PIN_MODE_TRUST), + { + &C_icon_crossmark, + "Cancel", + }); + +UX_STEP_CB(ui_trust_selecting_flow_confirm_step, + pbb, + ui_menu_pinmode_action(127), + { + &C_icon_validate_14, + "Select", + "TRUST Mode", + }); + +UX_FLOW(ui_trust_selecting_flow, + &ui_trust_warning_step, + &ui_trust_warning_flow_cancel_step, + &ui_trust_selecting_flow_confirm_step); + void ui_menu_pinmode_action(unsigned int value) { unsigned char s; - value = value & 0x7FFF; - if (value == 128) { - if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { - if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { - ui_info(DEFAULT_MODE, NOT_ALLOWED); - return; - } - // set new mode - s = G_gpg_vstate.pinmode; - nvm_write((void *) (&N_gpg_pstate->config_pin[0]), &s, 1); - // disactivate pinpad if any - if (G_gpg_vstate.pinmode == PIN_MODE_HOST) { - s = 0; - } else { - s = 3; - } - gpg_activate_pinpad(s); - value = G_gpg_vstate.pinmode; - } - } else { - switch (value) { - case PIN_MODE_HOST: - case PIN_MODE_SCREEN: - case PIN_MODE_CONFIRM: - if (!gpg_pin_is_verified(PIN_ID_PW2)) { - ui_info(PIN_USER_82, NOT_VERIFIED); - return; - } - break; - case PIN_MODE_TRUST: - if (!gpg_pin_is_verified(PIN_ID_PW3)) { - ui_info(PIN_ADMIN, NOT_VERIFIED); + switch (value) { + case 128: + if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { + if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { + ui_info(DEFAULT_MODE, NOT_ALLOWED); return; } - break; - default: - ui_info(INVALID_SELECTION, EMPTY); - return; - } - G_gpg_vstate.pinmode = value; - } - // redisplay active pin mode entry - switch (value) { - case PIN_MODE_HOST: - ui_menu_pinmode_display(0); + // set new mode + s = G_gpg_vstate.pinmode; + nvm_write((void *) (&N_gpg_pstate->config_pin[0]), &s, 1); + gpg_activate_pinpad(3); + } + value = G_gpg_vstate.pinmode; break; case PIN_MODE_SCREEN: - ui_menu_pinmode_display(1); - break; case PIN_MODE_CONFIRM: - ui_menu_pinmode_display(2); + if (value == G_gpg_vstate.pinmode) { + // Current selected mode + break; + } + if (!gpg_pin_is_verified(PIN_ID_PW2)) { + ui_info(PIN_USER_82, NOT_VERIFIED); + return; + } + G_gpg_vstate.pinmode = value; break; case PIN_MODE_TRUST: - ui_menu_pinmode_display(3); + if (value == G_gpg_vstate.pinmode) { + // Current selected mode + break; + } + if (!gpg_pin_is_verified(PIN_ID_PW3)) { + ui_info(PIN_ADMIN, NOT_VERIFIED); + return; + } + // Confirm request + ux_flow_init(0, ui_trust_selecting_flow, NULL); + return; + case 127: + G_gpg_vstate.pinmode = PIN_MODE_TRUST; + value = PIN_MODE_TRUST; break; default: - ui_menu_pinmode_display(0); + value = 0; + ui_info(INVALID_SELECTION, EMPTY); break; } + + // redisplay active pin mode entry + ui_menu_pinmode_display(value); } /* ------------------------------- UIF MODE UX ------------------------------ */ From 6d66b739c65dfb7593eec0dfad3dbb842cc0ff43 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 6 Feb 2024 19:07:36 +0100 Subject: [PATCH 19/75] PRODUCT: Update SEED mode management - Set SEED mode On at startup - Add a warning if the user disables it --- src/gpg_init.c | 2 ++ src/gpg_ux_nanos.c | 45 ++++++++++++++++++++++++++++++++++++++++-- src/gpg_ux_nanox.c | 49 +++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 91 insertions(+), 5 deletions(-) diff --git a/src/gpg_init.c b/src/gpg_init.c index 127a3c2..37c0e9c 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -361,6 +361,8 @@ void gpg_init() { gpg_mse_reset(); // pin conf G_gpg_vstate.pinmode = N_gpg_pstate->config_pin[0]; + // seed conf + G_gpg_vstate.seed_mode = 1; // ux conf gpg_init_ux(); } diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 7d7befa..3ab355a 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -705,11 +705,52 @@ void ui_menu_seedmode_display(unsigned int value) { UX_MENU_DISPLAY(value, ui_menu_seedmode, ui_menu_seedmode_predisplay); } -void ui_menu_seedmode_action(unsigned int value) { - G_gpg_vstate.seed_mode = value; +static void toggle_seed(unsigned int value) { + if (value != 128) { + return; + } + if (G_gpg_vstate.seed_mode) { + G_gpg_vstate.seed_mode = 0; + } else { + G_gpg_vstate.seed_mode = 1; + } ui_menu_seedmode_display(0); } +const ux_menu_entry_t ui_seed_warning[] = { + {NULL, NULL, -1, &C_icon_warning, "Warning", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "SEED mode", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "allows to", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "derive your", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "key from", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "Master SEED.", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "Without such", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "mode, an OS", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "or App update", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "will cause", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "your private", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "key to be", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "lost!", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "Are you sure", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "you want to", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "disable", NULL, 0, 0}, + {NULL, NULL, -1, NULL, "SEED mode?", NULL, 0, 0}, + {NULL, ui_menu_seedmode_display, 0, &C_icon_back, "Cancel", NULL, 61, 40}, + {NULL, toggle_seed, 128, &C_icon_validate_14, "Disable", NULL, 0, 0}, + UX_MENU_END}; + +void ui_menu_seedmode_action(unsigned int value) { + if (value == 0) { + // Request deactivate + UX_MENU_DISPLAY(0, ui_seed_warning, NULL); + } else { + // Reactivate + G_gpg_vstate.seed_mode = 1; + ui_menu_seedmode_display(0); + } +} + /* ------------------------------- PIN MODE UX ------------------------------ */ void ui_menu_pinmode_action(unsigned int value); diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 2e80384..790eb59 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -670,7 +670,7 @@ void ui_menu_seedmode_predisplay(void); UX_STEP_CB_INIT(ux_menu_seedmode_1_step, bn, ui_menu_seedmode_predisplay(), - ui_menu_seedmode_action(0), + ui_menu_seedmode_action(G_gpg_vstate.seed_mode), {"Toggle seed mode", CUR_SEED_MODE}); UX_STEP_CB(ux_menu_seedmode_2_step, @@ -691,8 +691,7 @@ void ui_menu_seedmode_display(unsigned int value) { ui_flow_display(ux_flow_seedmode, value); } -void ui_menu_seedmode_action(unsigned int value) { - UNUSED(value); +static void toggle_seed() { if (G_gpg_vstate.seed_mode) { G_gpg_vstate.seed_mode = 0; } else { @@ -701,6 +700,50 @@ void ui_menu_seedmode_action(unsigned int value) { ui_menu_seedmode_display(0); } +UX_STEP_NOCB(ui_seed_warning_step, + paging, + {.title = "Warning", + .text = "SEED mode allows to derive " + "your key from Master SEED.\n" + "Without such mode,\n" + "an OS or App update\n" + "will cause your private key to be lost!\n\n" + "Are you sure you want " + "to disable SEED mode?"}); + +UX_STEP_CB(ui_seed_warning_flow_cancel_step, + pb, + ui_menu_seedmode_display(0), + { + &C_icon_crossmark, + "Cancel", + }); + +UX_STEP_CB(ui_seed_disabling_flow_confirm_step, + pbb, + toggle_seed(), + { + &C_icon_validate_14, + "Disable", + "SEED Mode", + }); + +UX_FLOW(ui_seed_disabling_flow, + &ui_seed_warning_step, + &ui_seed_warning_flow_cancel_step, + &ui_seed_disabling_flow_confirm_step); + +void ui_menu_seedmode_action(unsigned int value) { + if (value == 1) { + // Current value is 'enable' -> Confirm deactivate + ux_flow_init(0, ui_seed_disabling_flow, NULL); + } else { + // Current value is 'disable' -> Reactivate + G_gpg_vstate.seed_mode = 1; + ui_menu_seedmode_display(0); + } +} + /* ------------------------------- PIN MODE UX ------------------------------ */ void ui_menu_pinmode_action(unsigned int value); From 60bb907f28eace1158052019c1e66bf03dfdf605 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 2 Feb 2024 19:25:04 +0100 Subject: [PATCH 20/75] Add Stax support --- Makefile | 3 +- glyphs/gpg_64px.gif | Bin 0 -> 404 bytes icons/gpg_32px.gif | Bin 0 -> 181 bytes ledger_app.toml | 2 +- src/gpg_types.h | 13 + src/gpg_ux_nbgl.c | 1148 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1164 insertions(+), 2 deletions(-) create mode 100644 glyphs/gpg_64px.gif create mode 100644 icons/gpg_32px.gif create mode 100644 src/gpg_ux_nbgl.c diff --git a/Makefile b/Makefile index 88e519b..882daf7 100644 --- a/Makefile +++ b/Makefile @@ -49,6 +49,7 @@ INCLUDES_PATH += $(BOLOS_SDK)/lib_cxng/src ICON_NANOS = icons/gpg_16px.gif ICON_NANOX = icons/gpg_14px.gif ICON_NANOSP = icons/gpg_14px.gif +ICON_STAX = icons/gpg_32px.gif # Application allowed derivation curves. # Possibles curves are: secp256k1, secp256r1, ed25519 and bls12381g1 @@ -97,7 +98,7 @@ VARIANT_VALUES = OpenPGP ######################################## #ENABLE_NBGL_QRCODE = 1 #ENABLE_NBGL_KEYBOARD = 1 -#ENABLE_NBGL_KEYPAD = 1 +ENABLE_NBGL_KEYPAD = 1 ######################################## # Features disablers # diff --git a/glyphs/gpg_64px.gif b/glyphs/gpg_64px.gif new file mode 100644 index 0000000000000000000000000000000000000000..9947bd5c6f1a90f900224d6147fbaa917aa2848d GIT binary patch literal 404 zcmV;F0c-w8Nk%w1VL$*t0Pp|+GBPsj>+2!;1ON&E001HX3rTHZXJt)cXK7<=4rgI) zZDBnyE;KbXH8eE5|#=jx?0D=sxkHHbW~cj0E?-cnb&3yR`86M2@oUN>G%Z(=uj!UiO4cAFYADZo)o*&KLs>rw~0Ku8NrUKSM zcvNcjn%2)>9&>9bIw|-@n88kP5<5P?_z@mJb_+pXserial, 0); + + memset(name, 0, sizeof(name)); + memmove(name, (void*) (N_gpg_pstate->name.value), 20); + if (name[0] != 0) { + for (int i = 0; i < 12; i++) { + if (name[i] == '<') { + name[i] = ' '; + } + } + } + memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s\nID: %x / %d", + name, + serial, + G_gpg_vstate.slot + 1); + + nbgl_useCaseHomeExt(APPNAME, + &C_gpg_64px, + G_gpg_vstate.menu, + true, + "Select Slot", + ui_menu_slot_action, + ui_menu_settings, + app_quit); +} + +// ----------------------------------------------------------- +// ------------------------ SLOT UX -------------------------- +// ----------------------------------------------------------- + +enum { + TOKEN_SLOT_SELECT = FIRST_USER_TOKEN, + TOKEN_SLOT_DEF, + TOKEN_SLOT_BACK, +}; + +static void slot_cb(int token, uint8_t index) { + switch (token) { + case TOKEN_SLOT_BACK: + ui_init(); + break; + case TOKEN_SLOT_SELECT: + if (index != G_gpg_vstate.slot) { + G_gpg_vstate.slot = index; + G_gpg_vstate.kslot = (gpg_key_slot_t*) &N_gpg_pstate->keys[G_gpg_vstate.slot]; + gpg_mse_reset(); + ui_CCID_reset(); + } + break; + case TOKEN_SLOT_DEF: + nvm_write((void*) (&N_gpg_pstate->config_slot[1]), &G_gpg_vstate.slot, 1); + ui_menu_slot_action(); + break; + default: + break; + } +} + +void ui_menu_slot_action(void) { + nbgl_layoutRadioChoice_t choices = {0}; + nbgl_layoutButton_t buttonInfo = {0}; + static char* names[GPG_KEYS_SLOTS] = {0}; + static char text[GPG_KEYS_SLOTS][32]; + uint32_t slot; + + ui_setting_header("Slots configuration", TOKEN_SLOT_BACK, slot_cb); + + for (slot = 0; slot < GPG_KEYS_SLOTS; slot++) { + snprintf(text[slot], + sizeof(text[slot]), + "Slot %d %s", + (slot + 1), + (N_gpg_pstate->config_slot[1] == slot) ? "[default]" : ""); + names[slot] = text[slot]; + } + choices.names = (const char* const*) names; + choices.localized = false; + choices.nbChoices = GPG_KEYS_SLOTS; + choices.initChoice = G_gpg_vstate.slot; + choices.token = TOKEN_SLOT_SELECT; + nbgl_layoutAddRadioChoice(layoutCtx, &choices); + + buttonInfo.fittingContent = false; + buttonInfo.onBottom = true; + buttonInfo.style = BLACK_BACKGROUND; + buttonInfo.text = "Set default"; + buttonInfo.token = TOKEN_SLOT_DEF; + buttonInfo.tuneId = TUNE_TAP_CASUAL; + nbgl_layoutAddButton(layoutCtx, &buttonInfo); + + nbgl_layoutDraw(layoutCtx); +} + +// ----------------------------------------------------------- +// --------------------- SETTINGS MENU ----------------------- +// ----------------------------------------------------------- + +/* ------------------------------- TEMPLATE UX ------------------------------- */ +enum { + TOKEN_TEMPLATE_SIG = FIRST_USER_TOKEN, + TOKEN_TEMPLATE_DEC, + TOKEN_TEMPLATE_AUT, + TOKEN_TEMPLATE_SET, + TOKEN_TEMPLATE_BACK +}; + +static const char* const keyNameTexts[] = {LABEL_SIG, LABEL_DEC, LABEL_AUT}; + +enum { + TOKEN_TYPE_RSA2048 = FIRST_USER_TOKEN, + TOKEN_TYPE_RSA3072, + TOKEN_TYPE_RSA4096, + TOKEN_TYPE_SECP256K1, + TOKEN_TYPE_Ed25519, + TOKEN_TYPE_BACK +}; + +static const char* const keyTypeTexts[] = {LABEL_RSA2048, + LABEL_RSA3072, + LABEL_RSA4096, + LABEL_SECP256K1, + LABEL_Ed25519}; + +static uint32_t _getKeyType(const uint8_t key) { + uint8_t* attributes = NULL; + uint32_t tag = 0; + uint32_t token = 0; + + switch (key) { + case TOKEN_TEMPLATE_SIG: + attributes = G_gpg_vstate.kslot->sig.attributes.value; + break; + case TOKEN_TEMPLATE_DEC: + attributes = G_gpg_vstate.kslot->dec.attributes.value; + break; + case TOKEN_TEMPLATE_AUT: + attributes = G_gpg_vstate.kslot->aut.attributes.value; + break; + } + if (attributes == NULL) { + return 0; + } + switch (attributes[0]) { + case KEY_ID_RSA: + // RSA + tag = U2BE(attributes, 1); + switch (tag) { + case 2048: + token = TOKEN_TYPE_RSA2048; + break; + case 3072: + token = TOKEN_TYPE_RSA3072; + break; + case 4096: + token = TOKEN_TYPE_RSA4096; + break; + } + break; + case KEY_ID_ECDH: + tag = attributes[1]; + switch (tag) { + case 0x2A: + token = TOKEN_TYPE_SECP256K1; + break; + case 0x2B: + token = TOKEN_TYPE_Ed25519; + break; + } + break; + case KEY_ID_ECDSA: + token = TOKEN_TYPE_SECP256K1; + break; + case KEY_ID_EDDSA: + token = TOKEN_TYPE_Ed25519; + break; + } + return token; +} + +static void template_key_cb(int token, uint8_t index) { + LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); + gpg_key_t* dest = NULL; + static uint8_t* oid = NULL; + uint32_t oid_len = 0; + uint32_t size = 0; + uint8_t key_type = index + FIRST_USER_TOKEN; + + switch (token) { + case TOKEN_TYPE_BACK: + break; + case TOKEN_TYPE_RSA2048: + case TOKEN_TYPE_RSA3072: + case TOKEN_TYPE_RSA4096: + case TOKEN_TYPE_SECP256K1: + case TOKEN_TYPE_Ed25519: + memset(&attributes, 0, sizeof(attributes)); + switch (key_type) { + case TOKEN_TYPE_RSA2048: + case TOKEN_TYPE_RSA3072: + case TOKEN_TYPE_RSA4096: + switch (key_type) { + case TOKEN_TYPE_RSA2048: + size = 2048; + break; + case TOKEN_TYPE_RSA3072: + size = 3072; + break; + case TOKEN_TYPE_RSA4096: + size = 4096; + break; + } + attributes.value[0] = KEY_ID_RSA; + U2BE_ENCODE(attributes.value, 1, size); + attributes.value[3] = 0x00; + attributes.value[4] = 0x20; + attributes.value[5] = 0x01; + attributes.length = 6; + oid_len = 6; + break; + + case TOKEN_TYPE_SECP256K1: + if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { + attributes.value[0] = KEY_ID_ECDH; + } else { + attributes.value[0] = KEY_ID_ECDSA; + } + oid = gpg_curve2oid(CX_CURVE_SECP256R1, &oid_len); + memmove(attributes.value + 1, oid, sizeof(oid_len)); + attributes.length = 1 + oid_len; + break; + + case TOKEN_TYPE_Ed25519: + if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { + attributes.value[0] = KEY_ID_ECDH; + oid = gpg_curve2oid(CX_CURVE_Curve25519, &oid_len); + } else { + attributes.value[0] = KEY_ID_EDDSA; + oid = gpg_curve2oid(CX_CURVE_Ed25519, &oid_len); + } + memmove(attributes.value + 1, oid, sizeof(oid_len)); + attributes.length = 1 + oid_len; + break; + } + + switch (G_gpg_vstate.ux_key) { + case TOKEN_TEMPLATE_SIG: + dest = &G_gpg_vstate.kslot->sig; + break; + case TOKEN_TEMPLATE_DEC: + dest = &G_gpg_vstate.kslot->dec; + break; + case TOKEN_TEMPLATE_AUT: + dest = &G_gpg_vstate.kslot->aut; + break; + } + + if (dest && attributes.value[0] && + memcmp(&dest->attributes, &attributes, sizeof(attributes)) != 0) { + PRINTF("TEMPLATE NVM_WRITE!!!!!\n"); + nvm_write(dest, NULL, sizeof(gpg_key_t)); + nvm_write(&dest->attributes, &attributes, sizeof(attributes)); + } + break; + } + ui_settings_template(); +} + +static void template_cb(int token, uint8_t index) { + UNUSED(index); + static nbgl_layoutRadioChoice_t choices = {0}; + + switch (token) { + case TOKEN_TEMPLATE_BACK: + ui_menu_settings(); + break; + case TOKEN_TEMPLATE_SIG: + case TOKEN_TEMPLATE_DEC: + case TOKEN_TEMPLATE_AUT: + G_gpg_vstate.ux_key = token; + ui_setting_header(keyNameTexts[token - FIRST_USER_TOKEN], + TOKEN_TYPE_BACK, + template_key_cb); + + choices.names = (const char* const*) keyTypeTexts; + choices.nbChoices = ARRAYLEN(keyTypeTexts); + choices.initChoice = _getKeyType(token) - FIRST_USER_TOKEN; + choices.token = token; + nbgl_layoutAddRadioChoice(layoutCtx, &choices); + + nbgl_layoutDraw(layoutCtx); + break; + } +} + +static void ui_settings_template(void) { + nbgl_layoutBar_t bar = {0}; + uint32_t i; + + G_gpg_vstate.ux_key = 0; + + ui_setting_header("Keys templates", TOKEN_TEMPLATE_BACK, template_cb); + + for (i = 0; i < KEY_NB; i++) { + memset(&bar, 0, sizeof(nbgl_layoutBar_t)); + switch (_getKeyType(TOKEN_TEMPLATE_SIG + i)) { + case TOKEN_TYPE_RSA2048: + bar.subText = PIC(LABEL_RSA2048); + break; + case TOKEN_TYPE_RSA3072: + bar.subText = PIC(LABEL_RSA3072); + break; + case TOKEN_TYPE_RSA4096: + bar.subText = PIC(LABEL_RSA4096); + break; + case TOKEN_TYPE_SECP256K1: + bar.subText = PIC(LABEL_SECP256K1); + break; + case TOKEN_TYPE_Ed25519: + bar.subText = PIC(LABEL_Ed25519); + break; + default: + break; + } + bar.text = PIC(keyNameTexts[i]); + bar.iconRight = &C_Next32px; + bar.token = TOKEN_TEMPLATE_SIG + i; + bar.centered = false; + bar.tuneId = TUNE_TAP_CASUAL; + nbgl_layoutAddTouchableBar(layoutCtx, &bar); + nbgl_layoutAddSeparationLine(layoutCtx); + } + + nbgl_layoutDraw(layoutCtx); +} + +/* --------------------------------- SEED UX --------------------------------- */ +enum { + TOKEN_SEED = FIRST_USER_TOKEN, + TOKEN_SEED_BACK, +}; + +void seed_confirm_cb(bool confirm) { + if (confirm) { + G_gpg_vstate.seed_mode = 0; + ui_info("SEED MODE", "DEACTIVATED", ui_settings_seed, true); + } else { + G_gpg_vstate.seed_mode = 1; + ui_settings_seed(); + } +} + +static void seed_cb(int token, uint8_t index) { + switch (token) { + case TOKEN_SEED_BACK: + ui_menu_settings(); + break; + case TOKEN_SEED: + if (index == 0) { + nbgl_useCaseChoice(NULL, + "SEED mode", + "This mode allows to derive your key from Master SEED.\n" + "Without such configuration, an OS or App update " + "will cause your private key to be lost!\n" + "Are you sure you want to disable SEED mode?", + "Deactivate", + "Cancel", + seed_confirm_cb); + } + break; + } +} + +static void ui_settings_seed(void) { + static nbgl_layoutSwitch_t option = {0}; + + ui_setting_header("Seed mode", TOKEN_SEED_BACK, seed_cb); + + option.initState = G_gpg_vstate.seed_mode; + option.text = "Seed Mode"; + option.subText = "Key derivation from Master seed"; + option.token = TOKEN_SEED; + option.tuneId = TUNE_TAP_CASUAL; + nbgl_layoutAddSwitch(layoutCtx, &option); + + nbgl_layoutDraw(layoutCtx); +} + +/* --------------------------------- PIN UX ---------------------------------- */ + +enum { + TOKEN_PIN_SET = FIRST_USER_TOKEN, + TOKEN_PIN_DEF, + TOKEN_PIN_BACK, +}; + +void trust_cb(bool confirm) { + if (confirm) { + G_gpg_vstate.pinmode = G_gpg_vstate.pinmode_req; + ui_info("TRUST MODE", "SELECTED", ui_settings_pin, true); + } else { + ui_settings_pin(); + } +} + +static void pin_cb(int token, uint8_t index) { + const char* err = NULL; + int pin = 0; + switch (token) { + case TOKEN_PIN_BACK: + ui_menu_settings(); + break; + case TOKEN_PIN_SET: + switch (index) { + case PIN_MODE_SCREEN: + case PIN_MODE_CONFIRM: + pin = PIN_ID_PW2; + err = PIN_USER_82; + break; + case PIN_MODE_TRUST: + pin = PIN_ID_PW3; + err = PIN_ADMIN; + break; + } + if (!gpg_pin_is_verified(pin)) { + ui_info(err, NOT_VERIFIED, ui_settings_pin, false); + break; + } + if ((G_gpg_vstate.pinmode != PIN_MODE_TRUST) && (index == PIN_MODE_TRUST)) { + G_gpg_vstate.pinmode_req = index; + nbgl_useCaseChoice(NULL, + "TRUST mode", + "This mode won't request any more PINs " + "or validation before operations!\n" + "Are you sure you want to select TRUST mode?", + "Select", + "Cancel", + trust_cb); + } else { + G_gpg_vstate.pinmode = index; + } + break; + case TOKEN_PIN_DEF: + if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { + ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_settings_pin, false); + break; + } else if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { + // set new mode + nvm_write((void*) (&N_gpg_pstate->config_pin[0]), &G_gpg_vstate.pinmode, 1); + gpg_activate_pinpad(3); + } + ui_settings_pin(); + break; + } +} + +static void ui_settings_pin(void) { + static nbgl_layoutRadioChoice_t choices = {0}; + nbgl_layoutButton_t buttonInfo = {0}; + static char* names[3] = {0}; + static char text[3][64]; + uint32_t i; + + static const char* const PinNameTexts[] = { + "On Screen", + "Confirm Only", + "Trust", + }; + + ui_setting_header("PIN mode", TOKEN_PIN_BACK, pin_cb); + + for (i = 0; i < ARRAYLEN(PinNameTexts); i++) { + snprintf(text[i], + sizeof(text[i]), + "%s %s", + (const char*) PIC(PinNameTexts[i]), + (N_gpg_pstate->config_pin[0] == i) ? "[default]" : ""); + names[i] = text[i]; + } + choices.names = (const char* const*) names; + choices.localized = false; + choices.nbChoices = ARRAYLEN(PinNameTexts); + choices.initChoice = G_gpg_vstate.pinmode; + choices.token = TOKEN_PIN_SET; + nbgl_layoutAddRadioChoice(layoutCtx, &choices); + + buttonInfo.fittingContent = false; + buttonInfo.onBottom = true; + buttonInfo.style = BLACK_BACKGROUND; + buttonInfo.text = "Set default"; + buttonInfo.token = TOKEN_PIN_DEF; + buttonInfo.tuneId = TUNE_TAP_CASUAL; + nbgl_layoutAddButton(layoutCtx, &buttonInfo); + + nbgl_layoutDraw(layoutCtx); +} + +/* --------------------------------- UIF UX ---------------------------------- */ +enum { + TOKEN_UIF_SIG = FIRST_USER_TOKEN, + TOKEN_UIF_DEC, + TOKEN_UIF_AUT, + TOKEN_UIF_BACK, +}; + +static void uif_cb(int token, uint8_t index) { + unsigned char* uif = NULL; + switch (token) { + case TOKEN_UIF_BACK: + ui_menu_settings(); + break; + case TOKEN_UIF_SIG: + uif = &G_gpg_vstate.kslot->sig.UIF[0]; + break; + case TOKEN_UIF_DEC: + uif = &G_gpg_vstate.kslot->dec.UIF[0]; + break; + case TOKEN_UIF_AUT: + uif = &G_gpg_vstate.kslot->aut.UIF[0]; + break; + } + if (uif == NULL) { + return; + } + if (uif[0] == 2) { + ui_info(UIF_LOCKED, EMPTY, ui_menu_settings, false); + } else if (uif[0] != index) { + nvm_write(&uif[0], &index, 1); + } +} + +static void ui_settings_uif(void) { + static nbgl_layoutSwitch_t option = {0}; + uint8_t nbOptions = 0; + + ui_setting_header("User Interaction Flags", TOKEN_UIF_BACK, uif_cb); + + if (G_gpg_vstate.kslot->sig.UIF[0] != 2) { + memset(&option, 0, sizeof(nbgl_layoutSwitch_t)); + option.initState = G_gpg_vstate.kslot->sig.UIF[0]; + option.text = "UIF for Signature"; + option.token = TOKEN_UIF_SIG; + option.tuneId = TUNE_TAP_CASUAL; + nbgl_layoutAddSwitch(layoutCtx, &option); + nbOptions++; + } + + if (G_gpg_vstate.kslot->dec.UIF[0] != 2) { + memset(&option, 0, sizeof(nbgl_layoutSwitch_t)); + option.initState = G_gpg_vstate.kslot->dec.UIF[0]; + option.text = "UIF for Decryption"; + option.token = TOKEN_UIF_DEC; + option.tuneId = TUNE_TAP_CASUAL; + nbgl_layoutAddSwitch(layoutCtx, &option); + nbOptions++; + } + + if (G_gpg_vstate.kslot->aut.UIF[0] != 2) { + memset(&option, 0, sizeof(nbgl_layoutSwitch_t)); + option.initState = G_gpg_vstate.kslot->aut.UIF[0]; + option.text = "UIF for Authentication"; + option.token = TOKEN_UIF_AUT; + option.tuneId = TUNE_TAP_CASUAL; + nbgl_layoutAddSwitch(layoutCtx, &option); + nbOptions++; + } + if (nbOptions == 0) { + // UIF flags are all "Permanent Enable", just display for information + static const char* const infoTypes[] = {"UIF for Signature", + "UIF for Decryption", + "UIF for Authentication"}; + static const char* const infoContents[] = {"Permanently Enabled", + "Permanently Enabled", + "Permanently Enabled"}; + + for (nbOptions = 0; nbOptions < ARRAYLEN(infoTypes); nbOptions++) { + nbgl_layoutAddText(layoutCtx, infoTypes[nbOptions], infoContents[nbOptions]); + nbgl_layoutAddSeparationLine(layoutCtx); + } + } + + nbgl_layoutDraw(layoutCtx); +} + +/* -------------------------------- RESET UX --------------------------------- */ +enum { + TOKEN_RESET = FIRST_USER_TOKEN, +}; + +static bool reset_nav_cb(uint8_t page, nbgl_pageContent_t* content) { + UNUSED(page); + memset(content, 0, sizeof(nbgl_pageContent_t)); + content->type = INFO_LONG_PRESS; + content->infoLongPress.text = + "Reset the app to factory default?\nThis will delete ALL the keys!!!"; + content->infoLongPress.icon = NULL; + content->infoLongPress.longPressText = "Yes"; + content->infoLongPress.longPressToken = TOKEN_RESET; + content->infoLongPress.tuneId = TUNE_TAP_CASUAL; + return true; +} + +static void reset_ctrl_cb(int token, uint8_t index) { + UNUSED(index); + unsigned char magic[4] = {0, 0, 0, 0}; + + if (token != TOKEN_RESET) { + return; + } + nvm_write((void*) (N_gpg_pstate->magic), magic, sizeof(magic)); + gpg_init(); + ui_CCID_reset(); + ui_init(); +} + +/* ------------------------------- SETTINGS UX ------------------------------- */ + +enum { + SETTINGS_PAGE_PARAMS, + SETTINGS_PAGE_INFO, + SETTINGS_PAGE_NB, +}; + +#ifdef HAVE_PRINTF +#define VERSION_STR "[DBG] App " XSTR(APPVERSION) +#else +#define VERSION_STR "App " XSTR(APPVERSION) +#endif +static bool settings_nav_cb(uint8_t page, nbgl_pageContent_t* content) { + bool ret = false; + + static const char* const infoTypes[] = {"Name", "Developer", "Specifications", "Version"}; + static const char* const infoContents[] = {"OpenPGP Card", + "(c) Ledger SAS", + XSTR(SPEC_VERSION), + VERSION_STR}; + static const char* const barTexts[] = {"Key Template", + "Seed mode", + "Pin mode", + "UIF mode", + "Reset"}; + static const uint8_t barTokens[] = {TOKEN_SETTINGS_TEMPLATE, + TOKEN_SETTINGS_SEED, + TOKEN_SETTINGS_PIN, + TOKEN_SETTINGS_UIF, + TOKEN_SETTINGS_RESET}; + memset(content, 0, sizeof(nbgl_pageContent_t)); + switch (page) { + case SETTINGS_PAGE_INFO: + content->type = INFOS_LIST; + content->infosList.nbInfos = ARRAYLEN(infoTypes); + content->infosList.infoTypes = infoTypes; + content->infosList.infoContents = infoContents; + ret = true; + break; + case SETTINGS_PAGE_PARAMS: + content->type = BARS_LIST; + content->barsList.barTexts = barTexts; + content->barsList.tokens = barTokens; + content->barsList.nbBars = ARRAYLEN(barTokens); + content->barsList.tuneId = TUNE_TAP_CASUAL; + ret = true; + break; + } + return ret; +} + +static void settings_ctrl_cb(int token, uint8_t index) { + UNUSED(index); + switch (token) { + case TOKEN_SETTINGS_TEMPLATE: + ui_settings_template(); + break; + case TOKEN_SETTINGS_SEED: + ui_settings_seed(); + break; + case TOKEN_SETTINGS_PIN: + ui_settings_pin(); + break; + case TOKEN_SETTINGS_UIF: + ui_settings_uif(); + break; + case TOKEN_SETTINGS_RESET: + nbgl_useCaseSettings("Reset to Default", + 0, + 1, + true, + ui_menu_settings, + reset_nav_cb, + reset_ctrl_cb); + break; + } +} + +// settings menu definition +void ui_menu_settings() { + nbgl_useCaseSettings(APPNAME, + SETTINGS_PAGE_PARAMS, + SETTINGS_PAGE_NB, + false, + ui_init, + settings_nav_cb, + settings_ctrl_cb); +} + +/* ------------------------------ PIN CONFIRM UX ----------------------------- */ +void pin_confirm_cb(bool confirm) { + gpg_pin_set_verified(G_gpg_vstate.io_p2, confirm); + + gpg_io_discard(0); + gpg_io_insert_u16(confirm ? SW_OK : SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_init(); +} + +void ui_menu_pinconfirm_display(unsigned int value) { + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s %x", + value == 0x83 ? "Admin" : "User", + value); + nbgl_useCaseChoice(NULL, "Confirm PIN", G_gpg_vstate.menu, "Yes", "No", pin_confirm_cb); +} + +/* ------------------------------ PIN ENTRY UX ----------------------------- */ +enum { + TOKEN_PIN_ENTRY_BACK = FIRST_USER_TOKEN, +}; + +static void ui_menu_pinentry_cb(void); + +static void setPinCodeText(bool add) { + bool enableValidate, enableBackspace, enableDigits; + bool redrawKeypad = false; + uint8_t minLen; + nbgl_refresh_mode_t mode = BLACK_AND_WHITE_FAST_REFRESH; + + minLen = (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? GPG_MIN_PW3_LENGTH : GPG_MIN_PW1_LENGTH; + enableDigits = (G_gpg_vstate.pinLen < GPG_MAX_PW_LENGTH); + enableValidate = (G_gpg_vstate.pinLen >= minLen); + enableBackspace = (G_gpg_vstate.pinLen > 0); + if (add) { + if ((G_gpg_vstate.pinLen == minLen) || // activate "validate" button on keypad + (G_gpg_vstate.pinLen == GPG_MAX_PW_LENGTH) || // deactivate "digits" on keypad + (G_gpg_vstate.pinLen == 1)) { // activate "backspace" + redrawKeypad = true; + } + } else { // remove + if ((G_gpg_vstate.pinLen == 0) || // deactivate "backspace" button on keypad + (G_gpg_vstate.pinLen == (minLen - 1)) || // deactivate "validate" button on keypad + (G_gpg_vstate.pinLen == (GPG_MAX_PW_LENGTH - 1))) { // reactivate "digits" on keypad + redrawKeypad = true; + } + } + nbgl_layoutUpdateHiddenDigits(G_gpg_vstate.layoutCtx, + G_gpg_vstate.hiddenDigitsIndex, + G_gpg_vstate.pinLen); + if (redrawKeypad) { + nbgl_layoutUpdateKeypad(G_gpg_vstate.layoutCtx, + G_gpg_vstate.keypadIndex, + enableValidate, + enableBackspace, + enableDigits); + } + + if ((!add) && (G_gpg_vstate.pinLen == 0)) { + // Full refresh to fully clean the bullets when reaching 0 digits + mode = FULL_COLOR_REFRESH; + } + nbgl_refreshSpecialWithPostRefresh(mode, POST_REFRESH_FORCE_POWER_ON); +} + +static void validate_pin(void) { + unsigned int sw = SW_UNKNOWN; + unsigned int len1 = 0; + unsigned char* pin1 = NULL; + gpg_pin_t* pin = NULL; + + switch (G_gpg_vstate.io_ins) { + case INS_VERIFY: + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + sw = gpg_pin_check(pin, + G_gpg_vstate.io_p2, + G_gpg_vstate.ux_pinentry, + G_gpg_vstate.pinLen); + gpg_io_discard(1); + if (sw == SW_PIN_BLOCKED) { + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_info(PIN_LOCKED, EMPTY, ui_init, false); + break; + } else if (sw != SW_OK) { + snprintf(G_gpg_vstate.line, + sizeof(G_gpg_vstate.line), + "%d tries remaining", + pin->counter); + ui_info(WRONG_PIN, G_gpg_vstate.line, ui_menu_pinentry_cb, false); + break; + } + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + snprintf(G_gpg_vstate.line, + sizeof(G_gpg_vstate.line), + "%s PIN", + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "ADMIN" : "USER"); + ui_info(G_gpg_vstate.line, "VERIFIED", ui_init, true); + break; + + case INS_CHANGE_REFERENCE_DATA: + switch (G_gpg_vstate.ux_step) { + case 0: + // Check Current pin code + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + sw = gpg_pin_check(pin, + G_gpg_vstate.io_p2, + G_gpg_vstate.ux_pinentry, + G_gpg_vstate.pinLen); + gpg_io_discard(1); + if (sw == SW_PIN_BLOCKED) { + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_info(PIN_LOCKED, EMPTY, ui_init, false); + break; + } else if (sw != SW_OK) { + snprintf(G_gpg_vstate.line, + sizeof(G_gpg_vstate.line), + " %d tries remaining", + pin->counter); + ui_info(WRONG_PIN, G_gpg_vstate.line, ui_menu_pinentry_cb, false); + break; + } + ui_menu_pinentry_display(++G_gpg_vstate.ux_step); + break; + case 1: + // Store the New pin codes + gpg_io_insert_u8(G_gpg_vstate.pinLen); + gpg_io_insert(G_gpg_vstate.ux_pinentry, G_gpg_vstate.pinLen); + ui_menu_pinentry_display(++G_gpg_vstate.ux_step); + break; + case 2: + // Compare the 2 pin codes (New + Confirm) + len1 = G_gpg_vstate.work.io_buffer[0]; + pin1 = G_gpg_vstate.work.io_buffer + 1; + if ((len1 != G_gpg_vstate.pinLen) || + (memcmp(pin1, G_gpg_vstate.ux_pinentry, G_gpg_vstate.pinLen) != 0)) { + gpg_io_discard(1); + ui_info(PIN_DIFFERS, EMPTY, ui_menu_pinentry_cb, false); + } else { + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + sw = gpg_pin_set(pin, G_gpg_vstate.work.io_buffer + 1, G_gpg_vstate.pinLen); + gpg_io_discard(1); + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + if (sw != SW_OK) { + ui_info("Process Error", EMPTY, ui_init, false); + } else { + snprintf(G_gpg_vstate.line, + sizeof(G_gpg_vstate.line), + "%s PIN", + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "ADMIN" : "USER"); + ui_info(G_gpg_vstate.line, "CHANGED", ui_init, true); + } + } + break; + default: + break; + } + break; + + default: + break; + } +} + +static void keypad_cb(char touchedKey) { + switch (touchedKey) { + case BACKSPACE_KEY: + if (G_gpg_vstate.pinLen > 0) { + G_gpg_vstate.pinLen--; + G_gpg_vstate.ux_pinentry[G_gpg_vstate.pinLen] = 0; + } + setPinCodeText(false); + break; + + case VALIDATE_KEY: + // Gray out keyboard / buttons as a first user feedback + nbgl_layoutUpdateKeypad(G_gpg_vstate.layoutCtx, + G_gpg_vstate.keypadIndex, + false, + false, + true); + nbgl_refreshSpecialWithPostRefresh(BLACK_AND_WHITE_FAST_REFRESH, + POST_REFRESH_FORCE_POWER_ON); + + validate_pin(); + break; + + default: + if ((touchedKey >= 0x30) && (touchedKey < 0x40)) { + if (G_gpg_vstate.pinLen < GPG_MAX_PW_LENGTH) { + G_gpg_vstate.ux_pinentry[G_gpg_vstate.pinLen] = touchedKey; + G_gpg_vstate.pinLen++; + } + setPinCodeText(true); + } + break; + } +} + +static void pinentry_cb(int token, uint8_t index) { + UNUSED(index); + if (token == TOKEN_PIN_ENTRY_BACK) { + gpg_io_discard(0); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_init(); + } +} + +void ui_menu_pinentry_display(unsigned int value) { + nbgl_layoutDescription_t layoutDescription = {0}; + nbgl_layoutCenteredInfo_t centeredInfo = {0}; + int status = -1; + + // reset the pin buffer + memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + G_gpg_vstate.pinLen = 0; + + layoutDescription.onActionCallback = pinentry_cb; + layoutDescription.modal = false; + layoutDescription.withLeftBorder = false; + G_gpg_vstate.layoutCtx = nbgl_layoutGet(&layoutDescription); + + nbgl_layoutAddProgressIndicator(G_gpg_vstate.layoutCtx, + 0, + 0, + true, + TOKEN_PIN_ENTRY_BACK, + TUNE_TAP_CASUAL); + + memset(G_gpg_vstate.line, 0, sizeof(G_gpg_vstate.line)); + if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { + switch (value) { + case 0: + // Default or initial case + memmove(G_gpg_vstate.line, "Current", 7); + break; + case 1: + memmove(G_gpg_vstate.line, "New", 3); + break; + case 2: + memmove(G_gpg_vstate.line, "Confirm", 7); + break; + default: + break; + } + G_gpg_vstate.ux_step = value; + } else { + memmove(G_gpg_vstate.line, "Enter", 5); + } + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s %s PIN", + G_gpg_vstate.line, + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); + + // add description + centeredInfo.text1 = G_gpg_vstate.menu; + centeredInfo.style = LARGE_CASE_INFO; + centeredInfo.onTop = true; + nbgl_layoutAddCenteredInfo(G_gpg_vstate.layoutCtx, ¢eredInfo); + + // add keypad (Not shuffled pin) + status = nbgl_layoutAddKeypad(G_gpg_vstate.layoutCtx, keypad_cb, false); + if (status < 0) { + return; + } + G_gpg_vstate.keypadIndex = (unsigned int) status; + + // add hidden digits - GPG_MAX_PW_LENGTH (12) is not yet supported + status = nbgl_layoutAddHiddenDigits(G_gpg_vstate.layoutCtx, 10); + if (status < 0) { + return; + } + G_gpg_vstate.hiddenDigitsIndex = (unsigned int) status; + + nbgl_layoutDraw(G_gpg_vstate.layoutCtx); + nbgl_refreshSpecialWithPostRefresh(FULL_COLOR_CLEAN_REFRESH, POST_REFRESH_FORCE_POWER_ON); +} + +static void ui_menu_pinentry_cb(void) { + unsigned int value = 0; + + if ((G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) && (G_gpg_vstate.ux_step == 2)) { + // Current step is Change Password with PINs differ + value = 1; + } + ui_menu_pinentry_display(value); +} + +/* ------------------------------ UIF CONFIRM UX ----------------------------- */ +void uif_confirm_cb(bool confirm) { + unsigned int sw = SW_SECURITY_UIF_ISSUE; + + if (confirm) { + G_gpg_vstate.UIF_flags = 1; + if (G_gpg_vstate.io_ins == INS_PSO) { + sw = gpg_apdu_pso(); + } else if (G_gpg_vstate.io_ins == INS_INTERNAL_AUTHENTICATE) { + sw = gpg_apdu_internal_authenticate(); + } else { + gpg_io_discard(1); + } + G_gpg_vstate.UIF_flags = 0; + } else { + gpg_io_discard(1); + } + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_init(); +} + +void ui_menu_uifconfirm_display(unsigned int value) { + UNUSED(value); + + switch (G_gpg_vstate.io_ins) { + case INS_INTERNAL_AUTHENTICATE: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Authentication"); + break; + case INS_PSO: + switch (G_gpg_vstate.io_p1p2) { + case PSO_CDS: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Signature"); + break; + case PSO_ENC: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Encryption"); + break; + case PSO_DEC: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Decryption"); + break; + default: + break; + } + break; + default: + break; + } + if (G_gpg_vstate.menu[0] == 0) { + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "Please Cancel"); + } + nbgl_useCaseChoice(NULL, "Confirm operation", G_gpg_vstate.menu, "Yes", "No", uif_confirm_cb); +} + +#endif // defined(HAVE_NBGL) && defined(TARGET_STAX) From 09d1e9509eec88a2be418858dd986c502b5e0c01 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 2 Feb 2024 18:24:22 +0100 Subject: [PATCH 21/75] Stax with future nbgl_useCaseKeypad (compilation flag) --- Makefile | 1 + src/gpg_ux_nbgl.c | 160 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) diff --git a/Makefile b/Makefile index 882daf7..b4d5d46 100644 --- a/Makefile +++ b/Makefile @@ -122,6 +122,7 @@ DISABLE_STANDARD_WEBUSB = 1 DEFINES += CUSTOM_IO_APDU_BUFFER_SIZE=\(255+5+64\) DEFINES += HAVE_USB_CLASS_CCID DEFINES += HAVE_RSA +DEFINES += WAIT_NEXT_SDK ifeq ($(TARGET_NAME),TARGET_NANOS) DEFINES += HAVE_UX_LEGACY diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index 90f8664..e4aa689 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -823,6 +823,7 @@ enum { static void ui_menu_pinentry_cb(void); +#ifdef WAIT_NEXT_SDK static void setPinCodeText(bool add) { bool enableValidate, enableBackspace, enableDigits; bool redrawKeypad = false; @@ -1091,6 +1092,165 @@ static void ui_menu_pinentry_cb(void) { } ui_menu_pinentry_display(value); } +#else +static void validate_pin(const uint8_t* pinentry, uint8_t length) { + unsigned int sw = SW_UNKNOWN; + unsigned int len1 = 0; + unsigned char* pin1 = NULL; + gpg_pin_t* pin = NULL; + + switch (G_gpg_vstate.io_ins) { + case INS_VERIFY: + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + sw = gpg_pin_check(pin, G_gpg_vstate.io_p2, pinentry, length); + gpg_io_discard(1); + if (sw == SW_PIN_BLOCKED) { + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_info(PIN_LOCKED, EMPTY, ui_init, false); + break; + } else if (sw != SW_OK) { + snprintf(G_gpg_vstate.line, + sizeof(G_gpg_vstate.line), + "%d tries remaining", + pin->counter); + ui_info(WRONG_PIN, G_gpg_vstate.line, ui_menu_pinentry_cb, false); + break; + } + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + snprintf(G_gpg_vstate.line, + sizeof(G_gpg_vstate.line), + "%s PIN", + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "ADMIN" : "USER"); + ui_info(G_gpg_vstate.line, "VERIFIED", ui_init, true); + break; + + case INS_CHANGE_REFERENCE_DATA: + switch (G_gpg_vstate.ux_step) { + case 0: + // Check Current pin code + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + sw = gpg_pin_check(pin, G_gpg_vstate.io_p2, pinentry, length); + gpg_io_discard(1); + if (sw == SW_PIN_BLOCKED) { + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_info(PIN_LOCKED, EMPTY, ui_init, false); + break; + } else if (sw != SW_OK) { + snprintf(G_gpg_vstate.line, + sizeof(G_gpg_vstate.line), + " %d tries remaining", + pin->counter); + ui_info(WRONG_PIN, G_gpg_vstate.line, ui_menu_pinentry_cb, false); + break; + } + ui_menu_pinentry_display(++G_gpg_vstate.ux_step); + break; + case 1: + // Store the New pin codes + gpg_io_insert_u8(length); + gpg_io_insert(pinentry, length); + ui_menu_pinentry_display(++G_gpg_vstate.ux_step); + break; + case 2: + // Compare the 2 pin codes (New + Confirm) + len1 = G_gpg_vstate.work.io_buffer[0]; + pin1 = G_gpg_vstate.work.io_buffer + 1; + if ((len1 != length) || (memcmp(pin1, pinentry, length) != 0)) { + gpg_io_discard(1); + ui_info(PIN_DIFFERS, EMPTY, ui_menu_pinentry_cb, false); + } else { + pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); + sw = gpg_pin_set(pin, G_gpg_vstate.work.io_buffer + 1, length); + gpg_io_discard(1); + gpg_io_insert_u16(sw); + gpg_io_do(IO_RETURN_AFTER_TX); + if (sw != SW_OK) { + ui_info("Process Error", EMPTY, ui_init, false); + } else { + snprintf(G_gpg_vstate.line, + sizeof(G_gpg_vstate.line), + "%s PIN", + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "ADMIN" : "USER"); + ui_info(G_gpg_vstate.line, "CHANGED", ui_init, true); + } + } + break; + default: + break; + } + break; + + default: + break; + } +} + +static void pinentry_cb(int token, uint8_t index) { + UNUSED(index); + if (token == TOKEN_PIN_ENTRY_BACK) { + gpg_io_discard(0); + gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); + gpg_io_do(IO_RETURN_AFTER_TX); + ui_init(); + } +} + +void ui_menu_pinentry_display(unsigned int value) { + uint8_t minLen; + char line[10]; + + // Init the page title + memset(G_gpg_vstate.line, 0, sizeof(G_gpg_vstate.line)); + if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { + switch (value) { + case 0: + // Default or initial case + snprintf(line, sizeof(line), "Current"); + break; + case 1: + snprintf(line, sizeof(line), "New"); + break; + case 2: + snprintf(line, sizeof(line), "Confirm"); + break; + default: + break; + } + G_gpg_vstate.ux_step = value; + } else { + snprintf(line, sizeof(line), "Enter"); + } + snprintf(G_gpg_vstate.menu, + sizeof(G_gpg_vstate.menu), + "%s %s PIN", + line, + (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); + + minLen = (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? GPG_MIN_PW3_LENGTH : GPG_MIN_PW1_LENGTH; + // Draw the keypad + nbgl_useCaseKeypad(G_gpg_vstate.menu, + minLen, + GPG_MAX_PW_LENGTH, + TOKEN_PIN_ENTRY_BACK, + false, + TUNE_TAP_CASUAL, + validate_pin, + pinentry_cb); +} + +static void ui_menu_pinentry_cb(void) { + unsigned int value = 0; + + if ((G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) && (G_gpg_vstate.ux_step == 2)) { + // Current step is Change Password with PINs differ + value = 1; + } + ui_menu_pinentry_display(value); +} +#endif /* ------------------------------ UIF CONFIRM UX ----------------------------- */ void uif_confirm_cb(bool confirm) { From c63b28aa21410f9785f8cc72546501d9704ea92d Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 1 Feb 2024 15:26:37 +0100 Subject: [PATCH 22/75] Update App icons --- glyphs/gpg_64px.gif | Bin 404 -> 348 bytes icons/gpg_14px.gif | Bin 83 -> 105 bytes icons/gpg_16px.gif | Bin 88 -> 112 bytes icons/gpg_32px.gif | Bin 181 -> 283 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/glyphs/gpg_64px.gif b/glyphs/gpg_64px.gif index 9947bd5c6f1a90f900224d6147fbaa917aa2848d..c7710efafad2413ccd88611891ae8d4282d535ec 100644 GIT binary patch literal 348 zcmV-i0i*s$Nk%w1VL$*t0Pq0-00030|NkNR1ONa4001HX3rTHZXJt)cXK7<=4QF9( zZDBnyE;KbXH8lV%00000Kmb4h00RDukEsgnzoML!y^E{f3wzIn)JJCGiI9()CJW*;C6amU{#M9YtST)8NZpa# zX8p{ph_j7+tsTuRTuuevtShcZ7wha~OWG~JK2#4wFWQVhr*B%!#lJ=OV10ULZxq3B u=jvoLr|=TPi15@AYnaYkMHh{r9;U$*X&=Z$B1ax7X>t(Cl#Uh@0028X2cCui literal 404 zcmV;F0c-w8Nk%w1VL$*t0Pp|+GBPsj>+2!;1ON&E001HX3rTHZXJt)cXK7<=4rgI) zZDBnyE;KbXH8eE5|#=jx?0D=sxkHHbW~cj0E?-cnb&3yR`86M2@oUN>G%Z(=uj!UiO4cAFYADZo)o*&KLs>rw~0Ku8NrUKSM zcvNcjn%2)>9&>9bIw|-@n88kP5<5P?_z@mJb_+pXG}%Y*tiBv=`&0a@1=QUCw| diff --git a/icons/gpg_16px.gif b/icons/gpg_16px.gif index 2e20e47717e3673dc7c36eb31ee08c912f2703e8..d81eef713ef82568fe9376ba2c6e28a7a59c7a1f 100644 GIT binary patch literal 112 zcmZ?wbhEHb6krfw_`t{j1poj4SNzEWVlgQG=l0A^Oi%SqOwUZt=1ot`%}um5&@(YL zF*Rk-0jU6KV_?#1;TJry{F_ux_oqUwLrN3!fN8--wU98@{ud gT~qG8J3Y0%Yg&NjJpGfWuD)HD=<&@il7Yb*0GcZz?*IS* diff --git a/icons/gpg_32px.gif b/icons/gpg_32px.gif index 368a4ce753662845ba2719733a65bb8e1058e8b9..32664b0140b4abf461742ace2bb7bb8b7ab43ba2 100644 GIT binary patch literal 283 zcmZ?wbhEHbRA5kG_{_-w1e%(fwzjr0F)?XrX)|ZeT)cSkp+kqRUAy-G|9_A)Dp35% z0v1sG&+VC;n4apJn4X!O&6}Q>o118Bpl4!gVrt5u15yIAfPrPT!AVb5P6cMiRsTg6 z_TFNgC&b3X8p<)Vp-ziQ?xRfFw@zlY*rw&ej4g{A4H&b}8k|#7s5+%1Y(MwwF4xl5 z_<#ztWfRW5*lck&to~NP*sH&XTh}b_-MDD?y!|PAm79(p RJGx+3VP^H|3=u&FYXDM>YGMEY literal 181 zcmV;m080NyNk%w1VITk?0Pp|+F)=ah?Cc@=1ON&E001HX3rTHZXJt)cXK7<=4rgI) zZDBnyE;KbXH8eE Date: Thu, 7 Dec 2023 14:57:18 +0100 Subject: [PATCH 23/75] Refactoring python cli tools --- .gitignore | 2 + pytools/backup.py | 110 +++ pytools/gpgapp/__init__.py | 0 pytools/gpgapp/gpgcard.py | 1268 +++++++++++++++++++++++++++++++++++ pytools/gpgapp/gpgcmd.py | 232 +++++++ pytools/gpgcard/__init__.py | 14 - pytools/gpgcard/backup.py | 25 - pytools/gpgcard/gpgcard.py | 849 ----------------------- pytools/gpgcard/gpgcli.py | 156 ----- pytools/gpgcard/restore.py | 25 - pytools/gpgcli.py | 397 +++++++++++ pytools/requirements.txt | 2 + pytools/setup.cfg | 28 + 13 files changed, 2039 insertions(+), 1069 deletions(-) create mode 100755 pytools/backup.py create mode 100644 pytools/gpgapp/__init__.py create mode 100644 pytools/gpgapp/gpgcard.py create mode 100644 pytools/gpgapp/gpgcmd.py delete mode 100644 pytools/gpgcard/__init__.py delete mode 100644 pytools/gpgcard/backup.py delete mode 100644 pytools/gpgcard/gpgcard.py delete mode 100644 pytools/gpgcard/gpgcli.py delete mode 100644 pytools/gpgcard/restore.py create mode 100755 pytools/gpgcli.py create mode 100644 pytools/requirements.txt create mode 100644 pytools/setup.cfg diff --git a/.gitignore b/.gitignore index 6850c09..c79a014 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ __pycache__/ *.egg-info/ .eggs/ .python-version +venv/ +gpg_backup # Doxygen doc/html diff --git a/pytools/backup.py b/pytools/backup.py new file mode 100755 index 0000000..bdf7268 --- /dev/null +++ b/pytools/backup.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#***************************************************************************** +# Ledger App OpenPGP. +# (c) 2024 Ledger SAS. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#***************************************************************************** + +import sys +from pathlib import Path +from argparse import ArgumentParser, RawTextHelpFormatter, Namespace +from gpgapp.gpgcard import GPGCard, PassWord, GPGCardExcpetion + +# =============================================================================== +# Parse command line options +# =============================================================================== +def get_argparser() -> Namespace: + """Parse the commandline options""" + + parser = ArgumentParser( + description="Backup/Restore OpenPGP App configuration", + epilog="Keys restore is only possible with SEED mode...", + formatter_class=RawTextHelpFormatter + ) + parser.add_argument("--reader", type=str, default="Ledger", + help="PCSC reader name (default is '%(default)s')") + + parser.add_argument("--slot", type=int, choices=range(1, 4), help="Select slot (1 to 3)") + + parser.add_argument("--pinpad", action="store_true", + help="PIN validation will be delegated to pinpad") + parser.add_argument("--adm-pin", metavar="PIN", + help="Admin PIN (if pinpad not used)", required="--pinpad" not in sys.argv) + parser.add_argument("--user-pin", metavar="PIN", + help="User PIN (if pinpad not used)", required="--pinpad" not in sys.argv) + + parser.add_argument("--restore", action="store_true", + help="Perform a Restore instead of Backup") + + parser.add_argument("--file", type=str, default="gpg_backup", + help="Backup/Restore file (default is '%(default)s')") + + return parser.parse_args() + + +# =============================================================================== +# MAIN +# =============================================================================== +def entrypoint() -> None: + """Main function""" + + # Arguments parsing + # ----------------- + args = get_argparser() + + # Arguments checking + # ------------------ + if not args.pinpad: + if not args.adm_pin or not args.user_pin: + print("If 'pinpad' is not use, 'userpin' and 'admpin' must be provided.") + sys.exit() + + if args.restore is False: + if Path(args.file).is_file(): + print(f"Provided backup file '{args.file}' already exist. Aborting!") + sys.exit() + + # Processing + # ---------- + try: + print(f"Connect to card '{args.reader}'...") + gpgcard: GPGCard = GPGCard() + gpgcard.connect(args.reader) + + if not gpgcard.verify_pin(PassWord.PW1, args.user_pin, args.pinpad) or \ + not gpgcard.verify_pin(PassWord.PW3, args.adm_pin, args.pinpad): + raise GPGCardExcpetion(0, "PIN not verified") + + if args.slot: + gpgcard.select_slot(args.slot - 1) + + gpgcard.get_all() + + if args.restore: + gpgcard.restore(args.file) + print(f"Configuration restored from file '{args.file}'.") + else: + gpgcard.backup(args.file) + print(f"Configuration saved in file '{args.file}'.") + + gpgcard.disconnect() + + except GPGCardExcpetion as err: + print(f"\n### Error {err.code}: {err.message}!\n") + + +if __name__ == "__main__": + + entrypoint() diff --git a/pytools/gpgapp/__init__.py b/pytools/gpgapp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pytools/gpgapp/gpgcard.py b/pytools/gpgapp/gpgcard.py new file mode 100644 index 0000000..0774288 --- /dev/null +++ b/pytools/gpgapp/gpgcard.py @@ -0,0 +1,1268 @@ +# -*- coding: utf-8 -*- +#***************************************************************************** +# Ledger App OpenPGP. +# (c) 2024 Ledger SAS. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#***************************************************************************** + +import binascii +from datetime import datetime, timezone +import pickle +from hashlib import sha1 +from typing import Optional, Tuple +from dataclasses import dataclass +from Crypto.PublicKey.RSA import construct + +# pylint: disable=import-error +from smartcard.System import readers # type: ignore +from smartcard.pcsc import PCSCReader # type: ignore +from smartcard import CardConnectionDecorator # type: ignore +# pylint: enable=import-error +from gpgapp.gpgcmd import DataObject, ErrorCodes, KeyTypes, PassWord, PubkeyAlgo # type: ignore +from gpgapp.gpgcmd import KEY_OPERATIONS, KEY_TEMPLATES, USER_SALUTATION # type: ignore + + +APDU_MAX_SIZE: int = 0xFE +APDU_CHAINING_MODE: int = 0x10 + + +class GPGCardExcpetion(Exception): + """Exception handler. + + Attributes: + code (int): Error code + message (str): Error message + """ + + def __init__(self, code, message): + self.code = code + self.message = message + super().__init__(self.message) + + +@dataclass +class KeyInfo: + """Key description information""" + + attribute: bytes = b"" + fingerprint: bytes = b"" + ca_fingerprint: bytes = b"" + cert: str = "" + date: datetime = datetime.min + uif: int = 0 + key: bytes = b"" + + def reset(self): + """Reset the data to the initial value""" + + self.attribute = b"" + self.fingerprint = b"" + self.ca_fingerprint = b"" + self.cert = "" + self.date = datetime.min + self.uif = 0 + self.key = b"" + + +@dataclass +class CardInfo: + """Card description information""" + + #token info + AID: str = "" + ext_length: bytes = b"" + ext_capabilities: bytes = b"" + histo_bytes: bytes = b"" + PW_status: bytes = b"" + hw_features: int = 0 + + #user info + name: str = "" + login: str = "" + url: str = "" + lang: str = "" + salutation: str = "" + + #keys info + rsa_pub_exp: int = 0 + digital_counter: int = 0 + + sig: KeyInfo = KeyInfo() + dec: KeyInfo = KeyInfo() + aut: KeyInfo = KeyInfo() + + #private info + private_01: bytes = b"" + private_02: bytes = b"" + private_03: bytes = b"" + private_04: bytes = b"" + + + def reset(self): + """Reset the data to the initial value""" + + #token info + self.AID = "" + self.ext_length = b"" + self.ext_capabilities = b"" + self.histo_bytes = b"" + self.PW_status = b"" + + #user info + self.name = "" + self.login = "" + self.url = "" + self.lang = "" + self.salutation = "" + + #keys info + self.rsa_pub_exp = 0 + self.digital_counter = 0 + + self.sig.reset() + self.dec.reset() + self.aut.reset() + + #private info + self.private_01 = b"" + self.private_02 = b"" + self.private_03 = b"" + + +class GPGCard() : + def __init__(self) -> None: + self.log: bool = False + self.connection: CardConnectionDecorator = None + self.slot_current: bytes = b"\x00" + self.slot_config: bytes = bytes(3) + self.data: CardInfo = CardInfo() + self.data.reset() + + def connect(self, device: str) -> None: + """Connect to the selected Reader + + Args: + device (str): Reader device name + """ + + allreaders: list = readers() + for elt in allreaders: + if str(elt).startswith(device): + reader: PCSCReader.PCSCReader = elt + self.connection = reader.createConnection() + self.connection.connect() + return + print("") + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, "No Reader detected!") + + + def disconnect(self): + """Connect from the selected Reader""" + + return self.connection.disconnect() + + + ############### LOG interface ############### + def log_apdu(self, log: bool) -> None: + """Control APDU debugging display + + Args: + log (bool): Activate or not the debug print + """ + + self.log = log + + def add_log(self, mode: str, data: bytes, sw: int = 0) -> None: + """Print APDU content + + Args: + mode (str): Indicate the Send or Recv information + data (bytes): APDU content + sw (int): Returned Status + """ + + if self.log: + sw_code = f" ({sw:04x})" if mode == "recv" else "" + print(f"{mode}:{sw_code} {''.join([f'{b:02x}' for b in data])}") + + + ############### CARD interface ############### + def select(self): + """Send SELECT APDU command""" + + apdu = binascii.unhexlify(b"00A4040006D27600012401") + return self._exchange(apdu) + + + def activate(self): + """Send ACTIVATE APDU command""" + + apdu = binascii.unhexlify(b"00440000") + return self._exchange(apdu) + + + def terminate(self): + """Send TERMINATE APDU command""" + + apdu = binascii.unhexlify(b"00E60000") + return self._exchange(apdu) + + + def get_log(self): + """Send GET_LOG APDU command""" + + apdu = binascii.unhexlify(b"00040000") + return self._exchange(apdu) + + + ############### API interfaces ############### + def get_all(self) -> None: + """Retrieve all Data Object values from the Card""" + + self.data.reset() + data: Optional[bytes] = b"" + b_data: bytes = b"" + s_data: str = "" + + self.slot_current = self._get_data(DataObject.CMD_SLOT_CUR) + self.slot_config = self._get_data(DataObject.CMD_SLOT_CFG) + + self.data.AID = self._get_data(DataObject.DO_AID).hex().upper() + self.data.login = self._get_data(DataObject.DO_LOGIN).decode("utf-8") + self.data.url = self._get_data(DataObject.DO_URL).decode("utf-8") + self.data.histo_bytes = self._get_data(DataObject.DO_HIST) + self.data.hw_features = int(self._get_data(DataObject.DO_GEN_FEATURES)[0]) + + data = self._get_data(DataObject.DO_CARDHOLDER_DATA) + tags = self._decode_tlv(data) + if DataObject.DO_CARD_NAME in tags: + self.data.name = tags[DataObject.DO_CARD_NAME].decode("utf-8") + if DataObject.DO_CARD_SALUTATION in tags: + s_data = tags[DataObject.DO_CARD_SALUTATION].decode("utf-8") + for k,v in USER_SALUTATION.items(): + if v == s_data: + self.data.salutation = k + break + + if DataObject.DO_CARD_LANG in tags: + self.data.lang = tags[DataObject.DO_CARD_LANG].decode("utf-8") + + data = self._get_data(DataObject.DO_APP_DATA) + tags = self._decode_tlv(data) + if DataObject.DO_EXT_LEN in tags: + self.data.ext_length = tags[DataObject.DO_EXT_LEN] + if DataObject.DO_DISCRET_DATA in tags: + b_data = tags[DataObject.DO_DISCRET_DATA] + tags = self._decode_tlv(b_data) + if DataObject.DO_EXT_CAP in tags: + self.data.ext_capabilities = tags[DataObject.DO_EXT_CAP] + if DataObject.DO_SIG_ATTR in tags: + self.data.sig.attribute = tags[DataObject.DO_SIG_ATTR] + if DataObject.DO_DEC_ATTR in tags: + self.data.dec.attribute = tags[DataObject.DO_DEC_ATTR] + if DataObject.DO_AUT_ATTR in tags: + self.data.aut.attribute = tags[DataObject.DO_AUT_ATTR] + if DataObject.DO_PW_STATUS in tags: + self.data.PW_status = tags[DataObject.DO_PW_STATUS] + + data = tags.get(DataObject.DO_FINGERPRINTS) + if data: + self.data.sig.fingerprint = data[0:20] + self.data.dec.fingerprint = data[20:40] + self.data.aut.fingerprint = data[40:60] + data = tags.get(DataObject.DO_CA_FINGERPRINTS) + if data: + self.data.sig.ca_fingerprint = data[0:20] + self.data.dec.ca_fingerprint = data[20:40] + self.data.aut.ca_fingerprint = data[40:60] + data = tags.get(DataObject.DO_KEY_DATES) + if data: + dates = tags[DataObject.DO_KEY_DATES] + self._conv_date_from_bytes(KeyTypes.KEY_SIG, dates[0:4]) + self._conv_date_from_bytes(KeyTypes.KEY_DEC, dates[4:8]) + self._conv_date_from_bytes(KeyTypes.KEY_AUT, dates[8:12]) + + data = self._get_data(DataObject.CMD_RSA_EXP) + self.data.rsa_pub_exp = self._get_int(data, 4) + self.data.aut.cert = self._get_data(DataObject.DO_CERT).decode("utf-8") + self.data.dec.cert = self._get_data(DataObject.DO_CERT, True).decode("utf-8") + self.data.sig.cert = self._get_data(DataObject.DO_CERT, True).decode("utf-8") + + self.data.sig.uif = int(self._get_data(DataObject.DO_UIF_SIG)[0]) + self.data.dec.uif = int(self._get_data(DataObject.DO_UIF_DEC)[0]) + self.data.aut.uif = int(self._get_data(DataObject.DO_UIF_AUT)[0]) + + data = self._get_data(DataObject.DO_SEC_TEMPL) + tags = self._decode_tlv(data) + if DataObject.DO_SIG_COUNT in tags: + b_data = tags[DataObject.DO_SIG_COUNT] + self.data.digital_counter = self._get_int(b_data, 3) + + if self.data.ext_capabilities[0] & 0x08: + self.data.private_01 = self._get_data(DataObject.DO_PRIVATE_01) + self.data.private_02 = self._get_data(DataObject.DO_PRIVATE_02) + self.data.private_03 = self._get_data(DataObject.DO_PRIVATE_03) + self.data.private_04 = self._get_data(DataObject.DO_PRIVATE_04) + + self.data.sig.key = self._get_data(DataObject.DO_SIG_KEY) + self.data.dec.key = self._get_data(DataObject.DO_DEC_KEY) + self.data.aut.key = self._get_data(DataObject.DO_AUT_KEY) + + + def backup(self, file_name: str) -> None: + """Backup data to backup file + + Args: + file_name (str): Backup filename + """ + + self.get_all() + with open(file_name, mode="w+b") as f: + pickle.dump( + (self.data.AID, self.data.PW_status, self.data.rsa_pub_exp, + self.data.private_01, self.data.private_02, + self.data.private_03, self.data.private_04, + self.data.name, self.data.login, self.data.salutation, self.data.url, self.data.lang, + self.data.sig.key, self.data.sig.uif, self.data.sig.attribute, self.data.sig.date, + self.data.sig.fingerprint, self.data.sig.ca_fingerprint, self.data.sig.cert, + self.data.dec.key, self.data.dec.uif, self.data.dec.attribute, self.data.dec.date, + self.data.dec.fingerprint, self.data.dec.ca_fingerprint, self.data.dec.cert, + self.data.aut.key, self.data.aut.uif, self.data.aut.attribute, self.data.aut.date, + self.data.aut.fingerprint, self.data.aut.ca_fingerprint, self.data.aut.cert), + f, 2) + + + def restore(self, file_name: str) -> None: + """Restore data from backup file + + Args: + file_name (str): Backup filename + """ + + with open(file_name, mode="r+b") as f: + (self.data.AID, self.data.PW_status, self.data.rsa_pub_exp, + self.data.private_01, self.data.private_02, self.data.private_03, self.data.private_04, + self.data.name, self.data.login, self.data.salutation, self.data.url, self.data.lang, + self.data.sig.key, self.data.sig.uif, self.data.sig.attribute, self.data.sig.date, + self.data.sig.fingerprint, self.data.sig.ca_fingerprint, self.data.sig.cert, + self.data.dec.key, self.data.dec.uif, self.data.dec.attribute, self.data.dec.date, + self.data.dec.fingerprint, self.data.dec.ca_fingerprint, self.data.dec.cert, + self.data.aut.key, self.data.aut.uif, self.data.aut.attribute, self.data.aut.date, + self.data.aut.fingerprint, self.data.aut.ca_fingerprint, self.data.aut.cert) = pickle.load(f) + + self._put_data(DataObject.DO_AID, bytes.fromhex(self.data.AID[20:28])) + self._put_data(DataObject.DO_PW_STATUS, self.data.PW_status) + + self._put_data(DataObject.DO_PRIVATE_01, self.data.private_01) + self._put_data(DataObject.DO_PRIVATE_02, self.data.private_02) + self._put_data(DataObject.DO_PRIVATE_03, self.data.private_03) + self._put_data(DataObject.DO_PRIVATE_04, self.data.private_04) + + self._put_data(DataObject.DO_CARD_NAME, self.data.name.encode("utf-8")) + self._put_data(DataObject.DO_LOGIN, self.data.login.encode("utf-8")) + self._put_data(DataObject.DO_CARD_LANG, self.data.lang.encode("utf-8")) + self._put_data(DataObject.DO_URL, self.data.url.encode("utf-8")) + self._put_data(DataObject.DO_CARD_SALUTATION, bytes.fromhex(USER_SALUTATION[self.data.salutation])) + + self._put_data(DataObject.DO_SIG_ATTR, self.data.sig.attribute) + self._put_data(DataObject.DO_DEC_ATTR, self.data.dec.attribute) + self._put_data(DataObject.DO_AUT_ATTR, self.data.aut.attribute) + + self._put_data(DataObject.DO_UIF_SIG, self.data.sig.uif.to_bytes(2, "little")) + self._put_data(DataObject.DO_UIF_DEC, self.data.dec.uif.to_bytes(2, "little")) + self._put_data(DataObject.DO_UIF_AUT, self.data.aut.uif.to_bytes(2, "little")) + + self._put_data(DataObject.DO_SIG_COUNT, self.data.digital_counter.to_bytes(4, "big")) + self._put_data(DataObject.CMD_RSA_EXP, self.data.rsa_pub_exp.to_bytes(4, "big")) + + + def export_pub_key(self, pubkey: dict, file_name: str) -> None: + """Export a Public to file + + Args: + pubkey (dict): Public key parameters + file_name (str): Backup filename + """ + + modulus = bytearray.fromhex(pubkey["Modulus"]) + exponent = bytearray.fromhex(pubkey["Pub Exp"][2:]) + key = construct((int.from_bytes(modulus, 'big'), int.from_bytes(exponent, 'big'))) + public_key = key.publickey().export_key() + with open(file_name, mode="wb") as f: + f.write(public_key) + + + def seed_key(self) -> None: + """Regenerate keys, based on seed mode""" + + apdu = binascii.unhexlify(b"0047800102B600") + self._exchange(apdu) + apdu = binascii.unhexlify(b"0047800102B800") + self._exchange(apdu) + apdu = binascii.unhexlify(b"0047800102A400") + self._exchange(apdu) + + + ############### Information decoding ############### + def decode_AID(self) -> dict: + """Decode Application IDentity information""" + + return { + "AID": f"{self.data.AID}", + "RID": f"{self.data.AID[0:10]}", + "Application": f"{self.data.AID[10:12]}", + "Version": f"{int(self.data.AID[12:14]):d}.{int(self.data.AID[14:16]):d}", + "Manufacturer": f"{self.data.AID[16:20]}", + "Serial": f"{self.data.AID[20:28]}" + } + + def decode_histo(self) -> dict: + """Decode Historical Bytes information""" + + return { + "historical bytes": self.data.histo_bytes.hex() + } + + def decode_extlength(self) -> dict: + """Decode Extended Length information""" + + d = { + "Command": "N/A", + "Response": "N/A", + } + + if self.data.ext_length: + d["Command"] = f"{self._get_int(self.data.ext_length, offset=2):d}" + d["Response"] = f"{self._get_int(self.data.ext_length, offset=6):d}" + return d + + def decode_ext_capabilities(self) -> dict: + """Decode Extended Capabilities information""" + + d = {} + b1 = self.data.ext_capabilities[0] + if b1 & 0x80: + if self.data.ext_capabilities[1] == 1: + d["Secure Messaging"] = "✓: AES 128 bits" + elif self.data.ext_capabilities[1] == 2: + d["Secure Messaging"] = "✓: AES 256 bits" + else: + d["Secure Messaging"] = "✓: ?? bits" + else: + d["Secure Messaging"] = "✗" + + if b1 & 0x40: + max_val = self._get_int(self.data.ext_capabilities, offset=2) + d["Get Challenge"] = f"✓ (Max length: {max_val:d})" + else: + d["Get Challenge"] = "✗" + + if b1 & 0x20: + d["Key import"] = "✓" + else: + d["Key import"] = "✗" + + if b1 & 0x10: + d["PW status"] = "Changeable" + else: + d["PW status"] = "Fixed" + + if b1 & 0x08: + d["Private DOs"] = "✓" + else: + d["Private DOs"] = "✗" + + if b1 & 0x04: + d["Algo attributes"] = "Changeable" + else: + d["Algo attributes"] = "Fixed" + + if b1 & 0x02: + d["PSO:DEC AES"] = "✓" + else: + d["PSO:DEC AES"] = "✗" + + if b1 & 0x01: + d["Key Derived Format"] = "✓" + else: + d["Key Derived Format"] = "✗" + + max_val = self._get_int(self.data.ext_capabilities, offset=4) + d["Max Cert len"] = f"{max_val:d}" + max_val = self._get_int(self.data.ext_capabilities, offset=6) + d["Max Special DO"] = f"{max_val:d}" + + if self.data.ext_capabilities[8]: + d["PIN 2 format"] = "✓" + else: + d["PIN 2 format"] = "✗" + if self.data.ext_capabilities[9]: + d["MSE"] = "✓" + else: + d["MSE"] = "✗" + return d + + def decode_pws(self) -> dict: + """Decode Password information""" + + if self.data.PW_status[0] == 0: + validity = "Only 1 PSO:CDS" + elif self.data.PW_status[0] == 1: + validity = "Several PSO:CDS" + else: + validity = f"unknown ({self.data.PW_status[0]:d})" + + cfg = { + "PW1": {"format": 1, "counter": 4}, + "Reset Counter": {"format": 2, "counter": 5}, + "PW3": {"format": 3, "counter": 6}, + } + + d = {} + for name, pw in cfg.items(): + if self.data.PW_status[pw["format"]] & 0x80: + fmt = "Format-2" + else: + fmt = "UTF-8" + pwlen = self.data.PW_status[pw["format"]] & 0x7f + counter = self.data.PW_status[pw['counter']] + d[name] = f"{fmt} ({pwlen:d} bytes), Error Counter={counter:d}" + if name == "PW1": + d[name] += f", Validity={validity}" + return d + + def decode_hardware(self) -> dict: + """Decode Hardware features information""" + + d = {} + d["Display"] = "✓" if self.data.hw_features & 0x80 else "✗" + d["Biometric sensor"] = "✓" if self.data.hw_features & 0x40 else "✗" + d["Button/Keypad"] = "✓" if self.data.hw_features & 0x20 else "✗" + d["LED"] = "✓" if self.data.hw_features & 0x10 else "✗" + d["Loudspeaker"] = "✓" if self.data.hw_features & 0x08 else "✗" + d["Microphone"] = "✓" if self.data.hw_features & 0x04 else "✗" + d["Touchscreen"] = "✓" if self.data.hw_features & 0x02 else "✗" + d["Battery"] = "✓" if self.data.hw_features & 0x01 else "✗" + return d + + + ############### SLOT interface ############### + def select_slot(self, slot: int) -> None: + """Select the key slot + + Args: + slot (int): slot id to select (0 to 3) + """ + + self.slot_current = slot.to_bytes(1, "big") + self._put_data(DataObject.CMD_SLOT_CUR, self.slot_current) + + def decode_slot(self) -> dict: + """Decode Slots information + + Returns: + Slots configuration dictionary + """ + + d = {} + d["Number of Slots"] = str(self.slot_config[0]) + d["Default Slot"] = str(self.slot_config[1] + 1) + d["Selection by APDU"] = "✓" if self.slot_config[2] & 0x01 else "✗" + d["Selection by screen"] = "✓" if self.slot_config[2] & 0x02 else "✗" + d["Current"] = str(int.from_bytes(self.slot_current, "big") + 1) + return d + + + ############### USER interface ############### + def set_serial(self, serial: str) -> None: + """Set the Card serial number + + Args: + serial (str): New serial number + """ + + if not self.data.AID: + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, "Invalid AID!") + + self.data.AID = self.data.AID[0:20] + serial + self._put_data(DataObject.DO_AID, bytes.fromhex(serial)) + + + def set_name(self, name: str) -> None: + """Set the Card User name + + Args: + name (str): New name + """ + + self.data.name = name + self._put_data(DataObject.DO_CARD_NAME, name.encode("utf-8")) + + def get_name(self) -> str: + """Get the Card User name""" + + return self.data.name + + + def set_login(self, login: str) -> None: + """Set the Card User login + + Args: + login (str): New login + """ + + self.data.login = login + self._put_data(DataObject.DO_LOGIN, login.encode("utf-8")) + + def get_login(self) -> str: + """Get the Card User login""" + + return self.data.login + + + def set_url(self, url: str) -> None: + """Set the Card User URL + + Args: + url (str): New URL + """ + + self.data.url = url + self._put_data(DataObject.DO_URL, url.encode("utf-8")) + + def get_url(self) -> str: + """Get the Card User URL""" + + return self.data.url + + + def set_lang(self, lang: str) -> None: + """Set the Card User language + + Args: + lang (str): New language + """ + + self.data.lang = lang + self._put_data(DataObject.DO_CARD_LANG, lang.encode("utf-8")) + + def get_lang(self) -> str: + """Get the Card User language""" + + return self.data.lang + + + def set_salutation(self, salutation: str) -> None: + """Set the Card User salutation + + Args: + salutation (str): New salutation + """ + + try: + salutation_str = USER_SALUTATION[salutation].encode("utf-8") + except KeyError as err: + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, + f"Invalid salutation value ({salutation})!") from err + + self.data.salutation = salutation + self._put_data(DataObject.DO_CARD_SALUTATION, salutation_str) + + def get_salutation(self) -> str: + """Get the Card User salutation""" + + return self.data.salutation + + + ############### PASSWORD interface ############### + def verify_pin(self, pw: PassWord, value: str, pinpad: bool = False) -> bool: + """Verify the password + + Args: + pw (PassWord): Password type, corresponding to User, Admin + value (str) : Password value + pinpad (bool): Indicate to use pinpad + + Return: + Success / KO boolean + """ + + value = value if value else "" + if pinpad: + apdu = bytes.fromhex(f"EF2000{pw:02x}00") + else: + apdu = bytes.fromhex(f"002000{pw:02x}{len(value):02x}") + value.encode("utf-8") + _, sw = self._exchange(apdu) + return sw == ErrorCodes.ERR_SUCCESS + + + def change_pin(self, pw: PassWord, cur_value: str, new_value: str) -> bool: + """Update the password + + Args: + pw (PassWord): Password type, corresponding to User, Admin + cur_value (str): Current password value + new_value (str): New password value + + Return: + Success / KO boolean + """ + + lc = len(cur_value) + len(new_value) + apdu = bytes.fromhex(f"002400{pw:02x}{lc:02x}") + \ + cur_value.encode("utf-8") + \ + new_value.encode("utf-8") + _, sw = self._exchange(apdu) + return sw == ErrorCodes.ERR_SUCCESS + + + def set_RC(self, value: str) -> bool: + """Set the User Password Resetting Code + + Args: + value (str): Resetting Code value + + Return: + Success / KO boolean + """ + + b_value = value.encode("utf-8") + return self._put_data(DataObject.DO_RESET_CODE, b_value) == ErrorCodes.ERR_SUCCESS + + + def reset_PW1(self, RC: str, value: str) -> bool: + """Reset the User Password with Resetting Code + + Args: + RC (str): Resetting Code value + value (str): User Password value + + Return: + Success / KO boolean + """ + + p1 = 2 if len(RC) == 0 else 0 + lc = len(RC) + len(value) + apdu = bytes.fromhex(f"002C{p1:02x}81{lc:02x}") + RC.encode("utf-8") + value.encode("utf-8") + _, sw = self._exchange(apdu) + return sw == ErrorCodes.ERR_SUCCESS + + + ############### KEYS interface ############### + def decode_key_uif(self, key: str) -> str: + """Decode the selected key User Interaction Flag + + Args: + key (str): Key type (SIG, DC, AUT) + + Return: + UIF status for the selected key + """ + + uif = self._get_key_object(key).uif + if uif == 0: + return "✗" + if uif == 1: + return "✓" + if uif == 2: + return "✓ (Permanent)" + return "" + + def get_key_date(self, key: str) -> str: + """Get key Creation Date + + Args: + key (str): Key type (SIG, DC, AUT) + + Return: + Key Creation Date + """ + + return str(self._get_key_object(key).date) + + def get_sig_count(self) -> int: + """Get Digital Signatures Count + + Return: + Number of Digital Signatures Count + """ + + return self.data.digital_counter + + def get_rsa_pub_exp(self) -> int: + """Get RSA Public Exponent + + Return: + RSA Public Exponent + """ + + return self.data.rsa_pub_exp + + def get_key_cert(self, key: str) -> str: + """Get key fingerprint + + Args: + key (str): Key type (SIG, DC, AUT) + + Return: + Key Fingerprint + """ + + return self._get_key_object(key).cert + + def set_template(self, key: str, template: str) -> None: + """Set key Template + + Args: + key (str): Key type (SIG, DC, AUT) + template (str): Key template + """ + + if template not in KEY_TEMPLATES: + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, f"Invalid template: {template}") + + data = binascii.unhexlify(KEY_TEMPLATES[template]) + if key == KeyTypes.KEY_SIG: + self._put_data(DataObject.DO_SIG_ATTR, data) + elif key == KeyTypes.KEY_DEC: + self._put_data(DataObject.DO_DEC_ATTR, data) + elif key == KeyTypes.KEY_AUT: + self._put_data(DataObject.DO_AUT_ATTR, data) + + def set_key_fingerprint(self, key: str, data: bytes) -> None: + """Set key fingerprint + + Args: + key (str): Key type (SIG, DC, AUT) + data (bytes): Fingerprint + """ + + if key == KeyTypes.KEY_SIG: + self.data.sig.fingerprint = data + self._put_data(DataObject.DO_FINGERPRINT_WR_SIG, data) + elif key == KeyTypes.KEY_AUT: + self.data.aut.fingerprint = data + self._put_data(DataObject.DO_FINGERPRINT_WR_AUT, data) + elif key == KeyTypes.KEY_DEC: + self.data.dec.fingerprint = data + self._put_data(DataObject.DO_FINGERPRINT_WR_DEC, data) + + def get_key_fingerprint(self, key: str) -> str: + """Get key fingerprint + + Args: + key (str): Key type (SIG, DC, AUT) + + Return: + Key Fingerprint + """ + + fingerprint = self._get_key_object(key).fingerprint + sdata = binascii.hexlify(fingerprint).decode("ascii") + return sdata if sdata != "0"*40 else "N/A" + + def get_key_CA_fingerprint(self, key: str) -> str: + """Get key CA fingerprint + + Args: + ey (str): Key type (SIG, DC, AUT) + + Return: + Key CA Fingerprint + """ + + fingerprint = self._get_key_object(key).ca_fingerprint + sdata = binascii.hexlify(fingerprint).decode("ascii") + return sdata if sdata != "0"*40 else "N/A" + + def decode_attributes(self, key: str) -> str: + """Decode key attribute + + Args: + key (str): Key type (SIG, DC, AUT) + + Return: + String with attributes and size + """ + + attributes = self._get_key_object(key).attribute + if not attributes or len(attributes) == 0: + return "" + + if attributes[0] not in set(iter(PubkeyAlgo)): + return "" + + if attributes[0] == PubkeyAlgo.RSA: + if attributes[5] == 0: + fmt = "standard (e, p, q)" + elif attributes[5] == 1: + fmt = "standard with modulus (n)" + elif attributes[5] == 2: + fmt = "crt (Chinese Remainder Theorem)" + elif attributes[5] == 3: + fmt = "crt (Chinese Remainder Theorem) with modulus (n)" + ret = f"RSA-{self._get_int(attributes, offset=1)}" + ret += f", Format: {fmt}" + ret += f", Exponent size: {self._get_int(attributes, offset=3)}" + return ret + + if attributes[0] == PubkeyAlgo.ECDSA: + ret = "ECDSA" + if attributes[0] == PubkeyAlgo.ECDH: + ret = "ECDH" + if attributes[0] == PubkeyAlgo.EDDSA: + ret = "EDDSA" + else: + ret = "" + return ret + + + def decode_key(self, key: str) -> dict: + """Get key parameters + + Args: + key (str): Key type (SIG, DC, AUT) + + Return: + Key information dictionary + """ + + d = {} + offset: int = 0 + key_data = self._get_key_object(key).key + + d["OS Target ID"] = f"0x{int.from_bytes(key_data[offset:offset + 4], 'big'):04x}" + offset += 4 + d["API Level"] = str(int.from_bytes(key_data[offset:offset + 4], 'big')) + offset += 4 + size = int.from_bytes(key_data[offset:offset + 4], 'big') + # Should be Public key here from doc, but only Public Exp from the code + d["Public exp size"] = str(size) + offset += 4 + d["Public exp"] = f"0x{int.from_bytes(key_data[offset:offset + 4], 'big'):06x}" + offset += size + size = int.from_bytes(key_data[offset:offset + 4], 'big') + d["Private key size"] = str(size) + # offset += 4 + # d["Private key encrypted"] = key_data[offset:offset + size].hex() + return d + + def asymmetric_key(self, key: str, action: str) -> dict: + """Asymmetric key operation + + Args: + key (str): Key type (SIG, DC, AUT) + action (str): Generate or Read + + Return: + Public key information: + RSA (Encrypt or Sign): { + "id": (int) 1, + "Modulus": (int) + "Pub Exp" (int) + } + ECDSA for PSO:CDS and INT-AUT: { + "id": (int) 19, + "OID": (bytes) + } + ECDH for PSO:DEC { + "id": (int) 18, + "OID": (bytes) + } + """ + + if action not in KEY_OPERATIONS: + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, f"Invalid Key operation: {action}") + + op = KEY_OPERATIONS[action] + attributes = None + if key == KeyTypes.KEY_SIG: + attributes = self.data.sig.attribute + b_key = DataObject.DO_SIG_KEY + elif key == KeyTypes.KEY_DEC: + attributes = self.data.dec.attribute + b_key = DataObject.DO_DEC_KEY + elif key == KeyTypes.KEY_AUT: + attributes = self.data.aut.attribute + b_key = DataObject.DO_AUT_KEY + if not attributes or len(attributes) == 0: + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, "Invalid key attribute!") + + if attributes[0] not in set(iter(PubkeyAlgo)): + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, "Invalid key ID in attribute!") + + d = {} + tags = self._asym_key_pair(op, b_key) + + if attributes[0] == PubkeyAlgo.RSA: + d["ID"] = f"RSA-{self._get_int(attributes, offset=1)}" + d["Modulus"] = tags[0x81].hex() + d["Pub Exp"] = f"0x{tags[0x82].hex()}" + else: + if attributes[0] == PubkeyAlgo.ECDSA: + d["ID"] = "ECDSA" + if attributes[0] == PubkeyAlgo.ECDH: + d["ID"] = "ECDH" + if attributes[0] == PubkeyAlgo.EDDSA: + d["ID"] = "EDDSA" + d["oid"] = tags[0x86].hex() + + if attributes[0] == PubkeyAlgo.RSA: + if action == "Generate": + # Set the generation date + self._set_key_date_now(key) + + # Get the generation date + date = self.get_key_date(key) + dt = datetime.strptime(date, "%Y-%m-%d %H:%M:%S").replace(tzinfo=timezone.utc) + kdate = int(dt.timestamp()) + d["Creation date"] = date + + # Compute the fingerprint https://www.rfc-editor.org/rfc/rfc4880#section-12.2 + modulus: bytes = bytes.fromhex(d["Modulus"]) + ksize: int = self._get_int(attributes, offset=1) + size: int = int(ksize / 8) + 0x0D # len(header + tag + pub exp) + + header: bytes = bytes.fromhex(f"99{size:04x}04{kdate:08x}01{ksize:04x}") + footer: bytes = bytes.fromhex("0011010001") + data: bytes = header + modulus + footer + + _hash = sha1() + _hash.update(data) + result: bytes = _hash.digest() + d["Fingerprint"] = result.hex() + if action == "Generate": + self.set_key_fingerprint(key, result) + + return d + + + # =============================================================== + # Internal functions + # =============================================================== + + def _get_key_object(self, key: str) -> KeyInfo: + """Get KeyInfo data class object + + Args: + key (str): Key type (SIG, DC, AUT) + + Return: + KeyInfo Object + """ + + if key == KeyTypes.KEY_SIG: + return self.data.sig + if key == KeyTypes.KEY_AUT: + return self.data.aut + if key == KeyTypes.KEY_DEC: + return self.data.dec + + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, f"Invalid key type {key}!") + + + def _get_data(self, tag: int, bnext: bool = False) -> bytes: + """Send APDU command to GET a specific Data Object + + Args: + tag (int): Data Object tag + + Return: + Data Object bytes + """ + + ins = 0xCC if bnext else 0xCA + apdu = bytes.fromhex(f"00{ins:02x}{tag:04x}00") + resp, _ = self._exchange(apdu) + return resp + + + def _put_data(self, tag: int, data: bytes) -> int: + """Send APDU command to PUT a Data Object value + + Args: + tag (int): Data Object tag + data (bytes): Data Object bytes + + Return: + Status Word + """ + + apdu = bytes.fromhex(f"00DA{tag:04x}") + _, sw = self._exchange(apdu, data) + return sw + + + def _asym_key_pair(self, op: int, key: int) -> dict: + """Asymmetric key pair operation + + Args: + op (int): Operation to execute + key (int): Key type + + Return: + Public key decoded data bytes + """ + + apdu = bytes.fromhex(f"0047{op:02x}0002{key:02x}00") + resp, sw = self._exchange(apdu) + if sw != ErrorCodes.ERR_SUCCESS: + raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, "Key operation error!") + tags = self._decode_tlv(resp) + return self._decode_tlv(tags[DataObject.DO_PUB_KEY]) + + + def _conv_date_from_bytes(self, key: str, data: bytes) -> None: + """Convert date from bytes to datetime local dataclass + + Args: + key (str): Key type (SIG, DC, AUT) + data (bytes): Date value + """ + + idate = int.from_bytes(data, "big") + self._get_key_object(key).date = datetime.utcfromtimestamp(idate) + + + def _set_key_date_now(self, key: str) -> None: + """Set Key creation date + + Args: + key (str): Key type (SIG, DC, AUT) + """ + + dt = datetime.utcnow().replace(microsecond=0) + bdate = int(dt.timestamp()).to_bytes(4, "big") + if key == KeyTypes.KEY_SIG: + self.data.sig.date = dt + tag = DataObject.DO_DATES_WR_SIG + elif key == KeyTypes.KEY_AUT: + self.data.aut.date = dt + tag = DataObject.DO_DATES_WR_AUT + elif key == KeyTypes.KEY_DEC: + self.data.dec.date = dt + tag = DataObject.DO_DATES_WR_DEC + self._put_data(tag, bdate) + + + def _decode_tlv(self, tlv: bytes) -> dict: + """Decode TLV fields + + Args: + tlv (bytes): Input data bytes to parse + + Returns: + dict {t: v, t:v, ...} + """ + + tags = {} + while len(tlv): + o = 0 + l = 0 + if (tlv[0] & 0x1F) == 0x1F: + t = self._get_int(tlv) + o = 2 + else: + t = tlv[0] + o = 1 + l = tlv[o] + if l & 0x80 : + if (l & 0x7f) == 1: + l = tlv[o + 1] + o += 2 + if (l & 0x7f) == 2: + l = self._get_int(tlv, offset=o + 1) + o += 3 + else: + o += 1 + v = tlv[o:o + l] + tags[t] = v + tlv = tlv[o + l:] + return tags + + + def _transmit(self, data: bytes, long_resp: bool = False) -> Tuple[bytes, int, int]: + """Transmit data, and get the response + + Args: + data (bytes): APDU to transmit + long_resp (bool): Indicate if long response is expected + + Return: + Response data bytes and the Status Word + """ + + self.add_log("send", data) + resp, sw1, sw2 = self.connection.transmit(list(data)) + sw = (sw1 << 8) | sw2 + self.add_log("recv", resp, sw) + if sw != ErrorCodes.ERR_SUCCESS and not long_resp: + raise GPGCardExcpetion(sw, "") + return resp, sw1, sw2 + + + def _exchange(self, apdu: bytes, data: bytes = b"") -> Tuple[bytes, int]: + """Exchange APDU, and get the response + + Args: + apdu (bytes): APDU content + data (bytes): Data to transmit + + Return: + Response data bytes and the Status Word + """ + + #send + apdux: bytes = b"" + resp: bytes = b"" + if len(data) > 0: + if len(data) > APDU_MAX_SIZE: + cla: bytes = (apdu[0] | APDU_CHAINING_MODE).to_bytes(1, "big") + m_apdu: bytes = cla + apdu[1:5] + APDU_MAX_SIZE.to_bytes(1, "big") + while len(data) > APDU_MAX_SIZE: + apdux = m_apdu + data[0:APDU_MAX_SIZE] + self._transmit(apdux) + data = data[APDU_MAX_SIZE:] + apdu += len(data).to_bytes(1, "big") + data + + resp, sw1, sw2 = self._transmit(apdu, True) + + #receive + while sw1 == ErrorCodes.ERR_SW1_VALID: + apdux = bytes.fromhex(f"00c00000{sw2:02x}") + resp2, sw1, sw2 = self._transmit(apdux, True) + resp += resp2 + sw = (sw1 << 8) | sw2 + return bytes(resp), sw + + + def _get_int(self, buffer: bytes, size: int = 2, offset: int = 0) -> int: + """Exchange APDU, and get the response + + Args: + buffer (bytes): data content + offset (int): Offset of MSB + + Return: + Converted int + """ + + if size == 2: + return (buffer[offset] << 8) | buffer[offset + 1] + if size == 3: + return (buffer[offset] << 16) | (buffer[offset + 1] << 8) | buffer[offset + 2] + if size == 4: + return (buffer[offset] << 24) | (buffer[offset + 1] << 16) | \ + (buffer[offset + 2] << 8) | buffer[offset + 3] + return 0 diff --git a/pytools/gpgapp/gpgcmd.py b/pytools/gpgapp/gpgcmd.py new file mode 100644 index 0000000..795d96f --- /dev/null +++ b/pytools/gpgapp/gpgcmd.py @@ -0,0 +1,232 @@ +# -*- coding: utf-8 -*- +#***************************************************************************** +# Ledger App OpenPGP. +# (c) 2024 Ledger SAS. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#***************************************************************************** + +from enum import Enum, IntEnum + + +KEY_TEMPLATES = { + "rsa2048" : "010800002001", + "rsa3072" : "010C00002001", + "rsa4096" : "011000002001", + "nistp256": "132A8648CE3D030107", + "ed25519" : "162B06010401DA470F01", + "cv25519" : "122B060104019755010501" +} + + +KEY_OPERATIONS = { + "Export": 0x00, # Read and export a Public Key + "Generate": 0x80, # Generate a new Asymmetric key pair + "Read": 0x81, # Read Public Key +} + + +USER_SALUTATION = { + "Male": "1", + "Female": "2", +} + + +class KeyTypes(str, Enum): + """Key types definition + OpenPGP Application manage four keys for cryptographic operation (PSO) plus two + for secure channel. + The first four keys are defined as follow: + - One asymmetric signature private key (RSA or EC), named 'sig' + - One asymmetric decryption private key (RSA or EC), named 'dec' + - One asymmetric authentication private key (RSA or EC), named 'aut' + - One symmetric decryption private key (AES), named 'sym0' + + The 3 first asymmetric keys can be either randomly generated on-card or + explicitly put from outside. + The fourth is put from outside. + """ + + # Asymmetric Signature Private Key (RSA or EC) + KEY_SIG = "SIG" + # Asymmetric Decryption Private Key (RSA or EC) + KEY_DEC = "DEC" + # Asymmetric Authentication Private Key (RSA or EC) + KEY_AUT = "AUT" + # Symmetric Decryption Key (AES) + + +class PubkeyAlgo(IntEnum): + """ Public-Key Algorithm IDs definition """ + # https://www.rfc-editor.org/rfc/rfc4880#section-9.1 + + # RSA (Encrypt or Sign) + RSA = 1 + # Elliptic Curve Diffie-Hellman + ECDH = 18 + # Elliptic Curve Digital Signature Algorithm + ECDSA = 19 + # Edwards-curve Digital Signature Algorithm + EDDSA = 22 + + +class PassWord(IntEnum): + """ Password type definition """ + + # USER_PIN for only one PSO:CDS command + PW1 = 0x81 + # USER_PIN for several attempts + PW2 = 0x82 + # Admin PIN + PW3 = 0x83 + + +class ErrorCodes: + """ Error codes definition """ + + err_list = { + 0x6285: "Selected file in termination state", + 0x6581: "Memory failure", + 0x6600: "Security-related issues (reserved for UIF in this application)", + 0x6700: "Wrong length (Lc and/or Le)", + 0x6881: "Logical channel not supported", + 0x6882: "Secure messaging not supported", + 0x6883: "Last command of the chain expected", + 0x6884: "Command chaining not supported", + 0x6982: "Security status not satisfied", + 0x6983: "Authentication method blocked", + 0x6984: "Data Invalid", + 0x6985: "Condition of use not satisfied", + 0x6986: "Command not allowed", + 0x6987: "Expected SM data objects missing", + 0x6988: "SM data objects incorrect", + 0x6A80: "Incorrect parameters in the data field", + 0x6A82: "File or application not found", + 0x6A86: "Incorrect P1-P2", + 0x6A88: "Referenced data not found", + 0x6B00: "Wrong parameters P1-P2", + 0x6D00: "Instruction (INS) not supported", + 0x6E00: "Class (CLA) not supported", + 0x6F00: "Unknown Error", + 0x9000: "Success", + } + ERR_SUCCESS = 0x9000 + ERR_SW1_VALID = 0x61 + ERR_INTERNAL = 0 + + +class DataObject(IntEnum): + """ Data Objects definition """ + + # [Read/Write] Slot config + CMD_SLOT_CFG = 0x01F1 + # [Read/Write] Slot selection + CMD_SLOT_CUR = 0x01F2 + # [Read/Write] RSA Exponent + CMD_RSA_EXP = 0x01F8 + + # [Read] Full Application identifier (AID), ISO 7816-4 + DO_AID = 0x4F + # [Read/Write] Login data + DO_LOGIN = 0x5E + # [Read/Write] Uniform resource locator (URL, as defined in RFC 1738) + DO_URL = 0x5F50 + # [Read] Historical bytes, Card service data and Card capabilities + DO_HIST = 0x5F52 + + # [Read/Write] Optional DO for private use + DO_PRIVATE_01 = 0x0101 + DO_PRIVATE_02 = 0x0102 + DO_PRIVATE_03 = 0x0103 + DO_PRIVATE_04 = 0x0104 + + # [Read] Cardholder Related Data + DO_CARDHOLDER_DATA = 0x65 + # [Read/Write] Name according to ISO/IEC 7501-1) + DO_CARD_NAME = 0x5B + # [Read/Write] Language preferences (according to ISO 639) + DO_CARD_LANG = 0x5F2D + # [Read/Write] Salutation (according to ISO 5218) + DO_CARD_SALUTATION = 0x5F35 + + # [Read/Write] Digital signature + DO_SIG_KEY = 0xB6 + # [Read/Write] Confidentiality + DO_DEC_KEY = 0xB8 + # [Read/Write] Authentication + DO_AUT_KEY = 0xA4 + + # [Read] Application Related Data + DO_APP_DATA = 0x6E + # [Read] Extended length information (ISO 7816-4) + DO_EXT_LEN = 0x7F66 + # [Read] Discretionary data objects + DO_DISCRET_DATA = 0x73 + + # [Read] Extended capabilities Flag list + DO_EXT_CAP = 0xC0 + # [Read/Write] Algorithm attributes SIGnature + DO_SIG_ATTR = 0xC1 + # [Read/Write] Algorithm attributes DECryption + DO_DEC_ATTR = 0xC2 + # [Read/Write] Algorithm attributes AUThentication + DO_AUT_ATTR = 0xC3 + # [Read/Write] PW status Bytes + DO_PW_STATUS = 0xC4 + # [Read] Fingerprints (binary, 20 bytes (dec.) each for SIG, DEC, AUT) + DO_FINGERPRINTS = 0xC5 + # [Read] List of CA-Fingerprints (binary, 20 bytes (dec.) each for SIG, DEC, AUT) + DO_CA_FINGERPRINTS = 0xC6 + # [Write] Fingerprint for SIGnature key, format according to RFC 4880 + DO_FINGERPRINT_WR_SIG = 0xC7 + # [Write] Fingerprint for DECryption key, format according to RFC 4880 + DO_FINGERPRINT_WR_DEC = 0xC8 + # [Write] Fingerprint for AUThentication key, format according to RFC 4880 + DO_FINGERPRINT_WR_AUT = 0xC9 + # [Write] CA-Fingerprint for SIGnature key + DO_CA_FINGERPRINT_WR_SIG = 0xCA + # [Write] CA-Fingerprint for DECryption key + DO_CA_FINGERPRINT_WR_DEC = 0xCB + # [Write] CA-Fingerprint for AUThentication key + DO_CA_FINGERPRINT_WR_AUT = 0xCC + # [Read] List of generation dates. 4 bytes, Big Endian each for SIG, DEC, AUT + DO_KEY_DATES = 0xCD + + # [Write] Generation date/time of SIGnature key (Big Endian, according to RFC 4880) + DO_DATES_WR_SIG = 0xCE + # [Write] Generation date/time of DECryption key (Big Endian, according to RFC 4880) + DO_DATES_WR_DEC = 0xCF + # [Write] Generation date/time of AUThentication key (Big Endian, according to RFC 4880) + DO_DATES_WR_AUT = 0xD0 + + # [Read] Security support template + DO_SEC_TEMPL = 0x7A + # [Read] Digital signature counter + DO_SIG_COUNT = 0x93 + + # [Write] Resetting Code + DO_RESET_CODE = 0xD3 + # [Read/Write] User Interaction Flag (UIF) for PSO:CDS + DO_UIF_SIG = 0xD6 + # [Read/Write] User Interaction Flag (UIF) for PSO:DEC + DO_UIF_DEC = 0xD7 + # [Read/Write] User Interaction Flag (UIF) for PSO:AUT + DO_UIF_AUT = 0xD8 + # [Read/Write] Cardholder certificate (each for AUT, DEC and SIG) + DO_CERT = 0x7F21 + + # [Read/Write] Asymmetric Key Pair + DO_PUB_KEY = 0x7F49 + + # [Read] General Feature management + DO_GEN_FEATURES = 0x7F74 diff --git a/pytools/gpgcard/__init__.py b/pytools/gpgcard/__init__.py deleted file mode 100644 index 45940a0..0000000 --- a/pytools/gpgcard/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright 2017 Cedric Mesnil , Ledger SAS -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# diff --git a/pytools/gpgcard/backup.py b/pytools/gpgcard/backup.py deleted file mode 100644 index 2ee62d0..0000000 --- a/pytools/gpgcard/backup.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Cedric Mesnil , Ledger SAS -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -from gpgcard import GPGCard - -gpgcard = GPGCard() -gpgcard.connect("pcsc:Ledger") -gpgcard.get_all() - - -gpgcard.verify_pin(0x81, "123456") -gpgcard.verify_pin(0x83, "12345678") -gpgcard.backup("backup_card.pickle") diff --git a/pytools/gpgcard/gpgcard.py b/pytools/gpgcard/gpgcard.py deleted file mode 100644 index d6d63db..0000000 --- a/pytools/gpgcard/gpgcard.py +++ /dev/null @@ -1,849 +0,0 @@ -# Copyright 2017 Cedric Mesnil , Ledger SAS -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - -try: - from ledgerblue.comm import getDongle - from ledgerblue.commException import CommException -except : - pass -import binascii - -from smartcard.System import readers -import sys -import datetime -import pickle - -# decode level 0 of tlv|tlv|tlv -# return dico {t: v, t:v, ...} -#tlv: hexstring - -def decode_tlv(tlv) : - tags = {} - while len(tlv) : - o = 0 - l = 0 - if (tlv[0] & 0x1F) == 0x1F: - t = (tlv[0]<<8)|tlv[1] - o = 2 - else: - t = tlv[0] - o = 1 - l = tlv[o] - if l & 0x80 : - if (l&0x7f) == 1: - l = tlv[o+1] - o += 2 - if (l&0x7f) == 2: - l = (tlv[o+1]<<8)|tlv[o+2] - o += 3 - else: - o += 1 - v = tlv[o:o+l] - tags[t] = v - tlv = tlv[o+l:] - return tags - -class GPGCardExcpetion(Exception): - pass - -class GPGCard() : - def __init__(self): - self.reset() - self.log = False - - def reset(self): - #token info - self.AID = b'' - self.aid = b'' - self.ext_length = b'' - self.ext_capabilities = b'' - self.histo_bytes = b'' - self.PW_status = b'' - - #user info - self.login = b'' - self.url = b'' - self.name = b'' - self.sex = b'' - self.lang = b'' - - #keys info - self.cardholder_cert = b'' - self.sig_attribute = b'' - self.dec_attribute = b'' - self.aut_attribute = b'' - self.sig_fingerprints = b'' - self.dec_fingerprints = b'' - self.aut_fingerprints = b'' - self.sig_CA_fingerprints = b'' - self.dec_CA_fingerprints = b'' - self.aut_CA_fingerprints = b'' - self.sig_date = b'' - self.dec_date = b'' - self.aut_date = b'' - self.cert_aut = b'' - self.cert_dec = b'' - self.cert_sig = b'' - self.UIF_SIG = b'' - self.UIF_DEC = b'' - self.UIF_AUT = b'' - self.digital_counter = b'' - - #private info - self.private_01 = b'' - self.private_02 = b'' - self.private_03 = b'' - - #keys - self.sig_key = b'' - self.dec_key = b'' - self.aut_key = b'' - - - def connect(self, device): - self.token = None - if device.startswith("ledger:"): - self.token = getDongle(True) - self.exchange = self._exchange_ledger - self.disconnect = self._disconnect_ledger - elif device.startswith("pcsc:"): - allreaders = readers() - for r in allreaders: - rname = str(r) - #print('try: %s : %s'%(rname,device[5:])) - if rname.startswith(device[5:]): - r.createConnection() - self.token = r - self.connection = r.createConnection() - self.connection.connect() - self.exchange = self._exchange_pcsc - self.disconnect = self._disconnect_pcsc - else: - #print("No") - pass - if not self.token: - print("No token") - - - - - ### APDU interface ### - def _exchange_ledger(self,cmd,data=None, sw=0x9000): - resp = b'' - cond = True - while cond: - try: - resp = resp + self.token.exchange(cmd,300) - sw = 0x9000 - cond = False - except CommException as e: - if (e.data) : - resp = resp + e.data - sw = e.sw - if (sw&0xFF00) == 0x6100 : - cmd = binascii.unhexlify("00C00000%.02x"%(sw&0xFF)) - else: - cond = False - return resp,sw - - def log_apdu(self,l): - self.log = l - - def alog(self, m,dt,sw=0): - if self.log: - print("%s %.04x %s"%(m,sw,''.join(["%.02x"%b for b in dt]))) - - def _exchange_pcsc(self,apdu, data=None, sw_expected=0x9000, sw_mask=0xFFFF): - if data: - data = [x for x in data] - apdu = [x for x in apdu] - #send - if data: - while len(data) > 0xFE: - apdux = apdu[0:5]+[0xfe]+data[0:0xFE] - apdux[0] |= 0x10 - self.alog('send', apdux) - resp, sw1, sw2 = self.connection.transmit(apdux) - sw = (sw1<<8)|sw2 - self.alog('recv',resp,sw) - if sw != 0x9000: - return resp,sw - data = data[0xFE:] - apdu = apdu+[len(data)]+data - self.alog('send', apdu) - resp, sw1, sw2 = self.connection.transmit(apdu) - sw = (sw1<<8)|sw2 - self.alog('recv', resp, sw) - - #receive - while sw1==0x61: - apdu = binascii.unhexlify(b"00c00000%.02x"%sw2) - apdu = [x for x in apdu] - self.alog('send', apdu) - resp2, sw1, sw2 = self.connection.transmit(apdu) - sw = (sw1<<8)|sw2 - self.alog('recv', resp2, sw) - resp = resp + resp2 - resp = bytes(resp) - sw = (sw1<<8)|sw2 - if sw&sw_mask == sw_expected: - return resp,sw - raise GPGCardExcpetion(binascii.hexlify(resp), "%.04x"%sw) - - def _disconnect_ledger(self): - return self.token.close() - - def _disconnect_pcsc(self): - r = self.connection.disconnect() - #self.connection.releaseContext() - return r - - def select(self): - apdu = binascii.unhexlify(b"00A4040006D27600012401") - return self.exchange(apdu) - - def activate(self): - apdu = binascii.unhexlify(b"00440000") - return self.exchange(apdu) - - def terminate(self): - apdu = binascii.unhexlify(b"00E60000") - return self.exchange(apdu) - - def get_log(self): - apdu = binascii.unhexlify(b"00040000") - return self.exchange(apdu) - - def get_data(self,tag): - apdu = binascii.unhexlify(b"00CA%.04x00"%tag) - return self.exchange(apdu) - - def put_data(self,tag,value): - return self.exchange(binascii.unhexlify(b"00DA%.04x"%tag), value) - - def verify(self,id,value, pinpad=False): - if pinpad: - apdu = binascii.unhexlify(b"EF2000%.02x00"%id) - else: - apdu = binascii.unhexlify(b"002000%.02x%.02x"%(id,len(value)))+value - return self.exchange(apdu) - - def change_reference_data(self,id,value,new_value): - lc = len(value)+len(new_value) - apdu = binascii.unhexlify(b"002400%.02x%.02x"%(id,lc))+value+new_value - return self.exchange(apdu) - - def reset_retry_counter(self,RC,new_value): - if len(RC)==0: - p1 = 2 - else: - p1 = 0 - lc = len(RC)+len(new_value) - apdu = binascii.unhexlify(b"002C%02x81%.02x"%(p1,lc))+RC+new_value - return self.exchange(apdu) - - def generate_asym_key_pair(self, mode, key): - apdu = binascii.unhexlify(b"0047%02x0002%.04x"%(mode,key)) - return self.exchange(apdu) - - ### API interfaces ### - def get_all(self, with_key=False): - self.reset() - - self.slot,sw = self.get_data(0x01F2) - self.AID,sw = self.get_data(0x4f) - self.login ,sw = self.get_data(0x5e) - self.url,sw = self.get_data(0x5f50) - self.histo_bytes,sw = self.get_data(0x5f52) - - cardholder,sw = self.get_data(0x65) - tags = decode_tlv(cardholder) - if 0x5b in tags: - self.name = tags[0x5b] - if 0x5f35 in tags: - self.sex = tags[0x5f35] - if 0x5f35 in tags: - self.lang = tags[0x5f2d] - - application_data,sw = self.get_data(0x6E) - tags = decode_tlv(application_data) - if 0x7f66 in tags: - self.ext_length = tags[0x7f66] - if 0x73 in tags: - dicretionary_data = tags[0x73] - tags = decode_tlv(dicretionary_data) - if 0xc0 in tags: - self.ext_capabilities = tags[0xC0] - - if 0xc4 in tags: - self.PW_status = tags[0xC4] - - if 0xC1 in tags: - self.sig_attribute = tags[0xC1] - if 0xC2 in tags: - self.dec_attribute = tags[0xC2] - if 0xC3 in tags: - self.aut_attribute = tags[0xC3] - if 0xC5 in tags: - fingerprints = tags[0xC5] - self.sig_fingerprints = fingerprints[0:20] - self.dec_fingerprints = fingerprints[20:40] - self.aut_fingerprints = fingerprints[40:60] - if 0xC6 in tags: - fingerprints = tags[0xC6] - self.sig_CA_fingerprints = fingerprints[0:20] - self.dec_CA_fingerprints = fingerprints[20:40] - self.aut_CA_fingerprints = fingerprints[40:60] - if 0xcd in tags: - dates = tags[0xCD] - self.sig_date = dates[0:4] - self.dec_date = dates[4:8] - self.aut_date = dates[8:12] - - self.cardholder_cert = self.get_data(0x7f21) - - self.UIF_SIG,sw = self.get_data(0xD6) - self.UIF_DEC,sw = self.get_data(0xD7) - self.UIF_AUT,sw = self.get_data(0xD8) - - sec_template,sw = self.get_data(0x7A) - tags = decode_tlv(sec_template) - if 0x93 in tags: - self.digital_counter = tags[0x93] - - self.private_01,sw = self.get_data(0x0101) - self.private_02,sw = self.get_data(0x0102) - self.private_03,sw = self.get_data(0x0103) - self.private_04,sw = self.get_data(0x0104) - - if with_key: - self.sig_key,sw = self.get_data(0x00B6) - self.dec_key,sw = self.get_data(0x00B8) - self.aut_key,sw = self.get_data(0x00A4) - - - return True - - def set_all(self): - - self.put_data(0x4f, self.AID[10:14]) - self.put_data(0x0101, self.private_01) - self.put_data(0x0102, self.private_02) - self.put_data(0x0103, self.private_03) - self.put_data(0x0104, self.private_04) - - self.put_data(0x5b, self.name) - self.put_data(0x5e, self.login) - self.put_data(0x5f2d, self.lang) - self.put_data(0x5f35, self.sex) - self.put_data(0x5f50, self.url) - - self.put_data(0xc1, self.sig_attribute) - self.put_data(0xc2, self.dec_attribute) - self.put_data(0xc3, self.aut_attribute) - - self.put_data(0xc4, self.PW_status) - - self.put_data(0xc7, self.sig_fingerprints) - self.put_data(0xc8, self.dec_fingerprints) - self.put_data(0xc9, self.aut_fingerprints) - self.put_data(0xca, self.sig_CA_fingerprints) - self.put_data(0xcb, self.dec_CA_fingerprints) - self.put_data(0xcc, self.aut_CA_fingerprints) - self.put_data(0xce, self.sig_date) - self.put_data(0xcf, self.dec_date) - self.put_data(0xd0, self.aut_date) - #self.put_data(0x7f21, self.cardholder_cert) - - self.put_data(0xd6, self.UIF_SIG) - self.put_data(0xd7, self.UIF_DEC) - self.put_data(0xd8, self.UIF_AUT) - - if len(self.sig_key): - self.put_data(0x00B6, self.sig_key) - if len(self.dec_key): - self.put_data(0x00B8, self.dec_key) - if len(self.aut_key): - self.put_data(0x00A4, self.aut_key) - return True - - - def _backup_file_name(self,file_name): - return file_name #file_name+"_slot%d"%(self.slot[0]+1)+".pickle" - - def backup(self, file_name, with_key=False): - self.get_all(with_key) - file_name = self._backup_file_name(file_name) - f = open(file_name,mode='w+b') - pickle.dump( - (self.AID, - self.private_01, self.private_02, self.private_03, self.private_04, - self.name, self.login, self.sex, self.url, - self.sig_attribute, self.dec_attribute, self.aut_attribute, - self.PW_status, - self.sig_fingerprints, self.dec_fingerprints, self.aut_fingerprints, - self.sig_CA_fingerprints, self.dec_CA_fingerprints, self.aut_CA_fingerprints, - self.sig_date, self.dec_date, self.aut_date, - self.cardholder_cert, - self.UIF_SIG, self.UIF_DEC, self.UIF_AUT, - self.sig_key, self.dec_key, self.aut_key), - f, 2) - return True - - - def restore(self, file_name): - file_name = self._backup_file_name(file_name) - f = open(file_name,mode='r+b') - (self.AID, - self.private_01, self.private_02, self.private_03, self.private_04, - self.name, self.login, self.sex, self.url, - self.sig_attribute, self.dec_attribute, self.aut_attribute, - self.PW_status, - self.sig_fingerprints, self.dec_fingerprints, self.aut_fingerprints, - self.sig_CA_fingerprints, self.dec_CA_fingerprints, self.aut_CA_fingerprints, - self.sig_date, self.dec_date, self.aut_date, - self.cardholder_cert, - self.UIF_SIG, self.UIF_DEC, self.UIF_AUT, - self.sig_key, self.dec_key, self.aut_key) = pickle.load(f) - self.set_all() - return True - - def seed_key(self): - apdu = binascii.unhexlify(b"0047800102B600") - self.exchange(apdu) - apdu = binascii.unhexlify(b"0047800102B800") - self.exchange(apdu) - apdu = binascii.unhexlify(b"0047800102A400") - self.exchange(apdu) - - - def decode_AID(self): - return { - 'AID': ('AID' , "%x"%int.from_bytes(self.AID,'big')), - 'RID': ('RID' , "%x"%int.from_bytes(self.AID[0:5],'big')), - 'APP': ('application' , "%.02x"%self.AID[5]), - 'VER': ('version' , "%.02x.%.02x"%(self.AID[6], self.AID[7])), - 'MAN': ('manufacturer' , "%x"%int.from_bytes(self.AID[8:10],'big')), - 'SER': ('serial' , "%x"%int.from_bytes(self.AID[10:14],'big')) - } - - def decode_histo(self): - return { - 'HIST': ('historical bytes', binascii.hexlify(self.histo_bytes)) - } - - def decode_extlength(self): - if self.ext_length: - return { - 'CMD': ('Max command length' , "%d" %((self.ext_length[2]<<8)|self.ext_length[3])), - 'RESP':( 'Max response length' , "%d" %((self.ext_length[6]<<8)|self.ext_length[7])) - } - else: - return { - 'CMD': ('Max command length' , "unspecified"), - 'RESP':( 'Max response length' ,"unspecified"), - } - - def decode_capabilities(self): - d = {} - b1 = self.ext_capabilities[0] - if b1&0x80 : - if self.ext_capabilities[1] == 1: - d['SM'] = ('Secure Messaging', "yes: 128 bits") - elif self.ext_capabilities[1] == 2: - d['SM'] = ('Secure Messaging', "yes: 256 bits") - else: - d['SM'] = ('Secure Messaging', "yes: ?? bits") - else: - d['SM'] = ('Secure Messaging', "no") - - if b1&0x40 : - d['CHAL'] = ('Get Challenge', "yes") - else: - d['CHAL'] = ('Get Challenge', "no") - - if b1&0x20 : - d['KEY'] = ('Key import', "yes") - else: - d['KEY'] = ('Key import', "no") - - if b1&0x10 : - d['PWS'] = ('PW status changeable', "yes") - else: - d['PWS'] = ('PW status changeable', "no") - - if b1&0x08 : - d['PDO'] = ('Private DOs', "yes") - else: - d['PDO'] = ('Private DOs', "no") - - if b1&0x04 : - d['ATTR'] = ('Algo attributes changeable', "yes") - else: - dd['ATTR'] = ('Algo attributes changeable', "no") - - if b1&0x02 : - d['PSO'] = ('PSO:DEC support AES', "yes") - else: - d['PSO'] = ('PSO:DEC support AES', "no") - - - d['CHAL_MAX'] = ('Max GET_CHALLENGE length', - "%d"% ((self.ext_capabilities[2]<<8)|self.ext_capabilities[3])) - d['CERT_MAX'] = ('Max Cert length', - "%d"% ((self.ext_capabilities[4]<<8)|self.ext_capabilities[5])) - d['PDO_MAX'] = ('Max special DO length', - "%d"% ((self.ext_capabilities[6]<<8)|self.ext_capabilities[7])) - if self.ext_capabilities[8] : - d['PIN2'] = ('PIN 2 format supported', "yes") - else: - d['PIN2'] = ('PIN 2 format supported',"no") - - return d - - def decode_pws(self): - d = {} - if self.PW_status[0]==0: - d['ONCE'] = ('PW1 valid for several CDS', 'yes') - elif self.PW_status[0]==1: - d['ONCE'] = ('PW1 valid for several CDS', 'no') - else: - d['ONCE'] = ('PW1 valid for several CDS', 'unknown (%d)'%self.PW_status[0]) - - if self.PW_status[1] & 0x80: - fmt = "Format-2" - else: - fmt = "UTF-8" - pwlen = self.PW_status[1] & 0x7f - d['PW1'] = ("PW1 format", "%s : %d bytes"%(fmt,pwlen)) - - if self.PW_status[2] & 0x80: - fmt = "Format-2" - else: - fmt = "UTF-8" - pwlen = self.PW_status[2] & 0x7f - d['RC'] = ("RC format", "%s : %d bytes"%(fmt,pwlen)) - - if self.PW_status[3] & 0x80: - fmt = "Format-2" - else: - fmt = "UTF-8" - pwlen = self.PW_status[3] & 0x7f - d['PW3'] = ("PW3 format", "%s : %d bytes"%(fmt,pwlen)) - - d['CNT1'] = ('PW1 counter', "%x"%self.PW_status[4]) - d['CNTRC'] =('RC counter', "%x"%self.PW_status[5]) - d['CNT3'] = ('PW3 counter', "%x"%self.PW_status[6]) - - return d - - #slot - def select_slot(self, slot): - """ Args: - slot (int) : slot id (1 to MAX) to select - """ - self.put_data( 0x01F2, (slot-1).to_bytes(1,'big')) - - #USER Info - def set_serial(self, ser): - ser=binascii.unhexlify(ser) - - self.AID = self.AID[0:10]+ser - self.put_data(0x4f, self.AID[10:14]) - - # internals are always store as byres, get/set automatically convert from/to - def set_name(self,name): - """ Args: - name (str) : utf8 string - """ - self.name = name.encode('utf-8') - self.put_data( 0x5b, self.name) - - def get_name(self): - return self.name.decode('utf-8') - - def set_login(self,login): - """ Args: - login (str) : utf8 string - """ - self.login = login.encode('utf-8') - self.put_data( 0x5e, self.login) - - def get_login(self): - return self.login.decode('utf-8') - - def set_url(self,url): - """ Args: - url (str) : utf8 string - """ - self.url = url.encode('utf-8') - self.put_data(0x5f50, self.url) - - def get_url(self): - return self.url.decode('utf-8') - - def set_sex(self,sex): - """ Args: - sex (str) : ascii string ('9', '1', '2') - """ - self.sex = sex.encode('utf-8') - self.put_data(0x5f35, self.sex) - - def get_sex(self): - return self.sex.decode('utf-8') - - def set_lang(self,lang): - """ Args: - lang (str) : utf8 string - """ - self.lang = lang.encode('utf-8') - self.put_data(0x5f2d, self.lang) - - def get_lang(self): - return self.lang.decode('utf-8') - - - #PINs - def verify_pin(self,id,value, pinpad=False): - """ Args: - id (int) : 0x81, 0x82, ox83 - value (str) : ascii string - """ - value = value.encode('ascii') - resp,sw = self.verify(id,value, pinpad) - return sw == 0x9000 - - def change_pin(self, id, value,new_value): - """ Args: - id (int) : 0x81, ox83 - value (str) : ascii string - """ - value = value.encode('ascii') - new_value = new_value.encode('ascii') - resp,sw = self.change_reference_data(id,value,new_value) - return sw == 0x9000 - - def change_RC(self,new_value): - """ Args: - id (int) : 0x81, ox83 - value (str) : ascii string - """ - new_value = new_value.encode('ascii') - resp,sw = self.put_data(0xd3,new_value) - return sw == 0x9000 - - def reset_PW1(self,RC,new_value): - """ Args: - id (int) : 0x81, ox83 - value (str) : ascii string - """ - new_value = new_value.encode('ascii') - RC = RC.encode('ascii') - resp,sw = self.reset_retry_counter(RC,new_value) - return sw == 0x9000 - - #keys - def get_key_uif(self,key): - """ - Returns: (int) 0,1,2,256(not supported) - """ - uif = None - if key=='sig': - uif = self.UIF_SIG - if key=='aut': - uif = self.UIF_DEC - if key=='dec': - uif = self.UIF_AUT - - if uif: - uif = int.from_bytes(uif,'big') - else: - uif = 256 - return uif - - def get_key_fingerprints(self, key): - """ - Returns: (str) fingerprints hex string - """ - fprints = None - if key=='sig': - fprints = self.sig_fingerprints - if key=='aut': - fprints = self.aut_fingerprints - if key=='dec': - fprints = self.dec_fingerprints - if fprints: - fprints = binascii.hexlify(fprints) - else: - fprint = '-' - return fprints.decode('ascii') - - def set_key_fingerprints(self, key, fprints): - - fprints = binascii.unhexlify(fprints) - if key=='sig': - self.sig_fingerprints = fprints - self.put_data(0xc7, fprints) - if key=='aut': - self.aut_fingerprints = fprints - self.put_data(0xc9, fprints) - if key=='dec': - self.dec_fingerprints = fprints - self.put_data(0xc8, fprints) - - - def get_key_CA_fingerprints(self, key): - """ - Returns: (str) CA fingerprints hex string - """ - fprints = None - if key=='sig': - fprints = self.sig_CA_fingerprints - if key=='aut': - fprints = self.aut_CA_fingerprints - if key=='dec': - fprints = self.dec_CA_fingerprints - if fprints: - fprints = binascii.hexlify(fprints) - else: - fprint = b'-' - return fprints.decode('ascii') - - def get_key_date(self, key): - """ - Returns: (str) date - """ - fdate = None - if key=='sig': - fdate = self.sig_date - if key=='aut': - fdate = self.aut_date - if key=='dec': - fdate = self.dec_date - if fdate: - fdate = datetime.datetime.fromtimestamp(int.from_bytes(fdate,'big')).isoformat(' ') - else: - fprint = b'-'.decode('ascii') - return fdate - - - def get_key_attribute(self, key): - """ - for RSA: - {'id': (int) 0x01, - 'nsize': (int) - 'esize' (int) - 'format': (int) - } - - for ECC: - - {'id': (int) 0x18|0x19, - 'OID': (bytes) - } - - Args: - key: (str) 'sig' | 'aut', 'dec' - """ - - attributes = None - if key=='sig': - attributes = self.sig_attribute - if key=='dec': - attributes = self.dec_attribute - if key=='aut': - attributes = self.aut_attribute - if not attributes: - return None - if len(attributes) == 0: - return None - - if attributes[0] == 0x01: - return { - 'id': 1, - 'nsize': (attributes[1]<<8) | attributes[2], - 'esize': (attributes[3]<<8) | attributes[4], - 'format': attributes[5] - } - if attributes[0] == 18 or attributes[0] == 19 : - return { - 'id': attributes[0] , - 'oid': attributes[1:] - } - print ("NONE: %s"%binascii.hexlify(attributes)) - return None - - def set_template(self, sig, dec, aut): - """ - See get_template - """ - if (sig): - self.put_data(0x00C1, binascii.unhexlify(sig)) - if dec: - self.put_data(0x00C2, binascii.unhexlify(dec)) - if aut: - self.put_data(0x00C3, binascii.unhexlify(aut)) - pass - - - def asymmetric_key(self, op, key) : - """ - Args: - op: (int) 0x80 generate, 0x81 read pub, 0x82 read pub&priv - key: (str) 'sig' | 'aut', 'dec' - - Returns: - for RSA: - {'id': (int) 0x01, - 'n': (bytes) - 'e' (bytes) - 'd': (bytes) - } - - for ECC: - - {'id': (int) 0x18|0x19, - 'OID': (bytes) - } - - """ - attributes = None - if key=='sig': - attributes = self.sig_attribute - key = 0xb600 - if key=='dec': - attributes = self.dec_attribute - key = 0xb800 - if key=='aut': - attributes = self.aut_attribute - key = 0xa400 - if not attributes: - return None - if len(attributes) == 0: - return None - resp,sw = self.generate_asym_key_pair(op,key) - if sw != 0x9000: - return None - resp,sw = self.generate_asym_key_pair(0x82,key) - tags = decode_tlv(resp) - tags = decode_tlv(tags[0x7f49]) - if attributes[0] == 0x01: - return { - 'id': 1, - 'n': tags[0x81], - 'e': tags[0x82], - 'd': tags[0x98], - } diff --git a/pytools/gpgcard/gpgcli.py b/pytools/gpgcard/gpgcli.py deleted file mode 100644 index cb94d08..0000000 --- a/pytools/gpgcard/gpgcli.py +++ /dev/null @@ -1,156 +0,0 @@ -# Copyright 2018 Cedric Mesnil , Ledger SAS -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -import sys -import argparse -import binascii - -from .gpgcard import GPGCard - -def get_argparser(): - parser = argparse.ArgumentParser(epilog=""" -reset, backup, restore are always executed in THIS order. - -Template identifiers are ed2559, cv25519, rsa2048, rsa3072, rsa4096. - """ -) - parser.add_argument('--adm-pin', metavar='PIN', help='Administrative PIN, if pinpad not used') - parser.add_argument('--backup', help='Perfom a full backup except the key', action='store_true') - parser.add_argument('--backup-keys', help='Perfom keys encrypted backup', action='store_true') - parser.add_argument('--file', help='basckup/restore file', type=str, default='gpg_backup') - parser.add_argument('--pinpad', help='PIN validation will be deledated to pinpad', action='store_true') - parser.add_argument('--reader', help='PCSC reader', type=str, default='pcsc:Ledger') - parser.add_argument('--reset', help='Reset the application. All data are erased', action='store_true') - parser.add_argument('--restore', help='Perfom a full restore except the key', action='store_true') - parser.add_argument('--set-serial', metavar='SERIAL', help='set the four serial bytes') - parser.add_argument('--set-templates', metavar='SIG:DEC:AUT', help='sig:dec:aut templates identifier') - parser.add_argument('--set-fingerprints', metavar='SIG:DEC:AUT', help='sig:dec:aut fingerprints, 20 bytes each in hexa') - parser.add_argument('--seed-key', help='Regenerate all keys, based on seed mode', action='store_true') - parser.add_argument('--slot', metavar='SLOT', help='slot to backup', type=int, default=1) - parser.add_argument('--user-pin', metavar='PIN', help='User PIN, if pinpad not used'), - parser.add_argument('--apdu', help='Log APDU exchange', action='store_true') - return parser - -def banner(): - print( -""" -GPG Ledger Admin Tool v0.1. -Copyright 2018 Cedric Mesnil , Ledger SAS - -""" - ) - - -def error(msg) : - print("Error: ") - print(" "+msg) - sys.exit() - -banner() - -args = get_argparser().parse_args() - -if args.backup and args.restore: - error('Only one backup or restore must be specified') - - -if not args.pinpad: - if not args.adm_pin or not args.user_pin: - error('If pinpad is not use, userpin and admpin must be provided') - - -try: - - print("Connect to card %s..."%args.reader, end='', flush=True) - gpgcard = GPGCard() - if args.apdu: - gpgcard.log_apdu(args.apdu) - gpgcard.connect(args.reader) - print("OK") - - print("Verify PINs...", end='', flush=True) - if args.pinpad: - if not gpgcard.verify_pin(0x82, "", True) or not gpgcard.verify_pin(0x83, "", True): - error("PIN not verified") - else: - if not gpgcard.verify_pin(0x82, args.user_pin) or not gpgcard.verify_pin(0x83, args.adm_pin): - error("PIN not verified") - print("OK") - - print("Select slot %d..."%args.slot, end='', flush=True) - gpgcard.select_slot(args.slot) - print("OK") - - if args.reset: - print("Reset application...", end='', flush=True) - gpgcard.terminate() - gpgcard.activate() - print("OK") - - print("Get card info...", end='', flush=True) - gpgcard.get_all() - print("OK", flush=True) - - if args.backup: - print("Backup application...", end='', flush=True) - if not gpgcard.backup(args.file, args.backup_keys): - error("NOK") - print("OK") - - if args.restore: - print("Restore application...", end='', flush=True) - if not gpgcard.restore(args.file): - error("NOK") - print("OK", flush=True) - - if args.set_templates: - print("Set template...", end='', flush=True) - templates= { - 'rsa2048' : "010800002001", - 'rsa3072' : "010C00002001", - 'rsa4096' : "011000002001", - 'nistp256' : "132A8648CE3D030107", - 'ed25519' : "162B06010401DA470F01", - 'cv25519' : "122B060104019755010501" - } - sig,dec,aut = args.set_templates.split(":") - gpgcard.set_template(templates[sig],templates[dec],templates[aut]) - print("OK", flush=True) - - if args.seed_key: - print("Seed Key...", end='', flush=True) - gpgcard.seed_key(); - print("OK", flush=True) - - if args.set_fingerprints: - print("Set fingerprints...", end='', flush=True) - sig,dec,aut = args.set_fingerprints.split(":") - if sig: - gpgcard.set_key_fingerprints("sig", sig) - if dec: - gpgcard.set_key_fingerprints("dec", dec) - if aut: - gpgcard.set_key_fingerprints("aut", aut) - print("OK", flush=True) - - if args.set_serial: - print("Set serial...", end='', flush=True) - if len(args.set_serial) != 8 : - error('Serial must be a 4 bytes hexa string value (8 characters)') - serial = binascii.unhexlify(args.set_serial) - gpgcard.set_serial(args.set_serial) - print("OK", flush=True) -except Exception as e: - error(str(e)) diff --git a/pytools/gpgcard/restore.py b/pytools/gpgcard/restore.py deleted file mode 100644 index 382c4a7..0000000 --- a/pytools/gpgcard/restore.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Cedric Mesnil , Ledger SAS -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -from gpgcard import GPGCard - -gpgcard = GPGCard() -gpgcard.connect("pcsc:Ledger") -gpgcard.get_all() - - -gpgcard.verify_pin(0x81, "123456") -gpgcard.verify_pin(0x83, "12345678") -gpgcard.restore("backup_card.pickle", True) diff --git a/pytools/gpgcli.py b/pytools/gpgcli.py new file mode 100755 index 0000000..797fb12 --- /dev/null +++ b/pytools/gpgcli.py @@ -0,0 +1,397 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +#***************************************************************************** +# Ledger App OpenPGP. +# (c) 2024 Ledger SAS. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#***************************************************************************** + +import sys +from pathlib import Path +from argparse import ArgumentParser, RawTextHelpFormatter, Namespace +from gpgapp.gpgcard import GPGCard, GPGCardExcpetion +from gpgapp.gpgcmd import ErrorCodes, KeyTypes, PassWord +from gpgapp.gpgcmd import KEY_OPERATIONS, KEY_TEMPLATES, USER_SALUTATION + + +# =============================================================================== +# Parse command line options +# =============================================================================== +def get_argparser() -> Namespace: + """Parse the commandline options""" + + parser = ArgumentParser( + description="Manage OpenPGP App on Ledger device", + formatter_class=RawTextHelpFormatter + ) + parser.add_argument("--info", action="store_true", + help="Get and display card information") + parser.add_argument("--reader", type=str, default="Ledger", + help="PCSC reader name (default is '%(default)s')") + + parser.add_argument("--apdu", action="store_true", help="Log APDU exchange") + parser.add_argument("--slot", type=int, choices=range(1, 4), help="Select slot (1 to 3)") + parser.add_argument("--reset", action="store_true", + help="Reset the application (all data will be erased)") + + parser.add_argument("--pinpad", action="store_true", + help="PIN validation will be delegated to pinpad") + parser.add_argument("--adm-pin", metavar="PIN", + help="Admin PIN (if pinpad not used)", required="--pinpad" not in sys.argv) + parser.add_argument("--user-pin", metavar="PIN", + help="User PIN (if pinpad not used)", required="--pinpad" not in sys.argv) + parser.add_argument("--new-user-pin", metavar="PIN", + help="Change User PIN") + parser.add_argument("--new-adm-pin", metavar="PIN", + help="Change Admin PIN") + group = parser.add_mutually_exclusive_group() + group.add_argument("--reset-code", help="Update 'PW1 Resetting Code'") + group.add_argument("--reset-pw1", help="Reset the User PIN") + + parser.add_argument("--serial", help="Update the 'serial' data (4 bytes)") + parser.add_argument("--salutation",choices=list(USER_SALUTATION), help="Update 'salutation' data") + parser.add_argument("--name", help="Update 'name' data") + parser.add_argument("--url", help="Update 'url' data") + parser.add_argument("--login",help="Update 'login' data") + parser.add_argument("--lang", help="Update 'lang' data") + + parser.add_argument("--key-type", type=KeyTypes, choices=[k.value for k in KeyTypes], + help="Select key type SIG:DEC:AUT (default is all)") + + parser.add_argument("--key-action",choices=list(KEY_OPERATIONS), + help="Generate key pair or Read public key") + parser.add_argument("--set-fingerprints", metavar="SIG:DEC:AUT", + help="Set fingerprints for selected 'key-type'\n" + \ + "If 'key-type' is not specified, set for all keys (SIG:DEC:AUT)\n" + \ + "Each fingerprint is 20 hex bytes long") + parser.add_argument("--set-templates", metavar="SIG:DEC:AUT", + help="Set template identifier for selected 'key-type'\n" + \ + "If 'key-type' is not specified, set for all keys (SIG:DEC:AUT)\n" + \ + f"Valid values are {', '.join(list(KEY_TEMPLATES))}") + parser.add_argument("--seed-key", action="store_true", + help="Regenerate all keys, based on seed mode") + + parser.add_argument("--file", type=str, default="pubkey", + help="Public Key export file (default is '%(default)s')") + + return parser.parse_args() + + +# =============================================================================== +# Error handler +# =============================================================================== +def error(code: int, msg: str) -> None: + """Print error message and exit + + Args: + msg (str): Message to display + """ + + scode = f" {code:x}" if code else "" + if not msg: + if code in ErrorCodes.err_list: + msg = ErrorCodes.err_list[code] + print(f"\n### Error{scode}: {msg}\n") + sys.exit() + + +# =============================================================================== +# PIN codes verification +# =============================================================================== +def verify_pins(gpgcard: GPGCard, user_pin: str, adm_pin: str, pinpad: bool) -> None: + """Verify the pin codes + + Args: + gpgcard (GPGCard): smartcard object + user_pin (str): User pin code + adm_pin (str): Admin pin code + pinpad (bool): Indicates to use pinpad + """ + + print("Verify PINs...") + if not gpgcard.verify_pin(PassWord.PW1, user_pin, pinpad) or \ + not gpgcard.verify_pin(PassWord.PW2, user_pin, pinpad) or \ + not gpgcard.verify_pin(PassWord.PW3, adm_pin, pinpad): + error(ErrorCodes.ERR_INTERNAL, "PIN not verified") + + +# =============================================================================== +# Reset the Application +# =============================================================================== +def reset_app(gpgcard: GPGCard) -> None: + """Reset Application and re-init + + Args: + gpgcard (GPGCard): smartcard object + """ + + print("Reset application...") + gpgcard.terminate() + gpgcard.activate() + print(" -> OK") + + +# =============================================================================== +# Retrieve the OpenPGP Card information +# =============================================================================== +def get_info(gpgcard: GPGCard, display: bool=True) -> None: + """Retrieve and display Card information + + Args: + gpgcard (GPGCard): smartcard object + display (bool): Print Card info + """ + + print("Get card info...") + gpgcard.get_all() + + if not display: + return + + line = "=" * 15 + print(f"{line} Application Identifier {line}") + for k, v in gpgcard.decode_AID().items(): + if k == "AID": + print(f" # {k:20s}: {v}") + else: + print(f" - {k:18s}: {v}") + print(f"{line} Historical Bytes {line}") + for k, v in gpgcard.decode_histo().items(): + print(f" - {k:20s}: {v}") + print(f"{line} Max Extended Length {line}") + for k, v in gpgcard.decode_extlength().items(): + print(f" - {k:20s}: {v}") + print(f"{line} PIN Info {line}") + for k, v in gpgcard.decode_pws().items(): + print(f" - {k:20s}: {v}") + print(f"{line} Extended Capabilities {line}") + for k, v in gpgcard.decode_ext_capabilities().items(): + print(f" - {k:20s}: {v}") + print(f"{line} Hardware Features {line}") + for k, v in gpgcard.decode_hardware().items(): + print(f" - {k:20s}: {v}") + print(f"{line} User Info {line}") + print(f" - {'Name':20s}: {gpgcard.get_name()}") + print(f" - {'Login':20s}: {gpgcard.get_login()}") + print(f" - {'URL':20s}: {gpgcard.get_url()}") + print(f" - {'Salutation':20s}: {gpgcard.get_salutation()}") + print(f" - {'Lang':20s}: {gpgcard.get_lang()}") + print(f"{line} Slots Info {line}") + for k, v in gpgcard.decode_slot().items(): + print(f" - {k:20s}: {v}") + print(f"{line} Keys Info {line}") + print(f" - {'CDS counter':20s}: {gpgcard.get_sig_count()}") + print(f" - {'RSA Pub Exponent':20s}: 0x{gpgcard.get_rsa_pub_exp():06x}") + + for key in [k.value for k in KeyTypes]: + print(f" # {key}:") + print(f" - {'UIF':18s}: {gpgcard.decode_key_uif(key)}") + print(f" - {'Fingerprint':18s}: {gpgcard.get_key_fingerprint(key)}") + print(f" - {'CA fingerprint':18s}: {gpgcard.get_key_CA_fingerprint(key)}") + print(f" - {'Creation date':18s}: {gpgcard.get_key_date(key)}") + print(f" - {'Attribute':18s}: {gpgcard.decode_attributes(key)}") + print(f" - {'Certificate':18s}: {gpgcard.get_key_cert(key)}") + print(" - Key:") + for k, v in gpgcard.decode_key(key).items(): + print(f" * {k:16s}: {v}") + + +# =============================================================================== +# Set fingerprints +# =============================================================================== +def set_fingerprints(gpgcard: GPGCard, fingerprints: str, key_type: KeyTypes | None = None) -> None: + """Set Key template + + Args: + gpgcard (GPGCard): smartcard object + fingerprints (str): SIG, DEC, AUT fingerprints separated by ':' + key_type (KeyTypes): Key type selected + """ + + d = {} + if key_type is None: + # Consider all keys fingerprints are given + try: + d[KeyTypes.KEY_SIG], d[KeyTypes.KEY_DEC], d[KeyTypes.KEY_AUT] = fingerprints.split(":") + except ValueError as err: + raise GPGCardExcpetion(0, f"Wrong fingerprints arguments: {err}") from err + + else: + # a key_type is specified, using only this fingerprint + d[key_type] = fingerprints + + for k, v in d.items(): + print(f"Set fingerprints for '{k}' Key...") + gpgcard.set_key_fingerprint(k, bytes.fromhex(v)) + + +# =============================================================================== +# Set Key Templates +# =============================================================================== +def set_templates(gpgcard: GPGCard, templates: str, key_type: KeyTypes | None = None) -> None: + """Set Key template + + Args: + gpgcard (GPGCard): smartcard object + templates (str): SIG, DEC, AUT template separated by ':' + key_type (KeyTypes): Key type selected + """ + + d = {} + if key_type is None: + # Consider all keys template are given + try: + d[KeyTypes.KEY_SIG], d[KeyTypes.KEY_DEC], d[KeyTypes.KEY_AUT] = templates.split(":") + except ValueError as err: + raise GPGCardExcpetion(0, f"Wrong templates arguments: {err}") from err + else: + # a key_type is specified, using only this template + d[key_type] = templates + + for _, v in d.items(): + if v not in KEY_TEMPLATES: + raise GPGCardExcpetion(0, f"Invalid template: {v}") + + for k, v in d.items(): + print(f"Set template {v} for '{k}' Key...") + gpgcard.set_template(k, v) + + +# =============================================================================== +# Handle Asymmetric keys +# =============================================================================== +def handle_key(gpgcard: GPGCard, action: str, key_type: KeyTypes, file: str = "") -> None: + """Generate Key pair and/or Read Public key + + Args: + gpgcard (GPGCard): smartcard object + action (str): Generate or Read + key_type (KeyTypes): Key type selected + file (str): Public key export file + """ + + if action not in KEY_OPERATIONS: + raise GPGCardExcpetion(0, f"Invalid operation: {action}") + + key_list = [key_type] if key_type else list(KeyTypes) + for key in key_list: + print(f"{action} '{key}' Key...") + key_action = "Read" if action == "Export" else action + pubkey = gpgcard.asymmetric_key(key, key_action) + if action == "Export": + if len(key_list) > 1: + filename = key + "_" + file + else: + filename = file + path = Path(filename) + if path.suffix == "": + filename += ".pem" + gpgcard.export_pub_key(pubkey, filename) + else: + for k, v in pubkey.items(): + print(f" - {k:13s}: {v}") + + +# =============================================================================== +# MAIN +# =============================================================================== +def entrypoint() -> None: + """Main function""" + + # Arguments parsing + # ----------------- + args = get_argparser() + + # Arguments checking + # ------------------ + if not args.pinpad: + if not args.adm_pin or not args.user_pin: + error(ErrorCodes.ERR_INTERNAL, + "If 'pinpad' is not use, 'userpin' and 'admpin' must be provided") + + if args.serial and len(args.serial) != 8 : + error(ErrorCodes.ERR_INTERNAL, + "Serial must be a 4 bytes hex string value (8 characters)") + + if args.reset_code and len(args.reset_code) != 8: + error(ErrorCodes.ERR_INTERNAL, + "Reset Code must be a 4 bytes hex string value (8 characters)") + + if args.key_action == "Export" and not args.file: + error(ErrorCodes.ERR_INTERNAL, "Provide a file to export public key") + + # Processing + # ---------- + try: + print(f"Connect to card '{args.reader}'...") + gpgcard: GPGCard = GPGCard() + gpgcard.log_apdu(args.apdu) + gpgcard.connect(args.reader) + + verify_pins(gpgcard, args.user_pin, args.adm_pin, args.pinpad) + + if args.slot: + gpgcard.select_slot(args.slot - 1) + + if args.salutation: + gpgcard.set_salutation(args.salutation) + if args.name: + gpgcard.set_name(args.name) + if args.url: + gpgcard.set_url(args.url) + if args.login: + gpgcard.set_login(args.login) + if args.lang: + gpgcard.set_lang(args.lang) + + if args.new_user_pin: + gpgcard.change_pin(PassWord.PW1, args.user_pin, args.new_user_pin) + if args.new_adm_pin: + gpgcard.change_pin(PassWord.PW3, args.adm_pin, args.new_adm_pin) + if args.reset_pw1: + # Reset the User PIN with Resetting Code + gpgcard.reset_PW1(args.reset_code, args.reset_pw1) + elif args.reset_code: + # Use the Resetting code to set the value + gpgcard.set_RC(args.reset_code) + + get_info(gpgcard, args.info) + + if args.reset: + reset_app(gpgcard) + + if args.set_templates: + set_templates(gpgcard, args.set_templates, args.key_type) + + if args.seed_key: + gpgcard.seed_key() + + if args.set_fingerprints: + set_fingerprints(gpgcard, args.set_fingerprints, args.key_type) + + if args.serial: + gpgcard.set_serial(args.serial) + + if args.key_action: + handle_key(gpgcard, args.key_action, args.key_type, args.file) + + gpgcard.disconnect() + + except GPGCardExcpetion as err: + error(err.code, err.message) + + +if __name__ == "__main__": + + entrypoint() diff --git a/pytools/requirements.txt b/pytools/requirements.txt new file mode 100644 index 0000000..2baafa8 --- /dev/null +++ b/pytools/requirements.txt @@ -0,0 +1,2 @@ +pyscard +pycryptodome diff --git a/pytools/setup.cfg b/pytools/setup.cfg new file mode 100644 index 0000000..3422f54 --- /dev/null +++ b/pytools/setup.cfg @@ -0,0 +1,28 @@ +[tool:pytest] +addopts = --strict-markers + +[pylint] +disable = C0114, # missing-module-docstring + C0115, # missing-class-docstring + C0116, # missing-function-docstring + C0103, # invalid-name + C0302, # too-many-lines + R0801, # duplicate-code + R0902, # too-many-instances + R0903, # too-few-public-methods + R0904, # too-many-public-methods + R0912, # too-many-branches + R0913, # too-many-arguments + R0914, # too-many-statements + R0915 # too-many-local-variables +max-line-length=110 +extension-pkg-whitelist=hid + +[pycodestyle] +max-line-length = 100 + +[mypy-hid.*] +ignore_missing_imports = True + +[mypy-pytest.*] +ignore_missing_imports = True From 6b9018483eb32241e222821299c0141241697ea9 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 8 Jan 2024 15:07:05 +0100 Subject: [PATCH 24/75] Add ragger tests --- tests/application_client/__init__.py | 0 tests/application_client/app_def.py | 146 +++++ tests/application_client/command_sender.py | 516 ++++++++++++++++++ tests/application_client/response_unpacker.py | 37 ++ tests/conftest.py | 26 + tests/requirements.txt | 2 + tests/setup.cfg | 24 + .../nanos/test_menu_settings/00000.png | Bin 0 -> 373 bytes .../nanos/test_menu_settings/00001.png | Bin 0 -> 355 bytes .../nanos/test_menu_settings/00002.png | Bin 0 -> 356 bytes .../nanos/test_menu_settings/00003.png | Bin 0 -> 445 bytes .../nanos/test_menu_settings/00004.png | Bin 0 -> 362 bytes .../nanos/test_menu_settings/00005.png | Bin 0 -> 452 bytes .../nanos/test_menu_settings/00006.png | Bin 0 -> 400 bytes .../nanos/test_menu_settings/00007.png | Bin 0 -> 421 bytes .../nanos/test_menu_settings/00008.png | Bin 0 -> 405 bytes .../nanos/test_menu_settings/00009.png | Bin 0 -> 426 bytes .../nanos/test_menu_settings/00010.png | Bin 0 -> 374 bytes .../nanos/test_menu_settings/00011.png | Bin 0 -> 184 bytes .../nanos/test_menu_settings/00012.png | Bin 0 -> 362 bytes .../nanos/test_menu_settings/00013.png | Bin 0 -> 426 bytes .../nanos/test_menu_settings/00014.png | Bin 0 -> 374 bytes .../nanos/test_menu_settings/00015.png | Bin 0 -> 307 bytes .../nanos/test_menu_settings/00016.png | Bin 0 -> 373 bytes .../nanos/test_menu_settings/00017.png | Bin 0 -> 425 bytes .../nanos/test_menu_settings/00018.png | Bin 0 -> 285 bytes .../nanos/test_menu_settings/00019.png | Bin 0 -> 316 bytes .../nanos/test_menu_settings/00020.png | Bin 0 -> 289 bytes .../nanos/test_menu_settings/00021.png | Bin 0 -> 307 bytes .../nanos/test_menu_settings/00022.png | Bin 0 -> 373 bytes .../nanos/test_menu_settings/00023.png | Bin 0 -> 425 bytes .../nanos/test_menu_settings/00024.png | Bin 0 -> 352 bytes .../nanos/test_menu_settings/00025.png | Bin 0 -> 301 bytes .../nanos/test_menu_settings/00026.png | Bin 0 -> 383 bytes .../nanos/test_menu_settings/00027.png | Bin 0 -> 399 bytes .../nanos/test_menu_settings/00028.png | Bin 0 -> 404 bytes .../nanos/test_menu_settings/00029.png | Bin 0 -> 376 bytes .../nanos/test_menu_settings/00030.png | Bin 0 -> 331 bytes .../nanos/test_menu_settings/00031.png | Bin 0 -> 425 bytes .../nanos/test_menu_settings/00032.png | Bin 0 -> 380 bytes .../nanos/test_menu_settings/00033.png | Bin 0 -> 376 bytes .../nanos/test_menu_settings/00034.png | Bin 0 -> 331 bytes .../nanos/test_menu_settings/00035.png | Bin 0 -> 307 bytes .../nanos/test_menu_settings/00036.png | Bin 0 -> 373 bytes .../nanos/test_menu_settings/00037.png | Bin 0 -> 425 bytes .../nanos/test_menu_settings/00038.png | Bin 0 -> 352 bytes .../nanos/test_menu_settings/00039.png | Bin 0 -> 370 bytes .../nanos/test_menu_settings/00040.png | Bin 0 -> 388 bytes .../nanos/test_menu_settings/00041.png | Bin 0 -> 432 bytes .../nanos/test_menu_settings/00042.png | Bin 0 -> 441 bytes .../nanos/test_menu_settings/00043.png | Bin 0 -> 444 bytes .../nanos/test_menu_settings/00044.png | Bin 0 -> 379 bytes .../nanos/test_menu_settings/00045.png | Bin 0 -> 307 bytes .../nanos/test_menu_settings/00046.png | Bin 0 -> 373 bytes .../nanos/test_menu_settings/00047.png | Bin 0 -> 425 bytes .../nanos/test_menu_settings/00048.png | Bin 0 -> 352 bytes .../nanos/test_menu_settings/00049.png | Bin 0 -> 370 bytes .../nanos/test_menu_settings/00050.png | Bin 0 -> 335 bytes .../nanos/test_menu_settings/00051.png | Bin 0 -> 310 bytes .../nanos/test_menu_settings/00052.png | Bin 0 -> 299 bytes .../nanos/test_menu_settings/00053.png | Bin 0 -> 202 bytes .../test_verify_confirm_accepted/00000.png | Bin 0 -> 386 bytes .../test_verify_confirm_refused/00000.png | Bin 0 -> 386 bytes .../nanosp/test_menu_settings/00000.png | Bin 0 -> 485 bytes .../nanosp/test_menu_settings/00001.png | Bin 0 -> 380 bytes .../nanosp/test_menu_settings/00002.png | Bin 0 -> 491 bytes .../nanosp/test_menu_settings/00003.png | Bin 0 -> 566 bytes .../nanosp/test_menu_settings/00004.png | Bin 0 -> 363 bytes .../nanosp/test_menu_settings/00005.png | Bin 0 -> 401 bytes .../nanosp/test_menu_settings/00006.png | Bin 0 -> 465 bytes .../nanosp/test_menu_settings/00007.png | Bin 0 -> 588 bytes .../nanosp/test_menu_settings/00008.png | Bin 0 -> 666 bytes .../nanosp/test_menu_settings/00009.png | Bin 0 -> 613 bytes .../nanosp/test_menu_settings/00010.png | Bin 0 -> 418 bytes .../nanosp/test_menu_settings/00011.png | Bin 0 -> 306 bytes .../nanosp/test_menu_settings/00012.png | Bin 0 -> 418 bytes .../nanosp/test_menu_settings/00013.png | Bin 0 -> 306 bytes .../nanosp/test_menu_settings/00014.png | Bin 0 -> 305 bytes .../nanosp/test_menu_settings/00015.png | Bin 0 -> 485 bytes .../nanosp/test_menu_settings/00016.png | Bin 0 -> 590 bytes .../nanosp/test_menu_settings/00017.png | Bin 0 -> 429 bytes .../nanosp/test_menu_settings/00018.png | Bin 0 -> 305 bytes .../nanosp/test_menu_settings/00019.png | Bin 0 -> 590 bytes .../nanosp/test_menu_settings/00020.png | Bin 0 -> 595 bytes .../nanosp/test_menu_settings/00021.png | Bin 0 -> 343 bytes .../nanosp/test_menu_settings/00022.png | Bin 0 -> 338 bytes .../nanosp/test_menu_settings/00023.png | Bin 0 -> 482 bytes .../nanosp/test_menu_settings/00024.png | Bin 0 -> 315 bytes .../nanosp/test_menu_settings/00025.png | Bin 0 -> 407 bytes .../nanosp/test_menu_settings/00026.png | Bin 0 -> 449 bytes .../nanosp/test_menu_settings/00027.png | Bin 0 -> 368 bytes .../nanosp/test_menu_settings/00028.png | Bin 0 -> 315 bytes .../nanosp/test_menu_settings/00029.png | Bin 0 -> 407 bytes .../nanosp/test_menu_settings/00030.png | Bin 0 -> 305 bytes .../nanosp/test_menu_settings/00031.png | Bin 0 -> 595 bytes .../nanosp/test_menu_settings/00032.png | Bin 0 -> 550 bytes .../nanosp/test_menu_settings/00033.png | Bin 0 -> 415 bytes .../nanosp/test_menu_settings/00034.png | Bin 0 -> 422 bytes .../nanosp/test_menu_settings/00035.png | Bin 0 -> 432 bytes .../nanosp/test_menu_settings/00036.png | Bin 0 -> 413 bytes .../nanosp/test_menu_settings/00037.png | Bin 0 -> 305 bytes .../nanosp/test_menu_settings/00038.png | Bin 0 -> 550 bytes .../nanosp/test_menu_settings/00039.png | Bin 0 -> 481 bytes .../nanosp/test_menu_settings/00040.png | Bin 0 -> 535 bytes .../nanosp/test_menu_settings/00041.png | Bin 0 -> 426 bytes .../snapshots/nanosp/test_menu_slot/00000.png | Bin 0 -> 368 bytes .../snapshots/nanosp/test_menu_slot/00001.png | Bin 0 -> 340 bytes .../snapshots/nanosp/test_menu_slot/00002.png | Bin 0 -> 358 bytes .../snapshots/nanosp/test_menu_slot/00003.png | Bin 0 -> 335 bytes .../snapshots/nanosp/test_menu_slot/00004.png | Bin 0 -> 495 bytes .../snapshots/nanosp/test_menu_slot/00005.png | Bin 0 -> 383 bytes .../snapshots/nanosp/test_menu_slot/00006.png | Bin 0 -> 335 bytes .../snapshots/nanosp/test_menu_slot/00007.png | Bin 0 -> 495 bytes .../snapshots/nanosp/test_menu_slot/00008.png | Bin 0 -> 294 bytes .../test_verify_confirm_accepted/00000.png | Bin 0 -> 361 bytes .../test_verify_confirm_accepted/00001.png | Bin 0 -> 303 bytes .../test_verify_confirm_accepted/00002.png | Bin 0 -> 299 bytes .../test_verify_confirm_refused/00000.png | Bin 0 -> 361 bytes .../test_verify_confirm_refused/00001.png | Bin 0 -> 303 bytes .../nanox/test_menu_settings/00000.png | Bin 0 -> 485 bytes .../nanox/test_menu_settings/00001.png | Bin 0 -> 380 bytes .../nanox/test_menu_settings/00002.png | Bin 0 -> 491 bytes .../nanox/test_menu_settings/00003.png | Bin 0 -> 566 bytes .../nanox/test_menu_settings/00004.png | Bin 0 -> 363 bytes .../nanox/test_menu_settings/00005.png | Bin 0 -> 401 bytes .../nanox/test_menu_settings/00006.png | Bin 0 -> 465 bytes .../nanox/test_menu_settings/00007.png | Bin 0 -> 588 bytes .../nanox/test_menu_settings/00008.png | Bin 0 -> 666 bytes .../nanox/test_menu_settings/00009.png | Bin 0 -> 613 bytes .../nanox/test_menu_settings/00010.png | Bin 0 -> 418 bytes .../nanox/test_menu_settings/00011.png | Bin 0 -> 306 bytes .../nanox/test_menu_settings/00012.png | Bin 0 -> 418 bytes .../nanox/test_menu_settings/00013.png | Bin 0 -> 306 bytes .../nanox/test_menu_settings/00014.png | Bin 0 -> 305 bytes .../nanox/test_menu_settings/00015.png | Bin 0 -> 485 bytes .../nanox/test_menu_settings/00016.png | Bin 0 -> 590 bytes .../nanox/test_menu_settings/00017.png | Bin 0 -> 429 bytes .../nanox/test_menu_settings/00018.png | Bin 0 -> 305 bytes .../nanox/test_menu_settings/00019.png | Bin 0 -> 590 bytes .../nanox/test_menu_settings/00020.png | Bin 0 -> 595 bytes .../nanox/test_menu_settings/00021.png | Bin 0 -> 343 bytes .../nanox/test_menu_settings/00022.png | Bin 0 -> 338 bytes .../nanox/test_menu_settings/00023.png | Bin 0 -> 482 bytes .../nanox/test_menu_settings/00024.png | Bin 0 -> 315 bytes .../nanox/test_menu_settings/00025.png | Bin 0 -> 407 bytes .../nanox/test_menu_settings/00026.png | Bin 0 -> 449 bytes .../nanox/test_menu_settings/00027.png | Bin 0 -> 368 bytes .../nanox/test_menu_settings/00028.png | Bin 0 -> 315 bytes .../nanox/test_menu_settings/00029.png | Bin 0 -> 407 bytes .../nanox/test_menu_settings/00030.png | Bin 0 -> 305 bytes .../nanox/test_menu_settings/00031.png | Bin 0 -> 595 bytes .../nanox/test_menu_settings/00032.png | Bin 0 -> 550 bytes .../nanox/test_menu_settings/00033.png | Bin 0 -> 415 bytes .../nanox/test_menu_settings/00034.png | Bin 0 -> 422 bytes .../nanox/test_menu_settings/00035.png | Bin 0 -> 432 bytes .../nanox/test_menu_settings/00036.png | Bin 0 -> 413 bytes .../nanox/test_menu_settings/00037.png | Bin 0 -> 305 bytes .../nanox/test_menu_settings/00038.png | Bin 0 -> 550 bytes .../nanox/test_menu_settings/00039.png | Bin 0 -> 481 bytes .../nanox/test_menu_settings/00040.png | Bin 0 -> 535 bytes .../nanox/test_menu_settings/00041.png | Bin 0 -> 426 bytes .../snapshots/nanox/test_menu_slot/00000.png | Bin 0 -> 368 bytes .../snapshots/nanox/test_menu_slot/00001.png | Bin 0 -> 340 bytes .../snapshots/nanox/test_menu_slot/00002.png | Bin 0 -> 358 bytes .../snapshots/nanox/test_menu_slot/00003.png | Bin 0 -> 335 bytes .../snapshots/nanox/test_menu_slot/00004.png | Bin 0 -> 495 bytes .../snapshots/nanox/test_menu_slot/00005.png | Bin 0 -> 383 bytes .../snapshots/nanox/test_menu_slot/00006.png | Bin 0 -> 335 bytes .../snapshots/nanox/test_menu_slot/00007.png | Bin 0 -> 495 bytes .../snapshots/nanox/test_menu_slot/00008.png | Bin 0 -> 294 bytes .../test_verify_confirm_accepted/00000.png | Bin 0 -> 361 bytes .../test_verify_confirm_accepted/00001.png | Bin 0 -> 303 bytes .../test_verify_confirm_accepted/00002.png | Bin 0 -> 299 bytes .../test_verify_confirm_refused/00000.png | Bin 0 -> 361 bytes .../test_verify_confirm_refused/00001.png | Bin 0 -> 303 bytes .../stax/test_menu_settings/00000.png | Bin 0 -> 10511 bytes .../stax/test_menu_settings/00001.png | Bin 0 -> 11788 bytes .../stax/test_menu_settings/00002.png | Bin 0 -> 11072 bytes .../stax/test_menu_settings/00003.png | Bin 0 -> 12007 bytes .../stax/test_menu_settings/00004.png | Bin 0 -> 10511 bytes .../stax/test_menu_settings/00005.png | Bin 0 -> 7664 bytes .../stax/test_menu_settings/00006.png | Bin 0 -> 10511 bytes .../stax/test_menu_settings/00007.png | Bin 0 -> 9557 bytes .../stax/test_menu_settings/00008.png | Bin 0 -> 9246 bytes .../stax/test_menu_settings/00009.png | Bin 0 -> 9313 bytes .../stax/test_menu_settings/00010.png | Bin 0 -> 10511 bytes .../stax/test_menu_settings/00011.png | Bin 0 -> 10437 bytes .../stax/test_menu_settings/00012.png | Bin 0 -> 10360 bytes .../stax/test_menu_settings/00013.png | Bin 0 -> 10511 bytes .../stax/test_menu_settings/00014.png | Bin 0 -> 12719 bytes tests/snapshots/stax/test_menu_slot/00000.png | Bin 0 -> 9590 bytes tests/snapshots/stax/test_menu_slot/00001.png | Bin 0 -> 9533 bytes tests/snapshots/stax/test_menu_slot/00002.png | Bin 0 -> 8753 bytes .../test_verify_confirm_accepted/00000.png | Bin 0 -> 6465 bytes .../test_verify_confirm_refused/00000.png | Bin 0 -> 6465 bytes tests/test_cipher.py | 97 ++++ tests/test_menus.py | 235 ++++++++ tests/test_password.py | 146 +++++ tests/test_seed.py | 75 +++ tests/test_sign.py | 72 +++ tests/test_slot.py | 50 ++ tests/test_template.py | 82 +++ tests/test_version.py | 111 ++++ tests/usage.md | 82 +++ tests/utils.py | 318 +++++++++++ 205 files changed, 2019 insertions(+) create mode 100644 tests/application_client/__init__.py create mode 100644 tests/application_client/app_def.py create mode 100644 tests/application_client/command_sender.py create mode 100644 tests/application_client/response_unpacker.py create mode 100644 tests/conftest.py create mode 100644 tests/requirements.txt create mode 100644 tests/setup.cfg create mode 100644 tests/snapshots/nanos/test_menu_settings/00000.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00001.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00002.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00003.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00004.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00005.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00006.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00007.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00008.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00009.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00010.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00011.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00012.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00013.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00014.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00015.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00016.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00017.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00018.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00019.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00020.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00021.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00022.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00023.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00024.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00025.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00026.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00027.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00028.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00029.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00030.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00031.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00032.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00033.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00034.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00035.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00036.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00037.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00038.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00039.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00040.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00041.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00042.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00043.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00044.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00045.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00046.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00047.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00048.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00049.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00050.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00051.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00052.png create mode 100644 tests/snapshots/nanos/test_menu_settings/00053.png create mode 100644 tests/snapshots/nanos/test_verify_confirm_accepted/00000.png create mode 100644 tests/snapshots/nanos/test_verify_confirm_refused/00000.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00000.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00001.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00002.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00003.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00004.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00005.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00006.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00007.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00008.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00009.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00010.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00011.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00012.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00013.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00014.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00015.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00016.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00017.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00018.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00019.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00020.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00021.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00022.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00023.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00024.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00025.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00026.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00027.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00028.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00029.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00030.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00031.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00032.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00033.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00034.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00035.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00036.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00037.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00038.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00039.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00040.png create mode 100644 tests/snapshots/nanosp/test_menu_settings/00041.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00000.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00001.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00002.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00003.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00004.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00005.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00006.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00007.png create mode 100644 tests/snapshots/nanosp/test_menu_slot/00008.png create mode 100644 tests/snapshots/nanosp/test_verify_confirm_accepted/00000.png create mode 100644 tests/snapshots/nanosp/test_verify_confirm_accepted/00001.png create mode 100644 tests/snapshots/nanosp/test_verify_confirm_accepted/00002.png create mode 100644 tests/snapshots/nanosp/test_verify_confirm_refused/00000.png create mode 100644 tests/snapshots/nanosp/test_verify_confirm_refused/00001.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00000.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00001.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00002.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00003.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00004.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00005.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00006.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00007.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00008.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00009.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00010.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00011.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00012.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00013.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00014.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00015.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00016.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00017.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00018.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00019.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00020.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00021.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00022.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00023.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00024.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00025.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00026.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00027.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00028.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00029.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00030.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00031.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00032.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00033.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00034.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00035.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00036.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00037.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00038.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00039.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00040.png create mode 100644 tests/snapshots/nanox/test_menu_settings/00041.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00000.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00001.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00002.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00003.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00004.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00005.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00006.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00007.png create mode 100644 tests/snapshots/nanox/test_menu_slot/00008.png create mode 100644 tests/snapshots/nanox/test_verify_confirm_accepted/00000.png create mode 100644 tests/snapshots/nanox/test_verify_confirm_accepted/00001.png create mode 100644 tests/snapshots/nanox/test_verify_confirm_accepted/00002.png create mode 100644 tests/snapshots/nanox/test_verify_confirm_refused/00000.png create mode 100644 tests/snapshots/nanox/test_verify_confirm_refused/00001.png create mode 100644 tests/snapshots/stax/test_menu_settings/00000.png create mode 100644 tests/snapshots/stax/test_menu_settings/00001.png create mode 100644 tests/snapshots/stax/test_menu_settings/00002.png create mode 100644 tests/snapshots/stax/test_menu_settings/00003.png create mode 100644 tests/snapshots/stax/test_menu_settings/00004.png create mode 100644 tests/snapshots/stax/test_menu_settings/00005.png create mode 100644 tests/snapshots/stax/test_menu_settings/00006.png create mode 100644 tests/snapshots/stax/test_menu_settings/00007.png create mode 100644 tests/snapshots/stax/test_menu_settings/00008.png create mode 100644 tests/snapshots/stax/test_menu_settings/00009.png create mode 100644 tests/snapshots/stax/test_menu_settings/00010.png create mode 100644 tests/snapshots/stax/test_menu_settings/00011.png create mode 100644 tests/snapshots/stax/test_menu_settings/00012.png create mode 100644 tests/snapshots/stax/test_menu_settings/00013.png create mode 100644 tests/snapshots/stax/test_menu_settings/00014.png create mode 100644 tests/snapshots/stax/test_menu_slot/00000.png create mode 100644 tests/snapshots/stax/test_menu_slot/00001.png create mode 100644 tests/snapshots/stax/test_menu_slot/00002.png create mode 100644 tests/snapshots/stax/test_verify_confirm_accepted/00000.png create mode 100644 tests/snapshots/stax/test_verify_confirm_refused/00000.png create mode 100644 tests/test_cipher.py create mode 100644 tests/test_menus.py create mode 100644 tests/test_password.py create mode 100644 tests/test_seed.py create mode 100644 tests/test_sign.py create mode 100644 tests/test_slot.py create mode 100644 tests/test_template.py create mode 100644 tests/test_version.py create mode 100644 tests/usage.md create mode 100644 tests/utils.py diff --git a/tests/application_client/__init__.py b/tests/application_client/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/application_client/app_def.py b/tests/application_client/app_def.py new file mode 100644 index 0000000..443a0d3 --- /dev/null +++ b/tests/application_client/app_def.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests Client application. +It contains the applicatuion definitions. +""" +from enum import IntEnum + + +class ClaType(IntEnum): + """Application ID definitions""" + # Application CLA + CLA_APP = 0x00 + CLA_APP_CHAIN = 0x10 + # Special CLA for Verify with pinpad + CLA_APP_VERIFY = 0xEF + + +class InsType(IntEnum): + """Application Command ID definitions""" + INS_ACTIVATE_FILE = 0x44 + INS_SELECT = 0xA4 + INS_TERMINATE_DF = 0xE6 + INS_VERIFY = 0x20 + INS_CHANGE_REF_DATA = 0x24 + INS_RESET_RC = 0x2C + INS_GET_DATA = 0xCA + INS_PUT_DATA = 0xDA + INS_GEN_ASYM_KEYPAIR = 0x47 + INS_GET_RESPONSE = 0xC0 + INS_PSO = 0x2A + INS_INT_AUTHENTICATE = 0x88 + INS_GET_CHALLENGE = 0x84 + INS_MSE = 0x22 + + +class PubkeyAlgo(IntEnum): + """Public-Key Algorithm IDs definition""" + # https://www.rfc-editor.org/rfc/rfc4880#section-9.1 + + INVALID = 0 + + # RSA (Encrypt or Sign) + RSA = 1 + # Elliptic Curve Diffie-Hellman + ECDH = 18 + # Elliptic Curve Digital Signature Algorithm + ECDSA = 19 + # Edwards-curve Digital Signature Algorithm + EDDSA = 22 + + +class PassWord(IntEnum): + """Password type definition""" + # USER_PIN for only one PSO:CDS command + PW1 = 0x81 + # USER_PIN for several attempts + PW2 = 0x82 + # Admin PIN + PW3 = 0x83 + + +class Errors(IntEnum): + """Application Errors definitions""" + SW_STATE_TERMINATED = 0x6285 + SW_MEMORY = 0x6581 + SW_SECURITY = 0x6600 + SW_WRONG_LENGTH = 0x6700 + SW_LOGICAL_CHANNEL_NOT_SUPPORTED = 0x6881 + SW_SECURE_MESSAGING_NOT_SUPPORTED = 0x6882 + SW_LAST_COMMAND_EXPECTED = 0x6883 + SW_COMMAND_CHAINING_NOT_SUPPORTED = 0x6884 + SW_SECURITY_STATUS_NOT_SATISFIED = 0x6982 + SW_AUTH_METHOD_BLOCKED = 0x6983 + SW_DATA_INVALID = 0x6984 + SW_CONDITIONS_NOT_SATISFIED = 0x6985 + SW_COMMAND_NOT_ALLOWED = 0x6986 + SW_EXPECTED_SM_MISSING = 0x6987 + SW_SM_DATA_INCORRECT = 0x6988 + SW_WRONG_DATA = 0x6a80 + SW_FILE_NOT_FOUND = 0x6a82 + SW_INCORRECT_P1P2 = 0x6a86 + SW_REFERENCED_DATA_NOT_FOUND = 0x6a88 + SW_WRONG_P1P2 = 0x6b00 + SW_INS_NOT_SUPPORTED = 0x6d00 + SW_CLA_NOT_SUPPORTED = 0x6e00 + SW_UNKNOWN = 0x6f00 + SW_OK = 0x9000 + SW_CORRECT_LONG_RESPONSE = 0x6100 + + +class DataObject(IntEnum): + """Data Objects definition""" + + # [Read] Full Application identifier (AID), ISO 7816-4 + DO_AID = 0x4F + + # [Read/Write] Name according to ISO/IEC 7501-1) + DO_CARD_NAME = 0x5B + # [Read/Write] Login data + DO_LOGIN = 0x5E + # [Read] Cardholder Related Data + DO_CARDHOLDER_DATA = 0x65 + # [Read] Application Related Data + DO_APP_DATA = 0x6E + # [Read] Discretionary data objects + DO_DISCRET_DATA = 0x73 + + # [Read/Write] Digital signature + DO_SIG_KEY = 0xB6 + # [Read/Write] Confidentiality + DO_DEC_KEY = 0xB8 + # [Read/Write] Authentication + DO_AUT_KEY = 0xA4 + + # [Read/Write] Algorithm attributes SIGnature + DO_SIG_ATTR = 0xC1 + # [Read/Write] Algorithm attributes DECryption + DO_DEC_ATTR = 0xC2 + # [Read/Write] Algorithm attributes AUThentication + DO_AUT_ATTR = 0xC3 + # [Write] AES symmetric key + DO_KEY_AES = 0xD5 + + # [Read/Write] User Interaction Flag (UIF) for PSO:CDS + DO_UIF_SIG = 0xD6 + # [Read/Write] User Interaction Flag (UIF) for PSO:DEC + DO_UIF_DEC = 0xD7 + # [Read/Write] User Interaction Flag (UIF) for PSO:AUT + DO_UIF_AUT = 0xD8 + + # [Read/Write] Asymmetric Key Pair + DO_PUB_KEY = 0x7F49 + + # [Read/Write] Slot config + CMD_SLOT_CFG = 0x01F1 + # [Read/Write] Slot selection + CMD_SLOT_CUR = 0x01F2 + + # [Read/Write] Language preferences (according to ISO 639) + DO_CARD_LANG = 0x5F2D + # [Read/Write] Salutation (according to ISO 5218) + DO_CARD_SALUTATION = 0x5F35 + # [Read/Write] Uniform resource locator (URL, as defined in RFC 1738) + DO_URL = 0x5F50 diff --git a/tests/application_client/command_sender.py b/tests/application_client/command_sender.py new file mode 100644 index 0000000..475aedd --- /dev/null +++ b/tests/application_client/command_sender.py @@ -0,0 +1,516 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests Client application. +It contains the command sending part. +""" +from typing import Generator, Optional, Tuple +from contextlib import contextmanager + +import binascii + +from ragger.backend.interface import BackendInterface, RAPDU +from ragger.error import ExceptionRAPDU + +from application_client.app_def import ClaType, InsType, PassWord, Errors, DataObject, PubkeyAlgo + + +class CommandSender: + """Base class to send APDU to the selected backend""" + + def __init__(self, backend: BackendInterface) -> None: + self.backend = backend + + + ############### CARD interface ############### + def send_select(self) -> RAPDU: + """APDU Select + + Returns: + Response APDU + """ + + data = binascii.unhexlify(b"06D27600012401") + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_SELECT, + p1=0x04, + data=data) + + def send_activate(self) -> RAPDU: + """APDU Activate + + Returns: + Response APDU + """ + + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_ACTIVATE_FILE) + + def send_terminate(self) -> RAPDU: + """APDU Terminate + + Returns: + Response APDU + """ + + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_TERMINATE_DF) + + + ############### API interfaces ############### + def get_data(self, tag: DataObject) -> RAPDU: + """APDU Get Data + + Args: + tag (DataObject): Tag identifying the data to process + + Returns: + Response APDU + """ + + p1 = 0x00 if tag <= 0xFF else (tag >> 8) & 0xFF + p2 = tag & 0xFF + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_GET_DATA, + p1=p1, + p2=p2) + + def put_data(self, tag: DataObject, data: bytes) -> RAPDU: + """APDU Put Data + + Args: + tag (DataObject): Tag identifying the data to process + frame (bytes): Data to process + + Returns: + Response APDU + """ + + p1 = 0x00 if tag <= 0xFF else (tag >> 8) & 0xFF + p2 = tag & 0xFF + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_PUT_DATA, + p1=p1, + p2=p2, + data=data) + + + ############### SLOT interface ############### + def get_slot(self) -> int: + """APDU Get Slot + + Returns: + Response APDU + """ + + rapdu = self.get_data(DataObject.CMD_SLOT_CUR) + assert rapdu.status == Errors.SW_OK + return int.from_bytes(rapdu.data, "big") + + + def get_slot_config(self) -> Tuple[int, int]: + """APDU Get Slot config + + Returns: + Number of slots available and default one + """ + + rapdu = self.get_data(DataObject.CMD_SLOT_CFG) + assert rapdu.status == Errors.SW_OK + nb_slots = rapdu.data[0] + def_slot = rapdu.data[1] + return nb_slots, def_slot + + + def set_slot(self, slot: int) -> RAPDU: + """APDU Set Slot + + Args: + slot (int): Slot number (0 - 2) + + Returns: + Response APDU + """ + + assert slot >= 0 + assert slot <= 3 + data = slot.to_bytes(1, "big") + return self.put_data(DataObject.CMD_SLOT_CUR, data) + + + ############### PASSWORD interface ############### + def send_verify_pw(self, pwd: PassWord, value: str="", reset: bool=False) -> RAPDU: + """APDU Verify Pincode + + Args: + pwd (PassWord): Password type + value (str): Pincode value + reset (bool): Set the Pincode status to 'not verified' + + Returns: + Response APDU + """ + + if value: + assert reset is False + data = value.encode("utf-8") + else: + data = b"" + p1 = 0xFF if reset else 0x00 + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_VERIFY, + p1=p1, + p2=pwd, + data=data) + + + @contextmanager + def send_verify_pw_with_confirmation(self, pwd: PassWord) -> Generator[None, None, None]: + """APDU Verify Pincode - with confirmation + + Args: + pwd (PassWord): Password type + + Returns: + Response APDU + """ + + with self.backend.exchange_async(cla=ClaType.CLA_APP_VERIFY, + ins=InsType.INS_VERIFY, + p2=pwd) as response: + yield response + + def send_change_pw(self, pwd: PassWord, actual: str, new: str) -> RAPDU: + """APDU Change Pincode + + Args: + pwd (PassWord): Password type + actual (str): Current pincode value + new (str): New pincode value + + Returns: + Response APDU + """ + + assert actual + assert new + data = actual.encode("utf-8") + new.encode("utf-8") + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_CHANGE_REF_DATA, + p2=pwd, + data=data) + + def send_reset_pw(self, value: str) -> RAPDU: + """APDU Reset Retry Counter + + Args: + value (str): Reset Code + new PW1 Pincode value + + Returns: + Response APDU + """ + + assert value + data = value.encode("utf-8") + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_RESET_RC, + p1=0x02, + p2=PassWord.PW1, + data=data) + + + ############### Key TEMPLATE interface ############### + def set_template(self, key: DataObject, value: str): + """APDU Set Key Template + + Args: + key (DataObject): Tag identifying the key to process + value (str): String representing the OID of the key template + + Returns: + Response APDU + """ + + data = binascii.unhexlify(value) + return self.put_data(key, data) + + + ############### Perform Security Operation ############### + def set_uif(self, tag: DataObject, uif: bool): + """APDU Set User Interaction Flag + + Args: + tag (DataObject): Tag identifying the key to process + uif (bool): Enable/disable + + Returns: + Response APDU + """ + value = 1 if uif else 0 + data = value.to_bytes(2, "little") + return self.put_data(tag, data) + + + def manage_security_env(self, key: DataObject, ref: int) -> RAPDU: + """APDU Manage Security Environment + + Args: + key (DataObject): Tag identifying the key to process + ref (int): New key usage + + Returns: + Response APDU + """ + + data = b"\x83\x01" + bytes.fromhex(f"{ref:02x}") + return self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_MSE, + p1=0x41, + p2=key, + data=data) + + + def get_challenge(self, size: int) -> RAPDU: + """APDU Get Challenge + + Args: + size (int): requested Challenge size + + Returns: + Response APDU + """ + + cla = ClaType.CLA_APP + ins = InsType.INS_GET_CHALLENGE + Le = f"{size:02x}" if size < 255 else f"{size:04x}" + data = bytes.fromhex(f"{cla:02x}{ins:02x}0000{Le}") + try: + rapdu = self.backend.exchange_raw(data) + except ExceptionRAPDU as err: + rapdu = RAPDU(err.status, err.data) + + # Receive long response + return self.get_long_response(rapdu) + + + def read_key(self, key: DataObject) -> RAPDU: + """APDU Read Asymmetric Public Key + + Args: + key (DataObject): Tag identifying the key to process + + Returns: + Response APDU + """ + + return self.__key(0x81, key, False) + + + def generate_key(self, key: DataObject, seed: bool = False) -> RAPDU: + """APDU Generate Asymmetric Key pair + + Args: + key (DataObject): Tag identifying the key to process + seed (bool): Generate a key in SEED mode + + Returns: + Response APDU + """ + + return self.__key(0x80, key, seed) + + + def authenticate(self, frame: bytes) -> RAPDU: + """APDU Internal Authenticate + + Args: + frame (bytes): Data to process + + Returns: + Response APDU + """ + + return self.__pso(InsType.INS_INT_AUTHENTICATE, 0x0000, frame) + + def sign(self, frame: bytes) -> RAPDU: + """APDU Sign + + Args: + frame (bytes): Data to process + + Returns: + Response APDU + """ + + return self.__pso(InsType.INS_PSO, 0x9e9a, frame) + + def encrypt(self, frame: bytes) -> RAPDU: + """APDU Encipher + + Args: + frame (bytes): Data to process + + Returns: + Response APDU + """ + + return self.__pso(InsType.INS_PSO, 0x8680, frame) + + def decrypt(self, frame: bytes) -> RAPDU: + """APDU Decipher + + Args: + frame (bytes): Data to process + + Returns: + Response APDU + """ + + return self.__pso(InsType.INS_PSO, 0x8086, frame) + + def decrypt_asym(self, frame: bytes, algo: PubkeyAlgo = PubkeyAlgo.RSA) -> RAPDU: + """APDU Decipher with RSA + + Args: + frame (bytes): Data to process + algo (PubkeyAlgo): Public Key Algorithm + + Returns: + Response APDU + """ + + ins = InsType.INS_PSO + size = len(frame) + bFist: bool = True + # Max input size is 254 B + # Longer message uses Chaining mode APDU + # Including a Padding Indicator for the 1st message + # Including a 0x00 suffix at the end of the message + while size > 0: + if bFist: + bFist = False + # On the 1st message, add padding indicator + if algo == PubkeyAlgo.RSA: + pad_ind = b"\x00" + elif algo == PubkeyAlgo.ECDH: + pad_ind = b"\xa6" + else: + rapdu = RAPDU(Errors.SW_WRONG_DATA, b"") + break + max_len = 253 + else: + pad_ind = b"" + max_len = 254 + + if size > max_len: + d_len = max_len + cla = ClaType.CLA_APP_CHAIN + m_frame = frame[:d_len] + else: + d_len = size # Remaining len + cla = ClaType.CLA_APP + m_frame = frame[:d_len] + b"\x00" # 0x00 suffix on the last message + + data = bytes.fromhex(f"{cla:02x}{ins:02x}8086{d_len + len(pad_ind):02x}") + pad_ind + m_frame + try: + rapdu = self.backend.exchange_raw(data) + frame = frame[d_len:] + size -= d_len + except ExceptionRAPDU as err: + rapdu = RAPDU(err.status, err.data) + if rapdu.status != Errors.SW_OK: + break + + # Return result + return rapdu + + + ############### Responses ############### + def get_long_response(self, rapdu: RAPDU) -> RAPDU: + """Retrieve a synchronous Long Buffer Response + + Args: + rapdu (RAPDU): Initial Response APDU from the command + + Returns: + Response APDU + """ + + cla = ClaType.CLA_APP + ins = InsType.INS_GET_RESPONSE + rdata = rapdu.data + + # Receive long response + while (rapdu.status & 0xFF00) == Errors.SW_CORRECT_LONG_RESPONSE: + data = bytes.fromhex(f"{cla:02x}{ins:02x}0000{(rapdu.status & 0xFF):02x}") + try: + rapdu = self.backend.exchange_raw(data) + except ExceptionRAPDU as err: + if (err.status & 0xFF00) != Errors.SW_CORRECT_LONG_RESPONSE: + rapdu = RAPDU(err.status, err.data) + break + + rdata += rapdu.data + return RAPDU(rapdu.status, rdata) + + + def get_async_response(self) -> Optional[RAPDU]: + """Asynchronous APDU response + + Returns: + Response APDU + """ + + return self.backend.last_async_response + + + ############### Internal functions ############### + def __pso(self, ins: int, tag: int, frame: bytes) -> RAPDU: + """APDU Perform Security Operation + + Args: + ins (int): Value for INS parameter in APDU + tag (int): Value for P1/P2 parameter in APDU + frame (bytes): Data to process + + Returns: + Response APDU + """ + + cla = ClaType.CLA_APP + data = bytes.fromhex(f"{cla:02x}{ins:02x}{tag:04x}{len(frame):02x}") + frame + b"\x00" + try: + rapdu = self.backend.exchange_raw(data) + except ExceptionRAPDU as err: + rapdu = RAPDU(err.status, err.data) + + # Receive long response + return self.get_long_response(rapdu) + + + def __key(self, p1: int, key: DataObject, seed: bool = False) -> RAPDU: + """APDU Asymmetric Key pair + + Args: + p1 (int): Value for P1 parameter in APDU + key (DataObject): Tag identifying the key + seed (bool): Generate a key in SEED mode + + Returns: + Response APDU + """ + + data = bytes.fromhex(f"{key:02x}00") + p2 = 0x01 if seed else 0x00 + try: + rapdu = self.backend.exchange(cla=ClaType.CLA_APP, + ins=InsType.INS_GEN_ASYM_KEYPAIR, + p1=p1, + p2=p2, + data=data) + except ExceptionRAPDU as err: + rapdu = RAPDU(err.status, err.data) + + # Receive long response + return self.get_long_response(rapdu) diff --git a/tests/application_client/response_unpacker.py b/tests/application_client/response_unpacker.py new file mode 100644 index 0000000..7bb0e43 --- /dev/null +++ b/tests/application_client/response_unpacker.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests Client application. +It contains the response parsing part. +""" +from typing import Tuple + + +def _pop_sized_buf_from_buffer(buffer:bytes, size:int) -> Tuple[bytes, bytes]: + """Parse buffer and returns: remainder, data[size]""" + + return buffer[size:], buffer[0:size] + + +def unpack_info_response(response: bytes) -> Tuple[str, str]: + """Unpack response for AID: + RID (5) + Application (1) + Version (2) + Manufacturer (2) + Serial (4) + RFU (2) + """ + + assert len(response) == 16 + response, rid = _pop_sized_buf_from_buffer(response, 5) + response, app = _pop_sized_buf_from_buffer(response, 1) + response, version = _pop_sized_buf_from_buffer(response, 2) + response, manuf = _pop_sized_buf_from_buffer(response, 2) + response, serial = _pop_sized_buf_from_buffer(response, 4) + assert rid.hex() == "d276000124" + assert app.hex() == "01" + assert manuf.hex() == "2c97" + + return (version.hex(), serial.hex()) diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..5c67c7b --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,26 @@ +# from ragger.conftest import configuration + +########################### +### CONFIGURATION START ### +########################### + +# You can configure optional parameters by overriding the value of +# ragger.configuration.OPTIONAL_CONFIGURATION +# Please refer to ragger/conftest/configuration.py for their descriptions and accepted values + +######################### +### CONFIGURATION END ### +######################### + +# Pull all features from the base ragger conftest using the overridden configuration +pytest_plugins = ("ragger.conftest.base_conftest", ) + + +########################## +# CONFIGURATION OVERRIDE # +########################## + +BACKENDS = ["speculos"] + +def pytest_addoption(parser): + parser.addoption("--full", action="store_true", help="Run full tests") diff --git a/tests/requirements.txt b/tests/requirements.txt new file mode 100644 index 0000000..8220cbc --- /dev/null +++ b/tests/requirements.txt @@ -0,0 +1,2 @@ +pytest +ragger[speculos,ledgerwallet] diff --git a/tests/setup.cfg b/tests/setup.cfg new file mode 100644 index 0000000..9ce679e --- /dev/null +++ b/tests/setup.cfg @@ -0,0 +1,24 @@ +[tool:pytest] +addopts = --strict-markers --strict-config +console_output_style = count +# log_cli = True + +[pylint] +disable = C0114, # missing-module-docstring + C0115, # missing-class-docstring + C0116, # missing-function-docstring + C0103, # invalid-name + R0801, # duplicate-code + R0904, # too-many-public-methods + R0913 # too-many-arguments +max-line-length=120 +extension-pkg-whitelist=hid + +[pycodestyle] +max-line-length = 100 + +[mypy-hid.*] +ignore_missing_imports = True + +[mypy-pytest.*] +ignore_missing_imports = True diff --git a/tests/snapshots/nanos/test_menu_settings/00000.png b/tests/snapshots/nanos/test_menu_settings/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..d28e7165470322927899dc5a7e838ebb7a2dfab4 GIT binary patch literal 373 zcmV-*0gC>KP)EEs+^O!prJx>{2fkNQ=;|+Izc4Uh>Rl za|jCn-wm2}OSiGI7rjl!-ENJ6SOJlL!fIZtSo*m5{eg&AyfyDr(kZA}X!bJ(AM#9r zPvBPH-L7hGIYQ5TvktOmQZfManH_+YUP=J~0001@sP8iGZ-l&<{gx1X87IMs^GbRE zB=W1-pk*+ewC@3`T2FAz?{}Wa%|~AL4hp0>PW^Q});=Vj+ze3fN5?+RWQN^8oQdI1 TimSm100000NkvXXu0mjf(#NEY literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00001.png b/tests/snapshots/nanos/test_menu_settings/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9b3b44271e685432967cff6e4ef527dbbeecc5 GIT binary patch literal 355 zcmV-p0i6DcP)cWOt!JoB&oH^gs4vOeOUDqW7000000000000`sa)$sEng4{or z@*F^LxK(a0t!^^-f50aJ9e8DMdbFiqZD=$jwp`58z^QW$i}a=%n;bApV;b3Ai)Gf7 zb#yp(k-kpq>y8Oa_zIA8dv-8t(W`9rF%uj{>8%`s$Z=`{PSFy5VZv4}vSlYY2S@cO zVGELI?c@%ltI5(y-RBQr`enfTQuVNgr9OEjfQLQov?-8jl&uxxd=ygel`qv?1INN9 zDfu9x9YdN$=(5&2vxcYc^p&1ud*IT` z|3GprgJ7T->2)+)bU9bZ(AebU|g zdABM5jn3Qv4<)6Bz2|RzQ7?;HC1Ilcfa6);k#Kg`hAYcXT))4m=(e8L$qBE#?>@i7 zp0Ic^uaV0}W%&@9ngaQTCGEfFMg`41mhq8g(JPUsZ+H6bGcswma-5gTTfS<}C;ms9 z6dYUFVdQ&MBb@016@1T-rJoqW58h9n-SAr-<1T&Hjme_SW0Ur?)2Fyd!DfIQn_ zJpv6(15loT&{~cJ?<7j%U1by7QEO!_h}Q<#DEhHm4`6jR>j7lIv)(rc$8j9TaoVGm z1(96dDzU+5w6(y69a7{`vpXaM)Pls6p9rrrDI0K2(n=&mhg-oC-TH)d64snD;1OK9 z!NQ!gh$bLj<9@j5z)GZT{hq5w5i1) z0+YScztcTM!Jlk-p#YFJg&2r_d^*Q-`sIFjYww`KlPqOVG)UgPia3FLD?$ z-xd48yT8tonr`8i;65Eb;}r4t0mjT3fOQYFj^j9v;|$No1C*NGw$?`hmnv`7`1Lz; zI(M~3>wN$&gW!UzSQEwxzF39k5?t{YE7<%6L(N@85@tDk@D=drL*=I*Ki>-Z*j{(l ndfjwb0i>q=amv^}8~XDHBOM&h)YJc6bP7!j1WiK#00000000000C3~sq-Wn!wQncA zW;aG@AIZLbeZcQM^-jrabO+Mlps^{0`}Vo!YKl@J5p}c{F5xfskCkU{1t*Y2;-|(( zF3cHA)FjM%-i}rsQh!GuG(?9WlMHo$nUo3{!?fdRW;;Cl`-IeTfm=e` zbov#i$sBXQjakzH_x+&-0000$E4rNr=$*^vn_M7^`A_6|2Cxo&BETH%=59WhmxVQw zklBjhy}HzmRWZk)*pmH6SdgE-USI0M1Sewkh`?%VtU-zE07DPKV0UwY*Z=?k07*qo IM6N<$f_7h{Q~&?~ literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00005.png b/tests/snapshots/nanos/test_menu_settings/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..2129ece81edf507a9dda679d5096fd9935e90673 GIT binary patch literal 452 zcmV;#0XzPQP);r;?xY z5sFT1du1cXo_p`--L}_NsSWX48=g*&e#V}{%`^&&=`%EnfG&n^fD&$+e0J)mAOKwW z^aua|0Dxz)T_2KvSI|PHC00p~h>!>}sjwBrPli{UgCUBZSf;FCiU3jXNpTeAEGTedRycgamv1I*E zL_LqSJzfCnn{W;Cctua9mlv*w!VW?8R8?hDkmwuDdo&?!F^#(ST!G>@vpG5)NHdsd z4B_0sT0000O6fDFv(b(IuFr#MXz}p5mivhE( z##2eTECHtQJB;8t5b}`H`8f1KqWkZ~;%emg`AP&s+8Y0000O41}qp@BhFa^gxY~4Jp-X z2VN|va^5`;p$h<(l0AizX7yOw~~761iUrC7k{gV?{y;A%qY@2${|j-Jnjg zn)JssjptKlYBpG2(vq?yDWVP%g_=fh@Rg#TNxMQPSdOMZPNM~-lcYvi0Z7yc9r3a! zm;OF+)$^v*`lJ6&2?U@HX?6^7*T!u}%8y!`vh$duGq@V5V_QF#0_olV8fa!1%W z-|^7A{{temrW13@v!Rtqhi9FADPs#t4M0aATuo)CZ0QJXsF-fPW1@HhzW)RF&>c(+1w^`4tNcMyk|O~e5n>V3ZmNVOS;?y{+6Djs000000EV;8b||VLUI(@6 zCKFKrn_ar{;+EzJ(<`!km2klYKUPYx{^FuJ=YZhkF8Q--H}= zd76U~MCazbkQz@V<+22r!tc;IwRqQW5~;Z%r0+Kiea#X??thzx*yUS0OnprH$5)Uf zO921?00000u$bxR0VaOgRSU?7zHbht1!ugEb;H*lA}@D#jrCDM*Y6av9>~yp(aF8c z(uHMKn|{b$O}%r1SVlNS+05LekVQG3*MCgl{5@;ZzbL@j${l-_WHtjO;)x z`Zs*tJLWVa-(VTwX|YMrcz6^>dDDo{%t^r-1}N|892;<_?+ExZ0w)2^bA0Avr~0vv zue~Dc{b&Gcn`VP5y*4P5=zN@0p!rmZRb~MFjhZlY$L$VZhPjmaRKwT~68fG*#0t1J z7~$p5JWTt(#U0WY0RR910002s5lq<+xF1iA;!lrQwImg)r%0nml9V#a+mPXLKR-n) zvTtSzL1z^7nM41zGw*f!`fYTQU7tz5aE|&;tKT&7$n=yq;KF9F$-wETs+#4IzR?r= U9nojBqW}N^07*qoM6N<$f>N!(djJ3c literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00010.png b/tests/snapshots/nanos/test_menu_settings/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7c9a600ef626eddfb288a4c743e91a43117e85 GIT binary patch literal 374 zcmV-+0g3*JP)@=l# z^jS{*uQSBMWjw<~FT*@cY4SV@qRqRNgceCwo-Vak-6M@qH$WeyB=!#6QV_85-8}$L zMDhUu0002^;dT%UT|6-Zl#+~-Uy7%SD%%0#-pD@CireG< zhmpA%zp$nk{tsvhEoFTz(eL5POSsv=;un}0Ox&x$|A5Wl0RR9100000003YiHz}&) Uo|NGM{r~^~07*qoM6N<$f<3yaC;$Ke literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00011.png b/tests/snapshots/nanos/test_menu_settings/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6843cb799a9f50f0b5bb2f7b4f0ebdf796ba1e GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA5fsd`Tr$B>FSZ?Em3sk{3vtjNnp!PPY)J`{H->78)xsky>R!M_K$D+Oq0u!<}WudIKHB2 zo5jNM29S?|QUmuW@V-xp#IyDFwXyR6+1ly3i(OTkZm;mfI92_ojvF>*hx eB!L!#z=bRPNj_2nb{?juL0nH)KbLh*2~7aJwnnc2 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00012.png b/tests/snapshots/nanos/test_menu_settings/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf2ccdab1dfc0879a1e91a4b7756e1a603ef75e GIT binary patch literal 362 zcmV-w0hRuVP))YJc6bP7!j1WiK#00000000000C3~sq-Wn!wQncA zW;aG@AIZLbeZcQM^-jrabO+Mlps^{0`}Vo!YKl@J5p}c{F5xfskCkU{1t*Y2;-|(( zF3cHA)FjM%-i}rsQh!GuG(?9WlMHo$nUo3{!?fdRW;;Cl`-IeTfm=e` zbov#i$sBXQjakzH_x+&-0000$E4rNr=$*^vn_M7^`A_6|2Cxo&BETH%=59WhmxVQw zklBjhy}HzmRWZk)*pmH6SdgE-USI0M1Sewkh`?%VtU-zE07DPKV0UwY*Z=?k07*qo IM6N<$f_7h{Q~&?~ literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00013.png b/tests/snapshots/nanos/test_menu_settings/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ba692960d3fdc655789114f812a644638630f2 GIT binary patch literal 426 zcmV;b0agBqP)uHMKn|{b$O}%r1SVlNS+05LekVQG3*MCgl{5@;ZzbL@j${l-_WHtjO;)x z`Zs*tJLWVa-(VTwX|YMrcz6^>dDDo{%t^r-1}N|892;<_?+ExZ0w)2^bA0Avr~0vv zue~Dc{b&Gcn`VP5y*4P5=zN@0p!rmZRb~MFjhZlY$L$VZhPjmaRKwT~68fG*#0t1J z7~$p5JWTt(#U0WY0RR910002s5lq<+xF1iA;!lrQwImg)r%0nml9V#a+mPXLKR-n) zvTtSzL1z^7nM41zGw*f!`fYTQU7tz5aE|&;tKT&7$n=yq;KF9F$-wETs+#4IzR?r= U9nojBqW}N^07*qoM6N<$f>N!(djJ3c literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00014.png b/tests/snapshots/nanos/test_menu_settings/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7c9a600ef626eddfb288a4c743e91a43117e85 GIT binary patch literal 374 zcmV-+0g3*JP)@=l# z^jS{*uQSBMWjw<~FT*@cY4SV@qRqRNgceCwo-Vak-6M@qH$WeyB=!#6QV_85-8}$L zMDhUu0002^;dT%UT|6-Zl#+~-Uy7%SD%%0#-pD@CireG< zhmpA%zp$nk{tsvhEoFTz(eL5POSsv=;un}0Ox&x$|A5Wl0RR9100000003YiHz}&) Uo|NGM{r~^~07*qoM6N<$f<3yaC;$Ke literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00015.png b/tests/snapshots/nanos/test_menu_settings/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3a2f44067056a1f3b73d245b087738a655fc1f GIT binary patch literal 307 zcmV-30nGl1P)@EJjZ7W+=xutz=s%SxT^&6MrN7A$2cBHE8y_v@QrySoOLF6@n zwD#p0w2TvnKiU{f09ofzWw1FXj7@f(HYR{_qCZ_n)xp1*L%9=VEhxKQEw?TM={aEO zkN=rY#oZjls*Ya$AU=qN6%G36)Nep?rnUnB0000Gx&ejCUKP)EEs+^O!prJx>{2fkNQ=;|+Izc4Uh>Rl za|jCn-wm2}OSiGI7rjl!-ENJ6SOJlL!fIZtSo*m5{eg&AyfyDr(kZA}X!bJ(AM#9r zPvBPH-L7hGIYQ5TvktOmQZfManH_+YUP=J~0001@sP8iGZ-l&<{gx1X87IMs^GbRE zB=W1-pk*+ewC@3`T2FAz?{}Wa%|~AL4hp0>PW^Q});=Vj+ze3fN5?+RWQN^8oQdI1 TimSm100000NkvXXu0mjf(#NEY literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00017.png b/tests/snapshots/nanos/test_menu_settings/00017.png new file mode 100644 index 0000000000000000000000000000000000000000..f587c796fbce8db0d6e0dc007ac7c5df350d6afc GIT binary patch literal 425 zcmV;a0apHrP)J!W4fbXSp)ko_PYUH$DB{*qrt*IA3wG_8eN|AcB$ylQALnHqJkKQgU8gC!nAR}XbhR=)?RF>#wHDL9Ot4 zjDCssCOq{GUMh}Nc%fTA(W#c~nOR$w37?iFGk%CG;))4qSJPP7dTf26D#MOO9Y-C! zzxFMIZkRu>OXRu*Q64FmW1+5CksjYG<}qXEA%6<5HW9$`#>RoHN*!lBF^DWnJIugV zf<4jJbmB3z?|JJdwpsEy9DfK$S^)q600000fM2IdE=+i_^q=8s#5TVSE&VU3ssfhg zv5k+Wvif^~gD(g&&0xqkfEC)q#uIQ$>uV|ZtGRM|WZ7JnPQdNbo1}_c-B`f~#gP3` T)ADpB00000NkvXXu0mjfHiNjw literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00018.png b/tests/snapshots/nanos/test_menu_settings/00018.png new file mode 100644 index 0000000000000000000000000000000000000000..9f4ba09ee54fb6171ae57ed6d8e498c8cdc02c34 GIT binary patch literal 285 zcmV+&0pk9NP)7E*}RIaZ-H0{{R3004MQ@b18jV=s2YR=3BN zxSNh@dwF+Y;MnVOr?SS)nmnf7O@?Fu%U|J9m1hHckX`^c{eU=T&|Wla5ewi-^?#Pw zD}%5V7d`g;1BwN3YmFTLoKps6^-V4SyOzP1;=11&#SEGb=mlVd3{qpdr8!?s_v%OP z9RL6T03bnfJs^Jslc+|q(|hLm_ZL>hOio=V^Wou^ z4|m+P3wWjrm(BE#nRa8v$>}?zL^W6E@kX|s&?+_1PCuNQo#wM*@>jLRZ`OU&QF+85 zuJb&&E!Qh_!~3kOwO11@s;?~!us(3i>F0r#vOh9u{+>q;G3MoT@PFylpBb%w{A1X* zo=6bx^?k)`;;DdOU+&9C<^>2mdKI;Vst06krW%>V!Z literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00020.png b/tests/snapshots/nanos/test_menu_settings/00020.png new file mode 100644 index 0000000000000000000000000000000000000000..14b8dd71572ba40c70fbef617afc072d310f654c GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA5fsTZCujv*Cu-rhLPcSu3NAu#LB z|M~*)Qb(5=><5=LUc4tPK9z4Gk3wQl*BhHB&2>*rXVspK^R^A+fADVJYW9SSuS;&* z_ujtOGIf2N1kgB!Bb(OBIV{~*A6we{XIYvY+~NEG$xeSmOpu;kHWvj)}B|`y05P8 zsCmY-f2(l7J=Yn{mm=);uYR)mY+aU`!=Ble>}h{1=kW1aL|e|!N;t^(@XT$lMH}lm k)L$o<_g8_O1O(+Dn39|(dcC-_z#PQ&boFyt=akR{06Tzpy8r+H literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00021.png b/tests/snapshots/nanos/test_menu_settings/00021.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3a2f44067056a1f3b73d245b087738a655fc1f GIT binary patch literal 307 zcmV-30nGl1P)@EJjZ7W+=xutz=s%SxT^&6MrN7A$2cBHE8y_v@QrySoOLF6@n zwD#p0w2TvnKiU{f09ofzWw1FXj7@f(HYR{_qCZ_n)xp1*L%9=VEhxKQEw?TM={aEO zkN=rY#oZjls*Ya$AU=qN6%G36)Nep?rnUnB0000Gx&ejCUKP)EEs+^O!prJx>{2fkNQ=;|+Izc4Uh>Rl za|jCn-wm2}OSiGI7rjl!-ENJ6SOJlL!fIZtSo*m5{eg&AyfyDr(kZA}X!bJ(AM#9r zPvBPH-L7hGIYQ5TvktOmQZfManH_+YUP=J~0001@sP8iGZ-l&<{gx1X87IMs^GbRE zB=W1-pk*+ewC@3`T2FAz?{}Wa%|~AL4hp0>PW^Q});=Vj+ze3fN5?+RWQN^8oQdI1 TimSm100000NkvXXu0mjf(#NEY literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00023.png b/tests/snapshots/nanos/test_menu_settings/00023.png new file mode 100644 index 0000000000000000000000000000000000000000..f587c796fbce8db0d6e0dc007ac7c5df350d6afc GIT binary patch literal 425 zcmV;a0apHrP)J!W4fbXSp)ko_PYUH$DB{*qrt*IA3wG_8eN|AcB$ylQALnHqJkKQgU8gC!nAR}XbhR=)?RF>#wHDL9Ot4 zjDCssCOq{GUMh}Nc%fTA(W#c~nOR$w37?iFGk%CG;))4qSJPP7dTf26D#MOO9Y-C! zzxFMIZkRu>OXRu*Q64FmW1+5CksjYG<}qXEA%6<5HW9$`#>RoHN*!lBF^DWnJIugV zf<4jJbmB3z?|JJdwpsEy9DfK$S^)q600000fM2IdE=+i_^q=8s#5TVSE&VU3ssfhg zv5k+Wvif^~gD(g&&0xqkfEC)q#uIQ$>uV|ZtGRM|WZ7JnPQdNbo1}_c-B`f~#gP3` T)ADpB00000NkvXXu0mjfHiNjw literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00024.png b/tests/snapshots/nanos/test_menu_settings/00024.png new file mode 100644 index 0000000000000000000000000000000000000000..5a48081dd5051ff924e84b3469aa07919cafe628 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA64Ffginx;TbZ%y~QOAm3pHj<)R0 z`~EY3zaZ-~gK1k6g%Zd0M%&Em_}D zb@=n^9;5KR&`Nv$eKj6?6Xfh8}xr&1o!L1Vk000000BC0DJpd6Ana1UK_$`t7 z_|d+-2k@d?7X_FAhpr5ro;>0=^Me8A{?oDVeMxF;zBHS~pkAJ2Un5D&OXYo;NbD70 zxgTQ{%#)tXmTGhF&jYZdGX36X0#4aVdavC^=U|g&LzCy^;~v5Q0002qr{52;y0T1!y22A2tgIcm@aEzb<0|fPTZ%}^61)E>ymU!9 zE5M#AHcNue%lti^gJO5ri?;%NXNzdndtEDk9nFW#YW*n000000NkvXXu0mjf%N~jF literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00026.png b/tests/snapshots/nanos/test_menu_settings/00026.png new file mode 100644 index 0000000000000000000000000000000000000000..13b02118b78de85dd93e541d075e67b7cfd4e5b3 GIT binary patch literal 383 zcmV-_0f7FAP)j2< z9=7z6(7OXWyi8%&W|+5+??7KoV@c{7=z21X z`T@i+X^beb(~VeMURkX?4>F;NdZvRQor35ZJ?ZVC?w+chuZ(tw&zxzm*b^YGwSNwD zx@-kahjHr8IT+K;Uqfkj=Bua~b+nx7!16`dNeuu1000000FNOGGM8l;Q{<`22=dWw zd?|-@sYTnQ_5Tkrcl^$|!6{V^gzhioWg%Gka(_uu?kv=fpOh|cJocP*b^@;@Z8G%@ db2|E8`2bb0^zK*g+eQEY002ovPDHLkV1iuqtC9c! literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00027.png b/tests/snapshots/nanos/test_menu_settings/00027.png new file mode 100644 index 0000000000000000000000000000000000000000..e943171a4ed1034b14f49329a5e17ee76eff5782 GIT binary patch literal 399 zcmV;A0dW3_P)j5= z9=7$7(7S*g-li~bmN-bq-0jSmweUFs00000005vJ6%JzJaE1A{F3ULVcuT01HDy^p44_# ze4f(&r2fp3d;wyyG()u5C?Gah?Z}-r*|kx5eC!Vw>xRv6+=A#cy53ttg%;pJGK41ITwpzYXM=Mt)asY9F%)OW(7cC6kbCYJG*zVszY4 z7Kh}by_0DN=858+ZVHYhfg|4T4*&oF06(*VgsUq*!gc|(Eud@;Ts}T_N`KwuB(OBhZV!VMwQy`W3j9H zgJth+2`lXz?Hh&Fu925r)kN$+q@SsfmkeM^qu?s`)7O3p0-y)JasmJV0N@V^GaHxN z3>=XraLb18vAafNDWZd@y~NQxyr6vQaE*aK^AL_s!qY>ku>)cKic3X_D^zJ#IDiM> zL|TUODa%eVp1Hi5J0RWj-~$Ej8_)err12EuHgiC6&%X~Gt~LsBJVl?E>aCOhaolV z&;Mpy3-(n;Gd6T`$n5eLQf%3vc6*!M^NBjk_8nd{N&i^-HpcZ2za5Qz|MQ&L1H)^l zl?s2mD!Bqp1e!i`hvVOthnMa)c(g_xeP$-G`|8CT6}cWNF_s%@O!e*i-`W(dsjQ=E)&wcuik)rfdt_3f{?iRP&n~^Kmp`fC8nJT2iX-*6PoB7t z;B)a@%MqUjdAIwP0k8F9;?K%n)&3}|mgY9qe!csPuN;%=_xT=QtL|pAvp0B_@se|k z4tCi0hBwPD`1kb|d)P^a{rVnBzWkMKY3mM7F)%Ut%(K<&%~r`=xiXcyz}(sMH-nuI bA~q=4o4%X*^u&SAjUcY4tDnm{r-UW|;DwF5 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00031.png b/tests/snapshots/nanos/test_menu_settings/00031.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd11a4624de13a18b05f096a2427300095d8ddc GIT binary patch literal 425 zcmV;a0apHrP)Q-R5Go&TbDM6951J00000;+UFfVyB zXm0!a(-ugj`$Xr6>2xd%eVg+6OzUv00000NkvXXu0mjfy9T?7 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00032.png b/tests/snapshots/nanos/test_menu_settings/00032.png new file mode 100644 index 0000000000000000000000000000000000000000..fd243cd3af2ca9a04f793a0c5ea18fbcfc04a4b0 GIT binary patch literal 380 zcmV-?0fYXDP)@@3eo90W37^Jc*)d`+5gb5*p5JCtcB#6nSEz_ckyhi0j+hI(86lu%EkqJBR z0o4Z>j(8fBA~4rq7hMBTr8JxYQf2$24wZ>p)=^#x7rSjnsTk)e3gUp~_F}M4^WoiM znN#}4V_hPJ8;!nMf&~YtczMoJ4TgIHtUrYs&wVuP9gxpe`{0cPEI4^QVJ->>;3{#~ z2Y4ru&sC@O)~kPhlI{8IBv8lhF{QLF|DS3+Rc}FG>!%EONuwZRC>Cx>lJ4{ie?kZ$ zg!IF=AJCe*kGIIfINuS+e#LxYA|{I;#ZPNdVBk0XPTz()IbDn7euJ?YFaR%{0aq9` a-jN^kPPwi7=@9Jz0000*VgsUq*!gc|(Eud@;Ts}T_N`KwuB(OBhZV!VMwQy`W3j9H zgJth+2`lXz?Hh&Fu925r)kN$+q@SsfmkeM^qu?s`)7O3p0-y)JasmJV0N@V^GaHxN z3>=XraLb18vAafNDWZd@y~NQxyr6vQaE*aK^AL_s!qY>ku>)cKic3X_D^zJ#IDiM> zL|TUODa%eVp1Hi5J0RWj-~$Ej8_)err12EuHgiC6&%X~Gt~LsBJVl?E>aCOhaolV z&;Mpy3-(n;Gd6T`$n5eLQf%3vc6*!M^NBjk_8nd{N&i^-HpcZ2za5Qz|MQ&L1H)^l zl?s2mD!Bqp1e!i`hvVOthnMa)c(g_xeP$-G`|8CT6}cWNF_s%@O!e*i-`W(dsjQ=E)&wcuik)rfdt_3f{?iRP&n~^Kmp`fC8nJT2iX-*6PoB7t z;B)a@%MqUjdAIwP0k8F9;?K%n)&3}|mgY9qe!csPuN;%=_xT=QtL|pAvp0B_@se|k z4tCi0hBwPD`1kb|d)P^a{rVnBzWkMKY3mM7F)%Ut%(K<&%~r`=xiXcyz}(sMH-nuI bA~q=4o4%X*^u&SAjUcY4tDnm{r-UW|;DwF5 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00035.png b/tests/snapshots/nanos/test_menu_settings/00035.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3a2f44067056a1f3b73d245b087738a655fc1f GIT binary patch literal 307 zcmV-30nGl1P)@EJjZ7W+=xutz=s%SxT^&6MrN7A$2cBHE8y_v@QrySoOLF6@n zwD#p0w2TvnKiU{f09ofzWw1FXj7@f(HYR{_qCZ_n)xp1*L%9=VEhxKQEw?TM={aEO zkN=rY#oZjls*Ya$AU=qN6%G36)Nep?rnUnB0000Gx&ejCUKP)EEs+^O!prJx>{2fkNQ=;|+Izc4Uh>Rl za|jCn-wm2}OSiGI7rjl!-ENJ6SOJlL!fIZtSo*m5{eg&AyfyDr(kZA}X!bJ(AM#9r zPvBPH-L7hGIYQ5TvktOmQZfManH_+YUP=J~0001@sP8iGZ-l&<{gx1X87IMs^GbRE zB=W1-pk*+ewC@3`T2FAz?{}Wa%|~AL4hp0>PW^Q});=Vj+ze3fN5?+RWQN^8oQdI1 TimSm100000NkvXXu0mjf(#NEY literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00037.png b/tests/snapshots/nanos/test_menu_settings/00037.png new file mode 100644 index 0000000000000000000000000000000000000000..f587c796fbce8db0d6e0dc007ac7c5df350d6afc GIT binary patch literal 425 zcmV;a0apHrP)J!W4fbXSp)ko_PYUH$DB{*qrt*IA3wG_8eN|AcB$ylQALnHqJkKQgU8gC!nAR}XbhR=)?RF>#wHDL9Ot4 zjDCssCOq{GUMh}Nc%fTA(W#c~nOR$w37?iFGk%CG;))4qSJPP7dTf26D#MOO9Y-C! zzxFMIZkRu>OXRu*Q64FmW1+5CksjYG<}qXEA%6<5HW9$`#>RoHN*!lBF^DWnJIugV zf<4jJbmB3z?|JJdwpsEy9DfK$S^)q600000fM2IdE=+i_^q=8s#5TVSE&VU3ssfhg zv5k+Wvif^~gD(g&&0xqkfEC)q#uIQ$>uV|ZtGRM|WZ7JnPQdNbo1}_c-B`f~#gP3` T)ADpB00000NkvXXu0mjfHiNjw literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00038.png b/tests/snapshots/nanos/test_menu_settings/00038.png new file mode 100644 index 0000000000000000000000000000000000000000..5a48081dd5051ff924e84b3469aa07919cafe628 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA64Ffginx;TbZ%y~QOAm3pHj<)R0 z`~EY3zaZ-~gK1k6g%Zd0M%&Em_}D zb@=n^9;5KR&`Nv$eKj6?6Xfhg{{Mq}sE2l314L^hXu9XAAxcAJ@@h(6EVE`L7u>nD)SfzO^kDRDzRfVX z$HNeH5rAgT+x{Fi(NTN2|!iC@cH4P35NByeIK6DvrE=^ z`?U@6KiZ`J+HT#rA=_S3Q2+n{000004P5sFzFn|cp1em&IfHmi^UwEi`xB&;VEX|? z$Jd4aGRnPk1iU0rr literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00040.png b/tests/snapshots/nanos/test_menu_settings/00040.png new file mode 100644 index 0000000000000000000000000000000000000000..e6530b7da3b1fd7c3959c373297ba271e06d21f8 GIT binary patch literal 388 zcmV-~0ek+5P)VI` zC|!!eCTRO{^d_KMk545`39$ENOp*obUvCuI$a_>`aT28`A2(&S<;qOy;^`+utLinD?pr~om7+9yDJU1LjxU3 z{y`ByZ~U*v9R;}kCrh8d8FRO6C#eQ(HN5;u>E>7{uT@-VpP`Oke8Q@o8c$8q=!dQX zWSVH|G^R-$Z87HL!C5=+g-4b!*4w>(DcN>GFZSHS{;oJ)!~g&Q006)gy6xy5M9Xup zx0SVwIE+8-fIsa203T@uaBD%d{zYe)ddS?Q%KUw9_iqIE1Gvd7+Rma;tcU3V>(W^$*A|so=eiS0Uk^Cw6B~_^C!9KosP;}m%6j*Q&d_Lp{C@v-UIMP zUgTtQjN9k{000000Kh*ob*hIiz~eT(z=rEW-{m}>04=BnJ_2<5NKP;X4AVjmbs?q9 zTglZRtetRBhw|N07PyutQuC64Of`w@HMMg=X*00%xB{(e0MYfDa7-W72$lOl82r(? z&0Qj&dB@5dfPU-W2AhA&qT4nJi4UnzD4%Lrvj#B563^wZpJU@9j~x+H_%2bgHNf?G-ozLsyf$jo04m~Mq7{rpCxGy?py(Bf<5!ReF6E?ja1 a{1Zw55j{&uzO0 z5M^HGWb!v2t2+Py00000K9OxkBmC_2?bh}0W@Al4GkK7ojyCG zU?xpV<^DK`c-C>KGk|{MGeAG50`=*wieWpXOFX5r@kb$h0H&DSNu!6Efw)w8V6U8c zVjR@e*MM+^KEYdSXV@m$9*nXFE){=--3z}-);&j$MeiXQ9Q{ j#)H$H#wpw~13rmw)W;Voq!@Wr00000NkvXXu0mjfx~Rp` literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00043.png b/tests/snapshots/nanos/test_menu_settings/00043.png new file mode 100644 index 0000000000000000000000000000000000000000..aeff3d5af0dfdc088ee7ff56b53f450c755f08ae GIT binary patch literal 444 zcmV;t0YmB%2}rH=NMI+sWPht}Vp@(``4+-!FW4yTn7s$^btdlt6yUQyHisYxf*=T< z$1DpH$-7r3!w+TOf>&}xRi~TX5%4HQs5!n6ZfjO2KuysqBti$RaEWU{LOThY&LHv# zuhnp2$yq{^P@j1}XgWbn)YR{#YE?=}2>?z#i=l`Os)XvtX6FZ6yX{oMpLx9V08pD< z3}{SZzBl!UhWrVujRiooS;Ro~b1VIo4!D!q(Pj$2Vto66RE0;|*e7pp;&L3qJcEfMp4UoA?bgkJ!t1#P@0fhdEP)Z#OnMFRL1qX<$=$*3)vvfNqcsZ99e%1z0*OqbpmK@;s^KCmXzSS$j(7ZEhS=VW-4&Y zX$=hPOE~9w% z<=7m!31(^@w!~wIco-*5%Z8?hnONMU_1P`e9E^npZ=!_y*=z zPrZm%Xt*H~dwSY=6y2T|Q-N8y{Zhbv{9HO}LL}vxqhPM9l6#!H00000000000001Z ZDPQJG*|%1oc;5g3002ovPDHLkV1jE0r{n+t literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00045.png b/tests/snapshots/nanos/test_menu_settings/00045.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3a2f44067056a1f3b73d245b087738a655fc1f GIT binary patch literal 307 zcmV-30nGl1P)@EJjZ7W+=xutz=s%SxT^&6MrN7A$2cBHE8y_v@QrySoOLF6@n zwD#p0w2TvnKiU{f09ofzWw1FXj7@f(HYR{_qCZ_n)xp1*L%9=VEhxKQEw?TM={aEO zkN=rY#oZjls*Ya$AU=qN6%G36)Nep?rnUnB0000Gx&ejCUKP)EEs+^O!prJx>{2fkNQ=;|+Izc4Uh>Rl za|jCn-wm2}OSiGI7rjl!-ENJ6SOJlL!fIZtSo*m5{eg&AyfyDr(kZA}X!bJ(AM#9r zPvBPH-L7hGIYQ5TvktOmQZfManH_+YUP=J~0001@sP8iGZ-l&<{gx1X87IMs^GbRE zB=W1-pk*+ewC@3`T2FAz?{}Wa%|~AL4hp0>PW^Q});=Vj+ze3fN5?+RWQN^8oQdI1 TimSm100000NkvXXu0mjf(#NEY literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00047.png b/tests/snapshots/nanos/test_menu_settings/00047.png new file mode 100644 index 0000000000000000000000000000000000000000..f587c796fbce8db0d6e0dc007ac7c5df350d6afc GIT binary patch literal 425 zcmV;a0apHrP)J!W4fbXSp)ko_PYUH$DB{*qrt*IA3wG_8eN|AcB$ylQALnHqJkKQgU8gC!nAR}XbhR=)?RF>#wHDL9Ot4 zjDCssCOq{GUMh}Nc%fTA(W#c~nOR$w37?iFGk%CG;))4qSJPP7dTf26D#MOO9Y-C! zzxFMIZkRu>OXRu*Q64FmW1+5CksjYG<}qXEA%6<5HW9$`#>RoHN*!lBF^DWnJIugV zf<4jJbmB3z?|JJdwpsEy9DfK$S^)q600000fM2IdE=+i_^q=8s#5TVSE&VU3ssfhg zv5k+Wvif^~gD(g&&0xqkfEC)q#uIQ$>uV|ZtGRM|WZ7JnPQdNbo1}_c-B`f~#gP3` T)ADpB00000NkvXXu0mjfHiNjw literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00048.png b/tests/snapshots/nanos/test_menu_settings/00048.png new file mode 100644 index 0000000000000000000000000000000000000000..5a48081dd5051ff924e84b3469aa07919cafe628 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA64Ffginx;TbZ%y~QOAm3pHj<)R0 z`~EY3zaZ-~gK1k6g%Zd0M%&Em_}D zb@=n^9;5KR&`Nv$eKj6?6Xfhg{{Mq}sE2l314L^hXu9XAAxcAJ@@h(6EVE`L7u>nD)SfzO^kDRDzRfVX z$HNeH5rAgT+x{Fi(NTN2|!iC@cH4P35NByeIK6DvrE=^ z`?U@6KiZ`J+HT#rA=_S3Q2+n{000004P5sFzFn|cp1em&IfHmi^UwEi`xB&;VEX|? z$Jd4aGRnPk1iU0rr literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00050.png b/tests/snapshots/nanos/test_menu_settings/00050.png new file mode 100644 index 0000000000000000000000000000000000000000..686a164c61f6f06a0ce4bff4d462bd6dab37230a GIT binary patch literal 335 zcmV-V0kHmwP)E`|2Au%;I~gzrcHq?r!CB$HtQ h000000001BB5&|jqrJIt$5Q|R002ovPDHLkV1lIMl|ujk literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00051.png b/tests/snapshots/nanos/test_menu_settings/00051.png new file mode 100644 index 0000000000000000000000000000000000000000..815d526e4e3658fadef83b08e969f7c0f4ba156b GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA5fslT2sjv*Cu-cGy7*KEMy`r7FK z|K{2Y?7WG(W?O=cw-;|>UwdMyNP#9JP%Q}DIVSQfGj_`Lo%av_TenYc?dz1D3)-hH zHu~M4d*s!+?uS{k`r{V_c)izfH$8RhV|eg2u7Bq~yiV&by1nG8cM1EH6K0!kK3b!e zdwF7Qu&bD_apjV;M|M08ImNqb>I*&t?rl6uHEx!r#*cU1lw51Ok^AM1DeW(qZydEV z?JHgQ=SEdc+;!jQp5@QBRLh){6cOZ;b8KYZvhurjTGfUvZRvG$=0@D~cji;j&fR&I z?ZwoyUtZ2ioRQ|NT%+=E=MSl4|GArvf8PC+AL5k{B?ea?<9D-oLD|&%-PT$|(HZC!;i+wLJNbmjHXO{Ee zy#LGJJJw4j>tATE{h7ajH)BbB%m%$LTmqBpI_4%XzqLH6_ROkl4Ti4wW&YM4eG&UB z?1S77rZa-q8okf`#p#@_IafU>o6c%Gf`C6Pw8M0NWP< zYb5qJr2TMTUAfC^+Z(R>^NU&UTHXk6p6hMAWPR3D2lJ$V;qTdh*?hER-YcBvKkw>g t@jrG81V3_L692>HanGcz0}MD`Fi+VM{jT+}UO&+H44$rjF6*2UngB)Yf|>vT literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_menu_settings/00053.png b/tests/snapshots/nanos/test_menu_settings/00053.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d458d5f29c20c496e0696f126f309f42a4838d GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA5fsfnI0jv*Cu-d^3v*Py`TdNJwA zfBPAX?P?qxYR5EM?+A+*F05sB1u6uB37w8fFZMm+U-|NMX}$d3#_~@FbMn`pIsUBU z<(u#C7G?II2-82Ja4veyLaFE3uUD^U^Uly@zVNPF;_QNxKR-`2S}y5zg304<_%Y)h vJMRZe7#A!y|Iotcl7H;_Pflit6+aFzp00FVbG&5YC6IuptDnm{r-UW|n{G8YYvv}Z;D#PJ^P z#m>HN*^bXNiWZnD#|#fZ+O2MOv_g2Qnvt5-ymlMoHNY)y#>emxkp6QwT5yIm%s2pX zAk+15$oB4mbf29;HR-+(SWwcI?ZH8JuC;~wc4*Z{40=&Ft78qYK-;G$?t*gJo?ezk zn|&Q!HX{Q$2R!JAq$D0S#Jtl;@=E$nMTp-L(!!8>)1T}-&90Nu(N)lNTdq@!n$mOl zqD!w1$M*;bMENvwixrn|7~JR{@g0Di=>BwU#{CpTr;8ubJ!1b+UWszO6$=Z?Z(-aZ g9SZ;e001zL4{oE+ALF=uJpcdz07*qoM6N<$g2iX8tN;K2 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_verify_confirm_refused/00000.png b/tests/snapshots/nanos/test_verify_confirm_refused/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6820c015b0ac20edefb9ffc2c06540e8e8502d GIT binary patch literal 386 zcmV-|0e$|7P)n{G8YYvv}Z;D#PJ^P z#m>HN*^bXNiWZnD#|#fZ+O2MOv_g2Qnvt5-ymlMoHNY)y#>emxkp6QwT5yIm%s2pX zAk+15$oB4mbf29;HR-+(SWwcI?ZH8JuC;~wc4*Z{40=&Ft78qYK-;G$?t*gJo?ezk zn|&Q!HX{Q$2R!JAq$D0S#Jtl;@=E$nMTp-L(!!8>)1T}-&90Nu(N)lNTdq@!n$mOl zqD!w1$M*;bMENvwixrn|7~JR{@g0Di=>BwU#{CpTr;8ubJ!1b+UWszO6$=Z?Z(-aZ g9SZ;e001zL4{oE+ALF=uJpcdz07*qoM6N<$g2iX8tN;K2 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00000.png b/tests/snapshots/nanosp/test_menu_settings/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..993d9535512ba1b94e35d0cd395a372f5d3d29d2 GIT binary patch literal 485 zcmV7z<1nGM2KsdOowqC=TJ zXX??P3Sqz_`JT0v)2EE;0kzssDd~zU>3;jNtatINCRA8EjVenYz6`tho}y0V;5f1xx=*Tv` zj(@@~rvlEn3o<9#@p}xt%e4r)0K4(K=leGdJ*wwd*^C~5hQ$r=sE1Mj0Dy6BKF)N% zsbBt-Fm^D`sEtfd>M>eZ1!EywxH)-O=3Ictnga<+00000 zZ;}ntw zZ1Pp?nJA-N@cu~lGxSLovXfMm2H#4JDa$hCmNf&N*(xK-d7cWeQ#a-#}ZyzOV) zr~>M(^dZHB3P`^3^q#v8sf<>Bw^rum^*TOe@V zM6Lii2hUBw>jM|=vf^D(=8aRK13Rzy#aP^k9+$;&&rUC z?;-Z?VsB^umn_i@csgIv4X`m!{Qv*}0ON2v1?lLfk6yDGPdrvtSr@l=D^FeL_zOkI z=(#7If&O+%Ku7dsNhPDTRB3}5@d-V=TghT7cB71l4Bg1Wy}_y^ONHjOtVgR(ulAla z5v$=XS{8ZZYy;CNH5y=!<6-5U-#T<$=IlyGmdfBE>mUm{=u!rL^eIxOLA| z^zIzrlW*5^pI*C0LyN1C-no=(FMr|;W1e@-dafr#AB~yNzxj#NgnU3SA87#m1^@s6 z+?I?f?J) literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00004.png b/tests/snapshots/nanosp/test_menu_settings/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..4f44ce50987d1a60145f4f93548add00ebbf4554 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-zba4!+nDh2#B44utPus)1 zo4!^5l`E(JHBjW$xSY!*zwf+$YL3u`qoKw?O)yZ<>HeOvW}8m;%$?O%e#?a`zR4Xh zUpBMWxcaNy0Zv1aq|>MFZstq<&v?@1z`ZxSt55kE`g)$($EkZj>+YwI3db5{W{ONP z^0`^J zrtMcx+rPZ%TXeYdWfr!T2yPUS~&ORTgJ;N^)Qb!Jm9;x@c(tehMYrRKw_S*elF{r5}E*u CoSj$z literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00005.png b/tests/snapshots/nanosp/test_menu_settings/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..fb049ecf537e0eb6df4e2974e739343afe8b24e4 GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{!ba4!+nDh3gC*L6h9*2uf zJ3QalFS*m|>LPMe@|M=*!}Zz*u3O*mOps#-YJ!0mk4&u_b)L`ZnDg9Hb@Kjab1u)l zaWcJ($^3_3OQpcQF1}7~mjcuGH#zS-=zeipYgXY3p?2;^`MM`A@$Ar8_jOY#e~+ny zzQxtozf~`{ELGLG@Y-KT$6D*V$LU&yQ$4=Q)+b~< zyEXORu{Avlo+NBHWwtqNd&6Pdl`jbmvfmPSmsD2IZF^NLVfM4IDEjG!-TgZQg=5nk ziZ(nyr{=szW{;4iQT_2pYx0&Rh8FRtoj);;mHXqX>+9>S+Lj)+Fx+@cEc@D_)MboS z>iN6F&O}vK&21}_3gGWs{8zszHT;{Uz4Ou6KQ_gDc%-)G@k#cXSFPK4zH;B0e0#5W q;-|(lerIwH@lTPT!w3r=28jpU5yfIrJt7XlATdu@KbLh*2~7au46NM% literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00006.png b/tests/snapshots/nanosp/test_menu_settings/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..966544923f253da07575ab82c3c555f477647582 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^i#>EaktG3V{Az`Vl>JPnCf zZ`JPn_t<$_?!tuBW@llpu+R1WlBydLyo4@K0qQ~qA9Uloe_Qu0mU}+O-(IVA)iPVx zu!3C~W-qS)-!lK`U(u&lPp4il)J$2pD${?XX}0n!m)m{u^^LZSGo0GA_QkzPW<5}+ zUR58LeTQw0Urqhm-TKehtXubGt2)ECthbwjPycn?X<48>eSs9SrRbtN%t7jGrFmw( z{o#8*mHW?GeZ;|U`hDI1$2GrJJnp}K;){IEnka|Ty>I0b=EuD;UTQmGPVw>UUsAt= zUHoHvmA%8ur;n;T>;Cti*>=Gve?|EL_x&}dm*@L^yMNyEhFFzn!v2({5ieh`b4fLn zr>A;8o1>?uTsrTmz%2Qz$&v52T(f>LcX#<;Pr*wU_qJ@l>$L0U#JT?j_Xz|}Q!u@A zmaEvjQMsqC>jUqGoTB|ZD{roz?_%M;&Dei6BhUc{Lae_tFUw(D!8TWyak+}^=h&QI zX$|)uoX9&^6H6%ADg@X8NV(6%P8EGd*INL%rubuJzf1=);T3K F0RTT(&xim3 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00007.png b/tests/snapshots/nanosp/test_menu_settings/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5bed78563ae987925d7ccc231ecda6f105a0ff GIT binary patch literal 588 zcmV-S0<-;zP)RE_0xLT4UP9T&>b8{fZ-&HD3j^|yy`_ZPC%kPmi1p_tn+O05#- z%Aqx9c2iL-;eeKITiMxbW+z%_&x~WfdK(G=00000F$CNPXx9K*l^xs{RT+8=dB|}r z%mL#mR5Y~VEm5aYwi`zsiT}dUff2z#Qc6BX7o%8PbwCNZtl$G92&!F{-6Ebd#&^pD z@9hsyABQS?`_+V(Q_b5(822&U=;H&?YN8Ls8=DL9ocCkkeHSn4+#blF z-JCc)lG|H%9YyYf#BxF0mW+2PPi;dtX{phsAOHXW006+-xc&D5ox+)8*I{4Z!sXuw z*b0q8ASh=IWELC7GxxMUiYv$M=9(MCmbKYl^4uWd`%g z>bP^BXOr&#JWr3^skFCaRA_(AZP$+^c>p@y+=fx8NPJcPbg`V_}kKTp(rLjrRv0F2m z^5jHvB=!wj*#TIcm0iBRbSBl5xO_H-1e(JIRr5csf*QIdB;bKh{|XO86&Ey_TddI8 z)nf(gw+c@HXEh|i7nDw+A1hG+0000006+%O@c=CVpcVP|Q(`#5ncwm@WjRs=*MG=} zqu$^-Jgezz)Xvlh&*w#v{0>06E||;Hrq?FQK_4#VumBACQwx*5Z#asziK_T6xVYQD z`7wS78w2jOwe!y#-2!gmMhY{&eBSWH=cEyQ@?2e8NNgjW&J6!)Uvod)x4ir1ONa4000004-gs;F!r~e zgZxd}CGqW>-7G)sHKoN~{sW$avDztJ;}Txv>_}@oSQ4&sHk62*eV2zG0|-4EDxOd7 ziM=;(_$ATvd=R6P@%Re5#EzC|7upH?su-eO(7j1#>-e|la)lsZxp%;-Mc(uz>0=Q0 z4iMe_l-bR(`eM*lx6Ypn@F*1k00000002Bm^8W>OE){=mhvf_&h$pnfzCILN3~;LX zc8(ZSNEd=y&A%$>?6OYrX-s3`H}Z*@^pKl6#pC&dH=9iLolg_T8@*5HLZ67bKd>CNQ)3w@eRe^L}{O2DOdh zcW(1Uw5}^zhFI4%Y4;@Cwzal`l<_Qcn`e}{%>s?9TC8Aws_+E#uqXK8ke2GLrpl9W zXKdpBLI3~&00000xSyYiZOg5%+zOfdqs+!tmFf3lUJ8BZUd)twOhKY0##)6^^a5cn zZfh`Aw4jp|5q937q63Z&%rn;a#PDHE7UN7Ejb0~fwr`Wz&WvBk}2?t1y1_M0$kigqv0{{R300000xRgQh044pKk$^r? z?RzsvvhpzoB{v1Rw=!ZU?A=TpDv`y4AVJHGH_S*opRfa=HMT3%_VsS0r z!R&?q>>iK3qX+lhtqOYuhv4beJ=Y!qmeneKx3#j!KR5Zn8(hg--Hk-jtG?#VV}bNP z=ILki$_aDnXU~y7NM7ri^?X+c>!7{xzQpgwM{u&kgM(tKx8qhpee-hm;KhvD%eY!| zK`C2I*8IeH4gdfE0002sfz13qfbn)}oExk5GBJoWB-QV4BqO((DM6M>i9a2fNV%hl z%vIJYKFq5)AUG15d_ICRpp~iOfV{D!Zvvwqoz`Yi#Q{k!5iCo6C{XbeC6AAki>o{V zY7U7{LQuEpJoEy1)=L5a00000000000DKI8?#}C?XsV@)00000NkvXXu0mjf4>A~L literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00010.png b/tests/snapshots/nanosp/test_menu_settings/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..909ec4ffffa3780f00059d6e808091031020ef2d GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jjba4!+nDh2V;G|{+o`%HR zH)mJ;S1z1xXK>blbHNU-mVfsz>v1e)Y)ZWi)C2Y@0PjQSkCNE_uk}Q_(RG><86YIR=3=m^ecI4u2!hJ{faA<+kFgP>OY*f+JA3-dE5`?cTI2j`DQ!3`=xL- zcU#KYkl^WRGmUpT&AJl*)0_8o{gr6jTpzAo+g^NIpY!(V);m>)tJZs-Z@AX+$9OW& zoaTG!4rX^(ACl<1*1Ygbnf6)LQ#bjN-|Ej}hlLi9)_KLu{6j>evL^K}NYvBS&t;uc GLK6VK!>>yK literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00011.png b/tests/snapshots/nanosp/test_menu_settings/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..160a0ea2ff6105457a725f98d05453d242e0efac GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Ri978JRyuBLR*Q_AGkWjwa z{Nq3OM|!^#tQ4JE7u{I)bKml=xewDBrn3T7LqJ3RM`O)=FU`93udT!^1ny1#bExI{ z-?JXKEYH8XzwLPW+ADwm`e`~`edlxJvG>)k4{KFFJ>mQ;^v-D(=V?V=`KNySr>FD$ zypZhm^H%QqMH^>o@%Mi-N_?mA`PT-K*$Z;ki+vRe_H%f1yk@fAVqptOxsAJ%Og6_} z%D=ouTVuWBy$Yk}Hxq4bcBiC$kDgV*+Ug(iy;0?RP1kY}g{515s~n5dj{hq2A*ZrU;bWuJBjGbkV+;6V9L_QtK-ZKuXhQw525y85}Sb4q9e0NX`{SpWb4 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00012.png b/tests/snapshots/nanosp/test_menu_settings/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..909ec4ffffa3780f00059d6e808091031020ef2d GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jjba4!+nDh2V;G|{+o`%HR zH)mJ;S1z1xXK>blbHNU-mVfsz>v1e)Y)ZWi)C2Y@0PjQSkCNE_uk}Q_(RG><86YIR=3=m^ecI4u2!hJ{faA<+kFgP>OY*f+JA3-dE5`?cTI2j`DQ!3`=xL- zcU#KYkl^WRGmUpT&AJl*)0_8o{gr6jTpzAo+g^NIpY!(V);m>)tJZs-Z@AX+$9OW& zoaTG!4rX^(ACl<1*1Ygbnf6)LQ#bjN-|Ej}hlLi9)_KLu{6j>evL^K}NYvBS&t;uc GLK6VK!>>yK literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00013.png b/tests/snapshots/nanosp/test_menu_settings/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..160a0ea2ff6105457a725f98d05453d242e0efac GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Ri978JRyuBLR*Q_AGkWjwa z{Nq3OM|!^#tQ4JE7u{I)bKml=xewDBrn3T7LqJ3RM`O)=FU`93udT!^1ny1#bExI{ z-?JXKEYH8XzwLPW+ADwm`e`~`edlxJvG>)k4{KFFJ>mQ;^v-D(=V?V=`KNySr>FD$ zypZhm^H%QqMH^>o@%Mi-N_?mA`PT-K*$Z;ki+vRe_H%f1yk@fAVqptOxsAJ%Og6_} z%D=ouTVuWBy$Yk}Hxq4bcBiC$kDgV*+Ug(iy;0?RP1kY}g{515s~n5dj{hq2A*ZrU;bWuJBjGbkV+;6V9L_QtK-ZKuXhQw525y85}Sb4q9e0NX`{SpWb4 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00014.png b/tests/snapshots/nanosp/test_menu_settings/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyG7z<1nGM2KsdOowqC=TJ zXX??P3Sqz_`JT0v)2EE;0kzssDd~zU>3;jNtatINCRA8EjVenYz6`tho}y0V;5f1xx=*Tv` zj(@@~rvlEn3o<9#@p}xt%e4r)0K4(K=leGdJ*wwd*^C~5hQ$r=sE1Mj0Dy6BKF)N% zsbBt-Fm^D`sEtfd>M>eZ1!EywxH)-O=3Ictnga<+00000 zZ;}gKlk|-CvaI^f?Ts=!EKbPezfIs8Mjk}sS9L=U|ERux@;&U*(sOMS(ZmHJks$t}W za|2z=9d^`@#$p8|XdQ5GsY8zOYQ>}FNNfIJOxLqnVQ_cb@{1UmAW*~31l7p5-T(jq z0036}SSr)Qll?7B+%mcE!R)r7?zg%p{}bR6iV@dDQ^*^k$blF_5Q7S0gZI~{-bpSw z^Mt{>JCC`izzZdHq0%gs7en7g;8Sc+R6UDgc&VRfo>)2u;yKsxerTf$2N1(;`m zf#{aScE0X^000000001hFQyjpFTT;_X9m+%`?B?$@Hf1gZao1tKISmMlO7Y)Q&+Fp cDReYSzpxA%3 zQ@(rtPu$@xw`P%t{*6r*g8$!VdM(U!oL01r7pMycd_IcmOb-$Y|5p1x=Xb|V`RBoB zc{zUw>y(=m7f;{oSi)danf4^m@VQqC)6~=>v7f_kyWY+4TYo0_x^A!$bJ(Z#Klr8@ zPZf50GR0UU*igSKAZ<&G_m^&s`27);T`~7$Dke^nG?=u1Wi8tavoFjsyrJi#_b*TV z`RnMsHGYd(KbwEmbDZ}p`_a`;d6jeX^thL2AGP6qAOBluiL~(Q-pB(!hLg%8&E=Ln z-(z4_@Bc-j>caXDFV$jhD!Oc`HcQM8dL@64*=$Qtn8@~Zya!f#%-{D%NBh`<*CH)! zj{@u}*mARj?BiWB#jUn+$4#r_ z0iS2T{=fYkgUyv7<_||aH(X(`xtPWLVTY%|>;DasCC{tm+vl6I!NLtlC$z=SbW~V$ Sw}2fKF$|urelF{r5}E+v1Gi@Y literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00018.png b/tests/snapshots/nanosp/test_menu_settings/00018.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyGgKlk|-CvaI^f?Ts=!EKbPezfIs8Mjk}sS9L=U|ERux@;&U*(sOMS(ZmHJks$t}W za|2z=9d^`@#$p8|XdQ5GsY8zOYQ>}FNNfIJOxLqnVQ_cb@{1UmAW*~31l7p5-T(jq z0036}SSr)Qll?7B+%mcE!R)r7?zg%p{}bR6iV@dDQ^*^k$blF_5Q7S0gZI~{-bpSw z^Mt{>JCC`izzZdHq0%gs7en7g;8Sc+R6UDgc&VRfo>)2u;yKsxerTf$2N1(;`m zf#{aScE0X^000000001hFQyjpFTT;_X9m+%`?B?$@Hf1gZao1tKISmMlO7Y)Q&+Fp cDReYSzpxA%3}gmd88S*1ehGYG=FeAsD$J(8A6IwV+k+eIWn<0000JxhSv2ZP1|WT#2inBYn;49mT<)}L^fv=C;`^)U)2PtK3jqKC00000fFnIwx|4LuP#Z4) z^mK(dqR2c#4?v45x0k0Bib;mLAo_&C{-VbP_0+xNHvuJ~SAd?yKD-GRLJzyjzYoKgj1h-n1UbG{q?KaXXILWqaV;`0Cw(UoplILK@|kHJ?H$(e>ZU0RPc;2kJ}+yj#X1nj6|&#q z$8m*pSuJd7`b7rX0msq`%~or*=CU8z^jEd8uW2S=+0Vg4QR#P=hs?3D9zpHyj$pOI zIOCpNy#v-&eBy($49RX)-ltmOZWI6jz>9S_4>;%6DMDF(`n=%+y;6S9Dw974X|-_@ zZB<$KX3Yi7E8C+cpo8rk%#@D4rFz1Zl?-M3CU}PlsOCYt^rS`h9`*>jRQVM&#|{|$ p$v0UUw&6H^=Vkx^002ovPDHLkV1m6mn2rDd literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00022.png b/tests/snapshots/nanosp/test_menu_settings/00022.png new file mode 100644 index 0000000000000000000000000000000000000000..6d667a9069d6a2a49c5ecf211d1610a653835ff6 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^K=ba4!+nDh3QV^On$2t&Z_ zm%cmxPu$@x?x)G5cx7AHv%OP=_6gWo^zG0AYGT;awf*tz9>ZtL6ad>w3GQB$&zrb*EJlZa#b99{BRdl-WM_W413S^mpG7nK-Y| zzb}sQwa&ed4w3C5(^sv(yyk-m&{qvHcTSz|&T22uJ+VbrI_SGy{myGAkB4;ai~SlK zu=amfiJYtb`^gR5CyNVKv&5tdKACO5-Rpp=NOXR=_kkzf3-0}}dANDX{faN1-XD*j iyY+w-4(Nyvt^2Ab=?CesFo7(_{kx008(gY8Uj$9nKA#6|&d!%fC3Q zQ^}gPT+7~QdI9LEh&9PAj_GFc>};r9GLsVkL-(5dQ>lz;g{{nhRxUUUKDQA#YXJ>s z7w4k@4*QCv|!!o4NhQ^j?cD2mk;8000>J Y2eVaD>Pl%n#P6*VY(=9PzM&KV00024;^XW9=2~l^rPg{% zB$w7&+gIY0ANf1?vjg~r)>^G~%jWb$`95^|qu!oy7_C%*GMk#FdZI&l5?ZVP0V2)mh$E7^7bWkp2HO*5E!iEn0(c3pQ;@ zD+zi!=i^ZGVe`q1m6GnmMC!wtLcgq>@uBJ0R|jnTc5YPM@2O{fF+pKlC``cy8IBu!nuiY~!7emj_mNYuD$T yQF&}ya{tu5&)*+@I+MMv_n*8BER+}+9_Ym@W-_=N9C3UK67+QSb6Mw<&;$Ve*t%W- literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00026.png b/tests/snapshots/nanosp/test_menu_settings/00026.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfd92d2948af79c689dfa758eddbcf6d2cbef3d GIT binary patch literal 449 zcmV;y0Y3hTP)IQPLvx$^OpNk+HU6lC|d1)B-h zY4>dO2sobNjvthD7ICZkKFtJga{&MV002tqth_Fg4X>KXvK2F_YhNy|DgCh&Q8%w^ zK{b7ebRD9e`*eUKWgl$S0bT|{x%snI2e=@%-gfJN#RoyX@i`$ZSJjhkRtkN`nt)_?T&f+6Dw~QndQRbl)wOB4i)Tk2F6_talyXhh6OYL7e8vz}kF3v{>7=zJ0_QY=c0q#s50r}0k6_?#Z=bgoWrbSl ztUWDTueNka)a#jleP*_A->|~@?4#n@AM&QY;+Q(`{3-3L8+|nEw|%=?ckJ4U*aspE zKLb{)om97#KQ57N-0-R?rb%nn%Dk;Tn+~~sp5)G8*S990>kjAnl0VB9ct*P4Qf5e% zUM9W2?De95j3+)Xt4S@52`F26sYLm~HJ|XMdzcN(&fBK~-8S)`TtTJx>8M=i{XY4( zewCM9*n4>0_OflCcfJ1-8GJSRN#{bg)BA(YztCp*vQJ&IIaJM8irI3(seC(TvsJgQ z9zHj3dj)%ozcD>Pl%n#P6*VY(=9PzM&KV00024;^XW9=2~l^rPg{% zB$w7&+gIY0ANf1?vjg~r)>^G~%jWb$`95^|qu!oy7_C%*GMk#FdZI&l5?ZVP0V2)mh$E7^7bWkp2HO*5E!iEn0(c3pQ;@ zD+zi!=i^ZGVe`q1m6GnmMC!wtLcgq>@uBJ0R|jnTc5YPM@2O{fF+pKlC``cy8IBu!nuiY~!7emj_mNYuD$T yQF&}ya{tu5&)*+@I+MMv_n*8BER+}+9_Ym@W-_=N9C3UK67+QSb6Mw<&;$Ve*t%W- literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00030.png b/tests/snapshots/nanosp/test_menu_settings/00030.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyG}gmd88S*1ehGYG=FeAsD$J(8A6IwV+k+eIWn<0000JxhSv2ZP1|WT#2inBYn;49mT<)}L^fv=C;`^)U)2PtK3jqKC00000fFnIwx|4LuP#Z4) z^mK(dqR2c#4?v45x0k0Bib;mLAo_&C{-VbP_0+xNHvuJ~SAd?yKD-GRLJzyjzY0@?kEP)H~aRw6fmAze*x;9Ra1|m%b)PL(c5y+(nnxD$qQV5JCtcgb+eL z2~&G9d%yn_Bwvlwd%3+1c8>Ip>fYfU;NX zdvR0cFS~-8$IO|hWIBWdD)W|RpK`-Tf4{}u#`G5unE7tqu9#OE`K&As=!3WMyjX4C z180526wJ#puLxur$eMsmnRDNGDAZ51q5EjNWMvW|gb+dqA><#kCLSx1ba4!+nDh2VblwpK9*4l~ zul#QOpLE09ew9MXXAS|Tl6OC)QV%J!@pN(kHNn7)N2?e2e2;UPQ+)OQ!TYYE&3o@% zX$)|_^RBRN*|m8*rxNz$d}Me2|1aX4EQ7XB+}9Olz7_BD&%HZzYI1gG%c@D`tF#w7 z{Z_td7=5+&zHj;VPxqb|O)U0vy>Hjk`)uz15bcL`qEh98#?p`Wg+}wI78@_fapVfh z>3^JXQ|i#0&4#&`q%?2y8g?%`d|UH{;8nvFYU_%wy?PxKe{iSfi@ql^^6Nj(?Je0e zbsi&!@bi_%&PIaIkNoy}msY=W+l)Jlu6!+8*WDc=epz{SZoFB6wB3eRmwt(S$$Z4T z@ylM$_iO&J?dw0NEYp@VL&BcpV*E+B|1)eArr&w{HF#U&WEK1HkpEUp$1fa}XgJ#U zM`F3izBi}8RUfFAXpo%$InJ3Y>P?U6frmn{paRlcezA%~u=Lzjx2Xn+db;|#taD0e F0s!AUx()yU literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00034.png b/tests/snapshots/nanosp/test_menu_settings/00034.png new file mode 100644 index 0000000000000000000000000000000000000000..e525706d6a3e1faeecd5b54c58ec13231cdb4e45 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jkba4!+nDh2#bYF{tfJ0!K zk#*vK?cy z53)IK-#vH#%B{tYl0DP)>XKi~mp{FedBM+<+IgYtIiJToeRFP&O|h48E=lRxGC^$?Tuafvu80@>Mv1n z{BFTBZQa51cCwe%)=s>1*C6X+Nre^b-9;8`M~_TBA5|OsO54Jm^=iktj~}h(S5D~L ze#w}j?$MpC=^bj1rhM2rY1fU|E?qbIz(+N9*IQk?x?fJax=l}Z2Wx&r$;-bYUvdxe zZhToS92fbIw??)(+JYz2z_3nm(SJ4Bzh~z$t`yM^(vmFedg0DpAMjH!)AV_c^U-g4 z;?H>wEbEhMkQF}|$h=|kWwwOft{X1@XSCXJaqqLTWLSuS=(Hc~&ILTatE56DKwM8( KKbLh*2~7Y$r??>i literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00035.png b/tests/snapshots/nanosp/test_menu_settings/00035.png new file mode 100644 index 0000000000000000000000000000000000000000..1418d03829e19fd98cd7ba726b5f2d44bb7862f4 GIT binary patch literal 432 zcmV;h0Z;ykP)dhrQ-)c?eo{QN7qE@ z*{;#Di$f!qLL0Vvr@QJ(+&#hkgH3ov8rh}HP+MYWkhVPi?l1S-)4FWf^3@i$I?LUu zskYMAsx|+vg)(Uia!{`FEMI1>McIJhFgv!&zwj78IeA<-+u- z{v;mf_(^jdXGs2qAAr`>ux}uLsZRsOqiO9nE8XSwX%wlVnxw|LkiW+7y!;^Arx!-+ za@F?h%U)RZ2j`>IpFp28_fuoCPg?quJGr!2~>qSJLi{o`x>hI^H-q!*O@w zy6Q9Y^wL{c^G_H%24Jx#9LDKEfA#49e|o|I3_Kc}k1c4i_gDeETmk?90000000000 afL=chBP7}*&+DH60000w~ba4!+nDh2V?xbb~o`%G- z^!!7A`;WwaV-IfkJk&0qS0qTN*4M+Tc7kO#62qeFelmFx?=r~_K z{NJ?hpACJQf6um`IFqxdZ5IEYWgnd8{Nymr6J9WNE4S;VU-M2JEsYFIT_NMUJn*!8 zjopgqJ<b|PjA;+G9_!T#xaeet9!j`uG?hR9s3hznPAK-XuPi@dG7~l!7m+d zVwZ1;sl4Et7I{r+hQE}!^5#0TLpQ^AZeXp94E*&if9>p|vujy*aN?!}cK1s1P}wc6$Ww(?q^!K9S*sdp+j*RRc*xbk0a zPf+mR*@o=a7hB67S?-yvm!EF_rS{4<%P&8_z0+A|@c(1EzU`s4|63LsGS0S5FkZKM zW3&9df07?Kg$?#AZxhtb*qnZcaZd~=fT5sa^FPM*Y)Y#NJc5^iggjmST-G@yGywoO CA+!Ae literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00037.png b/tests/snapshots/nanosp/test_menu_settings/00037.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyG0@?kEP)H~aRw6fmAze*x;9Ra1|m%b)PL(c5y+(nnxD$qQV5JCtcgb+eL z2~&G9d%yn_Bwvlwd%3+1c8>Ip>fYfU;NX zdvR0cFS~-8$IO|hWIBWdD)W|RpK`-Tf4{}u#`G5unE7tqu9#OE`K&As=!3WMyjX4C z180526wJ#puLxur$eMsmnRDNGDAZ51q5EjNWMvW|gb+dqA><#kCLSP@)+k#d(kL`pqlh}AaOr2qF+MPyJgY#6pIK{i1?G(X5PszB#0=fk=g zBRxZE-IY=TYd^#`V-2j^qm&XAn`1=I0H-&`K)!MWxcPI;k^lez0B}ocPh{qEE=ts- z+FGaH3ID>@H1zo#R*Wv$byQi@DFk807IR15R|87c$6 z_1o2aa{4g;AOQdX0Jyb`8!<_x8Jv5l@N9}->bs#kbANjq6AVDjpJ|wADkRnaFQwK6 z|5V2teG|+88RPzQ%2{GR@0oC)OhLB_Ofdsy9RQCh#$bXasK5H}xaki700000fc*Xd XRZ)ZzpfP|000000NkvXXu0mjfN2b-d literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00040.png b/tests/snapshots/nanosp/test_menu_settings/00040.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5e1c196d866edc5cb1949fd7ef7e69520ed067 GIT binary patch literal 535 zcmV+y0_gpTP)KfI8n(N@}NXt6B+eb@UbHXTU|&Q>&NffUKIl0QDQHuWcPW zs)@4G26ByxA+>`k;m=d$6vw# z0001|h^PlltOVSRIdZJ?+jWHh+xk>JPyQjMRszIFi(4ni&04fjAG4aG$MV^Q>_0RQ ztPBu(vSa0&w20Nd$?gN)DgNIkMOdf{JWk5q9ZU)Rl?4zfUk;+J{u(n9vGAYPg356p zMt%ARWq?x&5S>1jiGQutR-&o89dQYN`71a8000001Q4vQTnYNDKPB?;1)dR@+|yN6=(g000000002^ Z7XOX#x;D#806qW!002ovPDHLkV1lrF@Ol6M literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_settings/00041.png b/tests/snapshots/nanosp/test_menu_settings/00041.png new file mode 100644 index 0000000000000000000000000000000000000000..d9936845661a7a3fa52829b0c9bf13cd8d2ee36a GIT binary patch literal 426 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=ltba4!+nDh2#bYF{tfJ0!K zk#*vK?(bZ@l$MG(br_1-7b|K1vo-48 zmHlhB?14_3K26nPht#U>hu7-T*+0BBo6)dm#aY&Q`F%>yPu^H}JAuimHo4PKu70Na z!C&8IFsRptt*=+vlf}eU)f^RI$@tn`=cMAamtV#A<*vV2FYQ*Z=2ma_ECGTnJtgj5 zyzuSpzF$_gB{NT*TUU~EZSU%j(M>z|cDet5{o>I|cYBtTbLN=EzdP;o*>lymilz3P z6?Q@|R%fupbng#4efjb6Gp@HhEVxaizK7>eDNLKUt$yjpvKupB^JVD!%)G33;dx1h zTSbn2iEqQcgU!2k_8I;9`@yxh?9738Mq54}X3ux-p1W~3&ysV_5qw)J>s~QAz72Fw zTcKaPdG4ZhGap+Xn;U+GW2@}F>z209#lJk`H;PUG1veD%eBpl`<}bMY#WMwvh^MQc J%Q~loCIIpUxVHcR literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_slot/00000.png b/tests/snapshots/nanosp/test_menu_slot/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..e722c27b8303836926cc301f1d0bb7def66da253 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-&ba4!+nDh2#^rmJ7o`%Hg zW!8oNy^Hjp>z+;M@K8MX^1toYE|=z*E4j=-O)wC=N2yu%xZ?irwdJR-e5;cz%z5g( z=djY*-9Mtv$_hS?)>y~rGrjhZ&H{5WRqIQ-?kDe`Nc+LvvGC=clci$U--}<6PMxmz z%*90ezMtg!P*dj^W|8mf_uZXiy-OqDbegxz=Av}(o(qZ|%MMPvc|)hb+}G++Q1SW> zxuzp)_iUHHDr>vC^3k+~(=V^Il=&`Oy1i)gWZ$R_Yi|nHdt6It=D(#NpF5%RO}f(W znQ}A#-dbD~sP-(S&AVD4`-%RX`LoLff7vdWeUs<;o6kMQ-T&P#zhr-1KJm$W#>q4E z_kQ*}{`rdHio!n+@1B;JF3*$XpT6X3xTEflmdK II;Vst05VLV6#xJL literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_slot/00001.png b/tests/snapshots/nanosp/test_menu_slot/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..a6dbaf70772384246ac9a2ce222b9abc18a97246 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^K?ba4!+nDh2VU|+L>07F3e zX7i8#+&}64zSttrrLm1C`upDXViP-!Ikubz=>h?skD`(}x3_(%jJ@tQfA4C2x0?44 z@;?fTW!^dbzPCm(siyT2S3v0xzYyyuy{_lEU;33VT|Y7P2Vcj;)5X*0ZLauN*1pFu z_S9}ur7-sRc}DxpuW%HyYCOxgyDMe9>&1rYXN?6{H=9Q#wdgr!O51Ff4!8cYOtb&T z@^AN4syMxNeX9Gn?)1gdc9^<-S#&VWtlwo#**yy( z_FKQFUGxsPHud}C@VR|;;g!?+7e017^{y-`w(orG)!UV&lX$BVvP-M4Tm4v{qZaw? za7d8u?}Jw!_=PRBeybA6+ZMIl{7deOOlNuCmmeyHzif*?w5K+Qah_55yp8O8WGj6) zo!g!JSZc5GFHPeIl6Dre&qp-v`ezUEGy{W&=3j=-NtbtNSw6BXxCzDw(Gug+nAhn|>uyG!OD{rg?|3H#-h zdm`17wtjx9`grX+w+?Lw!@AE8uSs5XZ4NW*cUe<*&r(Ragv;yngNavn+r+Sk z)^BPTg9D1R-XCATOQtrg@>K4N9TPY0o)fnGad!CJw|jm~;Jvls>#n(`{QtDis+_Ky z;k7E&eumVU6tP*E>L;@du4Gp^?{C|e{NmjN;k<7>e$~Ry-e=ZsQ@(OGD}ig452M;< eURJ0N-@O!1NjEaktG3V_}$4!S7I2=A( z@AZ6FzvRx+?lTs3F0NB%9Iak`jnO4w%@+%x9%P`+H zG_hC5t}jpfqG{D6Xl$i(#^;rf!{PqfTMGHk+JF60(jOA;?QzejOjp@6{KogC4>ENAN0;@A6r!U(Tcx$EZ=3Zk)rGlS&8}iqw+zAb5 z-6i~Ui`4QXMn+xxS(Yk2-qCxSDK%vM)s0)DeqLInzhR}&l!6LPt+vB;6Ru4-`18w& z`3sNDxt$-l^?}sY)^`)aes0aqy2AT4p>+MUX$NXtoAs_L2>(4E;N<&7zD?#$i`JIO zeiKeQYOLqWzrAyz`L?4EdOkQ^vpKS8XT9C-c-zkhd%e$}%F9^v+hP^x^yWnm1FNH- z^2>a@vC{N`j$ZG!4{`3>S;M{s-gTe~DWM4fn&#vN literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_slot/00005.png b/tests/snapshots/nanosp/test_menu_slot/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1682ad8e4c6a0e04ec7f43c39862435e58074cd3 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9fba4!+nDh2#v{17Gk3-w6BXxCzDw(Gug+nAhn|>uyG!OD{rg?|3H#-h zdm`17wtjx9`grX+w+?Lw!@AE8uSs5XZ4NW*cUe<*&r(Ragv;yngNavn+r+Sk z)^BPTg9D1R-XCATOQtrg@>K4N9TPY0o)fnGad!CJw|jm~;Jvls>#n(`{QtDis+_Ky z;k7E&eumVU6tP*E>L;@du4Gp^?{C|e{NmjN;k<7>e$~Ry-e=ZsQ@(OGD}ig452M;< eURJ0N-@O!1NjEaktG3V_}$4!S7I2=A( z@AZ6FzvRx+?lTs3F0NB%9Iak`jnO4w%@+%x9%P`+H zG_hC5t}jpfqG{D6Xl$i(#^;rf!{PqfTMGHk+JF60(jOA;?QzejOjp@6{KogC4>ENAN0;@A6r!U(Tcx$EZ=3Zk)rGlS&8}iqw+zAb5 z-6i~Ui`4QXMn+xxS(Yk2-qCxSDK%vM)s0)DeqLInzhR}&l!6LPt+vB;6Ru4-`18w& z`3sNDxt$-l^?}sY)^`)aes0aqy2AT4p>+MUX$NXtoAs_L2>(4E;N<&7zD?#$i`JIO zeiKeQYOLqWzrAyz`L?4EdOkQ^vpKS8XT9C-c-zkhd%e$}%F9^v+hP^x^yWnm1FNH- z^2>a@vC{N`j$ZG!4{`3>S;M{s-gTe~DWM4fn&#vN literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_menu_slot/00008.png b/tests/snapshots/nanosp/test_menu_slot/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..c58dbf531cf5b42b939a3e88ce7bd688e62dcad6 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qg1z7978JRyuIPrcgTQ;^@72y z*-!qte~L{DfCIgauASNwQAL@*rU;PY2qL1U#`8sgstFx z-TT@+)%-4=gqiQQU(4IfU2*g0v(9dnBBroO=8U;(MMW$bzwgukpdcdY5UtT%%i#Dw zz47m6@hg8>U;gviWj~+i+2n&YMh|w^{94{|*Cnpz+xk^gwzu5B$!fFxjQ9J64GeO< zo;Jsf=lxv}_#?p7V$bf~67_CAJ_lHO(rb3_yL5BPX8Av+U-sD%mSX-@WmAQ4YjKbLh*2~7a#oPH<( literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_verify_confirm_accepted/00000.png b/tests/snapshots/nanosp/test_verify_confirm_accepted/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0afdb58fca6b8a3745b462da1b9199af2ef18b31 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-xba4!+nDh2#Am1Sco`yt| zdnw=TCzXF}T#~7g%o5S~v!1`r;CR9fAw?FTCLl;yvHnuc?kUI198$&T}Zr98c6vZ7B-vw+uTr>xZW4ub?&ld0TX^e-FO({hQkSZFM6Gu9sOiNrm(^3)B+3kgZF(K(yLZ}{8o8J?52ZC_o=luN(z1Ioqy*oz0~+z z24wXCox|H7zcs6Peyn2u(*JjQ=Qg}4tFPbucM@OD2FY*>vkmObtz}|2KYXw+T2U&- zIQ?t7{i~cqGvyd3mK@GB-xBPsb^WX{+{ literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_verify_confirm_accepted/00001.png b/tests/snapshots/nanosp/test_verify_confirm_accepted/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6d125c66b5a826685b23677012c23609ac08b1 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qr|pX978JRyuInmbyz{f_2Kor zqkr{J?k!PhdBESuv+8-_zCdTI4c~)I)tn}&ctX%6!>qMiua%dd|8m#1!F-wK<3;%i ztW$z+wd=im{plAI>zalcr3ZZNmF#x2f4F4vP~bBEBl`s}AGIx$zr%ECf!Kzqmcj|F zcf#*p-Ph3+eqhIQ$MOr}1wZm5-dbqN+VH&paM8VMamQ1R^YT?vlUMluKmR5{J$>Qa z53dboeUxi2k-BBevc>zIVa(xbAwRar1Fxp4JaSyqtdmeOzb``e1D8awoG^Ro0c{1z u6vqDd%8t>>DU6GKq=TW32YMk$%zm3*hrnL3#QVSyVDNPHb6Mw<&;$VR7Jt70 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_verify_confirm_accepted/00002.png b/tests/snapshots/nanosp/test_verify_confirm_accepted/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c01a756a2abfb05dbc6b8c0ab9741d1b4c600936 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QlC6s978JRyuIP*$D$~}8enp- z<+pt2?i~t>H*EVPO&k61MQ>X5Pjr>%RFEbRkc`S+yY*`5o(Hw1jQ=&Yf4!T-*7GHM zZMJr$X9V-U*#-+=PT#>+GF|S;viL_*21;@Z-IvFERYu1i$iK5ZAmf+nJD}u_;>-04 zFI2_9Kly(%^ZsPlU)rAawzd)e{MRls-#GJhZ~cSM_4UeMK41DD5qn_%nX@mrJAa>i zmNc#K``UE-nZ@h3o@*Bb@}~PdFa1)h!Rou}jbMmeuG{l_Z|X&p@(vuGoRYov_j9`= of0$2QUuZwSWTAZ`#PJO0zH;`xt*ifXK^N>FPgg&ebxsLQ0DRMfx&QzG literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_verify_confirm_refused/00000.png b/tests/snapshots/nanosp/test_verify_confirm_refused/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0afdb58fca6b8a3745b462da1b9199af2ef18b31 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-xba4!+nDh2#Am1Sco`yt| zdnw=TCzXF}T#~7g%o5S~v!1`r;CR9fAw?FTCLl;yvHnuc?kUI198$&T}Zr98c6vZ7B-vw+uTr>xZW4ub?&ld0TX^e-FO({hQkSZFM6Gu9sOiNrm(^3)B+3kgZF(K(yLZ}{8o8J?52ZC_o=luN(z1Ioqy*oz0~+z z24wXCox|H7zcs6Peyn2u(*JjQ=Qg}4tFPbucM@OD2FY*>vkmObtz}|2KYXw+T2U&- zIQ?t7{i~cqGvyd3mK@GB-xBPsb^WX{+{ literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_verify_confirm_refused/00001.png b/tests/snapshots/nanosp/test_verify_confirm_refused/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6d125c66b5a826685b23677012c23609ac08b1 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qr|pX978JRyuInmbyz{f_2Kor zqkr{J?k!PhdBESuv+8-_zCdTI4c~)I)tn}&ctX%6!>qMiua%dd|8m#1!F-wK<3;%i ztW$z+wd=im{plAI>zalcr3ZZNmF#x2f4F4vP~bBEBl`s}AGIx$zr%ECf!Kzqmcj|F zcf#*p-Ph3+eqhIQ$MOr}1wZm5-dbqN+VH&paM8VMamQ1R^YT?vlUMluKmR5{J$>Qa z53dboeUxi2k-BBevc>zIVa(xbAwRar1Fxp4JaSyqtdmeOzb``e1D8awoG^Ro0c{1z u6vqDd%8t>>DU6GKq=TW32YMk$%zm3*hrnL3#QVSyVDNPHb6Mw<&;$VR7Jt70 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00000.png b/tests/snapshots/nanox/test_menu_settings/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..993d9535512ba1b94e35d0cd395a372f5d3d29d2 GIT binary patch literal 485 zcmV7z<1nGM2KsdOowqC=TJ zXX??P3Sqz_`JT0v)2EE;0kzssDd~zU>3;jNtatINCRA8EjVenYz6`tho}y0V;5f1xx=*Tv` zj(@@~rvlEn3o<9#@p}xt%e4r)0K4(K=leGdJ*wwd*^C~5hQ$r=sE1Mj0Dy6BKF)N% zsbBt-Fm^D`sEtfd>M>eZ1!EywxH)-O=3Ictnga<+00000 zZ;}ntw zZ1Pp?nJA-N@cu~lGxSLovXfMm2H#4JDa$hCmNf&N*(xK-d7cWeQ#a-#}ZyzOV) zr~>M(^dZHB3P`^3^q#v8sf<>Bw^rum^*TOe@V zM6Lii2hUBw>jM|=vf^D(=8aRK13Rzy#aP^k9+$;&&rUC z?;-Z?VsB^umn_i@csgIv4X`m!{Qv*}0ON2v1?lLfk6yDGPdrvtSr@l=D^FeL_zOkI z=(#7If&O+%Ku7dsNhPDTRB3}5@d-V=TghT7cB71l4Bg1Wy}_y^ONHjOtVgR(ulAla z5v$=XS{8ZZYy;CNH5y=!<6-5U-#T<$=IlyGmdfBE>mUm{=u!rL^eIxOLA| z^zIzrlW*5^pI*C0LyN1C-no=(FMr|;W1e@-dafr#AB~yNzxj#NgnU3SA87#m1^@s6 z+?I?f?J) literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00004.png b/tests/snapshots/nanox/test_menu_settings/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..4f44ce50987d1a60145f4f93548add00ebbf4554 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-zba4!+nDh2#B44utPus)1 zo4!^5l`E(JHBjW$xSY!*zwf+$YL3u`qoKw?O)yZ<>HeOvW}8m;%$?O%e#?a`zR4Xh zUpBMWxcaNy0Zv1aq|>MFZstq<&v?@1z`ZxSt55kE`g)$($EkZj>+YwI3db5{W{ONP z^0`^J zrtMcx+rPZ%TXeYdWfr!T2yPUS~&ORTgJ;N^)Qb!Jm9;x@c(tehMYrRKw_S*elF{r5}E*u CoSj$z literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00005.png b/tests/snapshots/nanox/test_menu_settings/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..fb049ecf537e0eb6df4e2974e739343afe8b24e4 GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{!ba4!+nDh3gC*L6h9*2uf zJ3QalFS*m|>LPMe@|M=*!}Zz*u3O*mOps#-YJ!0mk4&u_b)L`ZnDg9Hb@Kjab1u)l zaWcJ($^3_3OQpcQF1}7~mjcuGH#zS-=zeipYgXY3p?2;^`MM`A@$Ar8_jOY#e~+ny zzQxtozf~`{ELGLG@Y-KT$6D*V$LU&yQ$4=Q)+b~< zyEXORu{Avlo+NBHWwtqNd&6Pdl`jbmvfmPSmsD2IZF^NLVfM4IDEjG!-TgZQg=5nk ziZ(nyr{=szW{;4iQT_2pYx0&Rh8FRtoj);;mHXqX>+9>S+Lj)+Fx+@cEc@D_)MboS z>iN6F&O}vK&21}_3gGWs{8zszHT;{Uz4Ou6KQ_gDc%-)G@k#cXSFPK4zH;B0e0#5W q;-|(lerIwH@lTPT!w3r=28jpU5yfIrJt7XlATdu@KbLh*2~7au46NM% literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00006.png b/tests/snapshots/nanox/test_menu_settings/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..966544923f253da07575ab82c3c555f477647582 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^i#>EaktG3V{Az`Vl>JPnCf zZ`JPn_t<$_?!tuBW@llpu+R1WlBydLyo4@K0qQ~qA9Uloe_Qu0mU}+O-(IVA)iPVx zu!3C~W-qS)-!lK`U(u&lPp4il)J$2pD${?XX}0n!m)m{u^^LZSGo0GA_QkzPW<5}+ zUR58LeTQw0Urqhm-TKehtXubGt2)ECthbwjPycn?X<48>eSs9SrRbtN%t7jGrFmw( z{o#8*mHW?GeZ;|U`hDI1$2GrJJnp}K;){IEnka|Ty>I0b=EuD;UTQmGPVw>UUsAt= zUHoHvmA%8ur;n;T>;Cti*>=Gve?|EL_x&}dm*@L^yMNyEhFFzn!v2({5ieh`b4fLn zr>A;8o1>?uTsrTmz%2Qz$&v52T(f>LcX#<;Pr*wU_qJ@l>$L0U#JT?j_Xz|}Q!u@A zmaEvjQMsqC>jUqGoTB|ZD{roz?_%M;&Dei6BhUc{Lae_tFUw(D!8TWyak+}^=h&QI zX$|)uoX9&^6H6%ADg@X8NV(6%P8EGd*INL%rubuJzf1=);T3K F0RTT(&xim3 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00007.png b/tests/snapshots/nanox/test_menu_settings/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5bed78563ae987925d7ccc231ecda6f105a0ff GIT binary patch literal 588 zcmV-S0<-;zP)RE_0xLT4UP9T&>b8{fZ-&HD3j^|yy`_ZPC%kPmi1p_tn+O05#- z%Aqx9c2iL-;eeKITiMxbW+z%_&x~WfdK(G=00000F$CNPXx9K*l^xs{RT+8=dB|}r z%mL#mR5Y~VEm5aYwi`zsiT}dUff2z#Qc6BX7o%8PbwCNZtl$G92&!F{-6Ebd#&^pD z@9hsyABQS?`_+V(Q_b5(822&U=;H&?YN8Ls8=DL9ocCkkeHSn4+#blF z-JCc)lG|H%9YyYf#BxF0mW+2PPi;dtX{phsAOHXW006+-xc&D5ox+)8*I{4Z!sXuw z*b0q8ASh=IWELC7GxxMUiYv$M=9(MCmbKYl^4uWd`%g z>bP^BXOr&#JWr3^skFCaRA_(AZP$+^c>p@y+=fx8NPJcPbg`V_}kKTp(rLjrRv0F2m z^5jHvB=!wj*#TIcm0iBRbSBl5xO_H-1e(JIRr5csf*QIdB;bKh{|XO86&Ey_TddI8 z)nf(gw+c@HXEh|i7nDw+A1hG+0000006+%O@c=CVpcVP|Q(`#5ncwm@WjRs=*MG=} zqu$^-Jgezz)Xvlh&*w#v{0>06E||;Hrq?FQK_4#VumBACQwx*5Z#asziK_T6xVYQD z`7wS78w2jOwe!y#-2!gmMhY{&eBSWH=cEyQ@?2e8NNgjW&J6!)Uvod)x4ir1ONa4000004-gs;F!r~e zgZxd}CGqW>-7G)sHKoN~{sW$avDztJ;}Txv>_}@oSQ4&sHk62*eV2zG0|-4EDxOd7 ziM=;(_$ATvd=R6P@%Re5#EzC|7upH?su-eO(7j1#>-e|la)lsZxp%;-Mc(uz>0=Q0 z4iMe_l-bR(`eM*lx6Ypn@F*1k00000002Bm^8W>OE){=mhvf_&h$pnfzCILN3~;LX zc8(ZSNEd=y&A%$>?6OYrX-s3`H}Z*@^pKl6#pC&dH=9iLolg_T8@*5HLZ67bKd>CNQ)3w@eRe^L}{O2DOdh zcW(1Uw5}^zhFI4%Y4;@Cwzal`l<_Qcn`e}{%>s?9TC8Aws_+E#uqXK8ke2GLrpl9W zXKdpBLI3~&00000xSyYiZOg5%+zOfdqs+!tmFf3lUJ8BZUd)twOhKY0##)6^^a5cn zZfh`Aw4jp|5q937q63Z&%rn;a#PDHE7UN7Ejb0~fwr`Wz&WvBk}2?t1y1_M0$kigqv0{{R300000xRgQh044pKk$^r? z?RzsvvhpzoB{v1Rw=!ZU?A=TpDv`y4AVJHGH_S*opRfa=HMT3%_VsS0r z!R&?q>>iK3qX+lhtqOYuhv4beJ=Y!qmeneKx3#j!KR5Zn8(hg--Hk-jtG?#VV}bNP z=ILki$_aDnXU~y7NM7ri^?X+c>!7{xzQpgwM{u&kgM(tKx8qhpee-hm;KhvD%eY!| zK`C2I*8IeH4gdfE0002sfz13qfbn)}oExk5GBJoWB-QV4BqO((DM6M>i9a2fNV%hl z%vIJYKFq5)AUG15d_ICRpp~iOfV{D!Zvvwqoz`Yi#Q{k!5iCo6C{XbeC6AAki>o{V zY7U7{LQuEpJoEy1)=L5a00000000000DKI8?#}C?XsV@)00000NkvXXu0mjf4>A~L literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00010.png b/tests/snapshots/nanox/test_menu_settings/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..909ec4ffffa3780f00059d6e808091031020ef2d GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jjba4!+nDh2V;G|{+o`%HR zH)mJ;S1z1xXK>blbHNU-mVfsz>v1e)Y)ZWi)C2Y@0PjQSkCNE_uk}Q_(RG><86YIR=3=m^ecI4u2!hJ{faA<+kFgP>OY*f+JA3-dE5`?cTI2j`DQ!3`=xL- zcU#KYkl^WRGmUpT&AJl*)0_8o{gr6jTpzAo+g^NIpY!(V);m>)tJZs-Z@AX+$9OW& zoaTG!4rX^(ACl<1*1Ygbnf6)LQ#bjN-|Ej}hlLi9)_KLu{6j>evL^K}NYvBS&t;uc GLK6VK!>>yK literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00011.png b/tests/snapshots/nanox/test_menu_settings/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..160a0ea2ff6105457a725f98d05453d242e0efac GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Ri978JRyuBLR*Q_AGkWjwa z{Nq3OM|!^#tQ4JE7u{I)bKml=xewDBrn3T7LqJ3RM`O)=FU`93udT!^1ny1#bExI{ z-?JXKEYH8XzwLPW+ADwm`e`~`edlxJvG>)k4{KFFJ>mQ;^v-D(=V?V=`KNySr>FD$ zypZhm^H%QqMH^>o@%Mi-N_?mA`PT-K*$Z;ki+vRe_H%f1yk@fAVqptOxsAJ%Og6_} z%D=ouTVuWBy$Yk}Hxq4bcBiC$kDgV*+Ug(iy;0?RP1kY}g{515s~n5dj{hq2A*ZrU;bWuJBjGbkV+;6V9L_QtK-ZKuXhQw525y85}Sb4q9e0NX`{SpWb4 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00012.png b/tests/snapshots/nanox/test_menu_settings/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..909ec4ffffa3780f00059d6e808091031020ef2d GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jjba4!+nDh2V;G|{+o`%HR zH)mJ;S1z1xXK>blbHNU-mVfsz>v1e)Y)ZWi)C2Y@0PjQSkCNE_uk}Q_(RG><86YIR=3=m^ecI4u2!hJ{faA<+kFgP>OY*f+JA3-dE5`?cTI2j`DQ!3`=xL- zcU#KYkl^WRGmUpT&AJl*)0_8o{gr6jTpzAo+g^NIpY!(V);m>)tJZs-Z@AX+$9OW& zoaTG!4rX^(ACl<1*1Ygbnf6)LQ#bjN-|Ej}hlLi9)_KLu{6j>evL^K}NYvBS&t;uc GLK6VK!>>yK literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00013.png b/tests/snapshots/nanox/test_menu_settings/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..160a0ea2ff6105457a725f98d05453d242e0efac GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Ri978JRyuBLR*Q_AGkWjwa z{Nq3OM|!^#tQ4JE7u{I)bKml=xewDBrn3T7LqJ3RM`O)=FU`93udT!^1ny1#bExI{ z-?JXKEYH8XzwLPW+ADwm`e`~`edlxJvG>)k4{KFFJ>mQ;^v-D(=V?V=`KNySr>FD$ zypZhm^H%QqMH^>o@%Mi-N_?mA`PT-K*$Z;ki+vRe_H%f1yk@fAVqptOxsAJ%Og6_} z%D=ouTVuWBy$Yk}Hxq4bcBiC$kDgV*+Ug(iy;0?RP1kY}g{515s~n5dj{hq2A*ZrU;bWuJBjGbkV+;6V9L_QtK-ZKuXhQw525y85}Sb4q9e0NX`{SpWb4 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00014.png b/tests/snapshots/nanox/test_menu_settings/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyG7z<1nGM2KsdOowqC=TJ zXX??P3Sqz_`JT0v)2EE;0kzssDd~zU>3;jNtatINCRA8EjVenYz6`tho}y0V;5f1xx=*Tv` zj(@@~rvlEn3o<9#@p}xt%e4r)0K4(K=leGdJ*wwd*^C~5hQ$r=sE1Mj0Dy6BKF)N% zsbBt-Fm^D`sEtfd>M>eZ1!EywxH)-O=3Ictnga<+00000 zZ;}gKlk|-CvaI^f?Ts=!EKbPezfIs8Mjk}sS9L=U|ERux@;&U*(sOMS(ZmHJks$t}W za|2z=9d^`@#$p8|XdQ5GsY8zOYQ>}FNNfIJOxLqnVQ_cb@{1UmAW*~31l7p5-T(jq z0036}SSr)Qll?7B+%mcE!R)r7?zg%p{}bR6iV@dDQ^*^k$blF_5Q7S0gZI~{-bpSw z^Mt{>JCC`izzZdHq0%gs7en7g;8Sc+R6UDgc&VRfo>)2u;yKsxerTf$2N1(;`m zf#{aScE0X^000000001hFQyjpFTT;_X9m+%`?B?$@Hf1gZao1tKISmMlO7Y)Q&+Fp cDReYSzpxA%3 zQ@(rtPu$@xw`P%t{*6r*g8$!VdM(U!oL01r7pMycd_IcmOb-$Y|5p1x=Xb|V`RBoB zc{zUw>y(=m7f;{oSi)danf4^m@VQqC)6~=>v7f_kyWY+4TYo0_x^A!$bJ(Z#Klr8@ zPZf50GR0UU*igSKAZ<&G_m^&s`27);T`~7$Dke^nG?=u1Wi8tavoFjsyrJi#_b*TV z`RnMsHGYd(KbwEmbDZ}p`_a`;d6jeX^thL2AGP6qAOBluiL~(Q-pB(!hLg%8&E=Ln z-(z4_@Bc-j>caXDFV$jhD!Oc`HcQM8dL@64*=$Qtn8@~Zya!f#%-{D%NBh`<*CH)! zj{@u}*mARj?BiWB#jUn+$4#r_ z0iS2T{=fYkgUyv7<_||aH(X(`xtPWLVTY%|>;DasCC{tm+vl6I!NLtlC$z=SbW~V$ Sw}2fKF$|urelF{r5}E+v1Gi@Y literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00018.png b/tests/snapshots/nanox/test_menu_settings/00018.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyGgKlk|-CvaI^f?Ts=!EKbPezfIs8Mjk}sS9L=U|ERux@;&U*(sOMS(ZmHJks$t}W za|2z=9d^`@#$p8|XdQ5GsY8zOYQ>}FNNfIJOxLqnVQ_cb@{1UmAW*~31l7p5-T(jq z0036}SSr)Qll?7B+%mcE!R)r7?zg%p{}bR6iV@dDQ^*^k$blF_5Q7S0gZI~{-bpSw z^Mt{>JCC`izzZdHq0%gs7en7g;8Sc+R6UDgc&VRfo>)2u;yKsxerTf$2N1(;`m zf#{aScE0X^000000001hFQyjpFTT;_X9m+%`?B?$@Hf1gZao1tKISmMlO7Y)Q&+Fp cDReYSzpxA%3}gmd88S*1ehGYG=FeAsD$J(8A6IwV+k+eIWn<0000JxhSv2ZP1|WT#2inBYn;49mT<)}L^fv=C;`^)U)2PtK3jqKC00000fFnIwx|4LuP#Z4) z^mK(dqR2c#4?v45x0k0Bib;mLAo_&C{-VbP_0+xNHvuJ~SAd?yKD-GRLJzyjzYoKgj1h-n1UbG{q?KaXXILWqaV;`0Cw(UoplILK@|kHJ?H$(e>ZU0RPc;2kJ}+yj#X1nj6|&#q z$8m*pSuJd7`b7rX0msq`%~or*=CU8z^jEd8uW2S=+0Vg4QR#P=hs?3D9zpHyj$pOI zIOCpNy#v-&eBy($49RX)-ltmOZWI6jz>9S_4>;%6DMDF(`n=%+y;6S9Dw974X|-_@ zZB<$KX3Yi7E8C+cpo8rk%#@D4rFz1Zl?-M3CU}PlsOCYt^rS`h9`*>jRQVM&#|{|$ p$v0UUw&6H^=Vkx^002ovPDHLkV1m6mn2rDd literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00022.png b/tests/snapshots/nanox/test_menu_settings/00022.png new file mode 100644 index 0000000000000000000000000000000000000000..6d667a9069d6a2a49c5ecf211d1610a653835ff6 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^K=ba4!+nDh3QV^On$2t&Z_ zm%cmxPu$@x?x)G5cx7AHv%OP=_6gWo^zG0AYGT;awf*tz9>ZtL6ad>w3GQB$&zrb*EJlZa#b99{BRdl-WM_W413S^mpG7nK-Y| zzb}sQwa&ed4w3C5(^sv(yyk-m&{qvHcTSz|&T22uJ+VbrI_SGy{myGAkB4;ai~SlK zu=amfiJYtb`^gR5CyNVKv&5tdKACO5-Rpp=NOXR=_kkzf3-0}}dANDX{faN1-XD*j iyY+w-4(Nyvt^2Ab=?CesFo7(_{kx008(gY8Uj$9nKA#6|&d!%fC3Q zQ^}gPT+7~QdI9LEh&9PAj_GFc>};r9GLsVkL-(5dQ>lz;g{{nhRxUUUKDQA#YXJ>s z7w4k@4*QCv|!!o4NhQ^j?cD2mk;8000>J Y2eVaD>Pl%n#P6*VY(=9PzM&KV00024;^XW9=2~l^rPg{% zB$w7&+gIY0ANf1?vjg~r)>^G~%jWb$`95^|qu!oy7_C%*GMk#FdZI&l5?ZVP0V2)mh$E7^7bWkp2HO*5E!iEn0(c3pQ;@ zD+zi!=i^ZGVe`q1m6GnmMC!wtLcgq>@uBJ0R|jnTc5YPM@2O{fF+pKlC``cy8IBu!nuiY~!7emj_mNYuD$T yQF&}ya{tu5&)*+@I+MMv_n*8BER+}+9_Ym@W-_=N9C3UK67+QSb6Mw<&;$Ve*t%W- literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00026.png b/tests/snapshots/nanox/test_menu_settings/00026.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfd92d2948af79c689dfa758eddbcf6d2cbef3d GIT binary patch literal 449 zcmV;y0Y3hTP)IQPLvx$^OpNk+HU6lC|d1)B-h zY4>dO2sobNjvthD7ICZkKFtJga{&MV002tqth_Fg4X>KXvK2F_YhNy|DgCh&Q8%w^ zK{b7ebRD9e`*eUKWgl$S0bT|{x%snI2e=@%-gfJN#RoyX@i`$ZSJjhkRtkN`nt)_?T&f+6Dw~QndQRbl)wOB4i)Tk2F6_talyXhh6OYL7e8vz}kF3v{>7=zJ0_QY=c0q#s50r}0k6_?#Z=bgoWrbSl ztUWDTueNka)a#jleP*_A->|~@?4#n@AM&QY;+Q(`{3-3L8+|nEw|%=?ckJ4U*aspE zKLb{)om97#KQ57N-0-R?rb%nn%Dk;Tn+~~sp5)G8*S990>kjAnl0VB9ct*P4Qf5e% zUM9W2?De95j3+)Xt4S@52`F26sYLm~HJ|XMdzcN(&fBK~-8S)`TtTJx>8M=i{XY4( zewCM9*n4>0_OflCcfJ1-8GJSRN#{bg)BA(YztCp*vQJ&IIaJM8irI3(seC(TvsJgQ z9zHj3dj)%ozcD>Pl%n#P6*VY(=9PzM&KV00024;^XW9=2~l^rPg{% zB$w7&+gIY0ANf1?vjg~r)>^G~%jWb$`95^|qu!oy7_C%*GMk#FdZI&l5?ZVP0V2)mh$E7^7bWkp2HO*5E!iEn0(c3pQ;@ zD+zi!=i^ZGVe`q1m6GnmMC!wtLcgq>@uBJ0R|jnTc5YPM@2O{fF+pKlC``cy8IBu!nuiY~!7emj_mNYuD$T yQF&}ya{tu5&)*+@I+MMv_n*8BER+}+9_Ym@W-_=N9C3UK67+QSb6Mw<&;$Ve*t%W- literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00030.png b/tests/snapshots/nanox/test_menu_settings/00030.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyG}gmd88S*1ehGYG=FeAsD$J(8A6IwV+k+eIWn<0000JxhSv2ZP1|WT#2inBYn;49mT<)}L^fv=C;`^)U)2PtK3jqKC00000fFnIwx|4LuP#Z4) z^mK(dqR2c#4?v45x0k0Bib;mLAo_&C{-VbP_0+xNHvuJ~SAd?yKD-GRLJzyjzY0@?kEP)H~aRw6fmAze*x;9Ra1|m%b)PL(c5y+(nnxD$qQV5JCtcgb+eL z2~&G9d%yn_Bwvlwd%3+1c8>Ip>fYfU;NX zdvR0cFS~-8$IO|hWIBWdD)W|RpK`-Tf4{}u#`G5unE7tqu9#OE`K&As=!3WMyjX4C z180526wJ#puLxur$eMsmnRDNGDAZ51q5EjNWMvW|gb+dqA><#kCLSx1ba4!+nDh2VblwpK9*4l~ zul#QOpLE09ew9MXXAS|Tl6OC)QV%J!@pN(kHNn7)N2?e2e2;UPQ+)OQ!TYYE&3o@% zX$)|_^RBRN*|m8*rxNz$d}Me2|1aX4EQ7XB+}9Olz7_BD&%HZzYI1gG%c@D`tF#w7 z{Z_td7=5+&zHj;VPxqb|O)U0vy>Hjk`)uz15bcL`qEh98#?p`Wg+}wI78@_fapVfh z>3^JXQ|i#0&4#&`q%?2y8g?%`d|UH{;8nvFYU_%wy?PxKe{iSfi@ql^^6Nj(?Je0e zbsi&!@bi_%&PIaIkNoy}msY=W+l)Jlu6!+8*WDc=epz{SZoFB6wB3eRmwt(S$$Z4T z@ylM$_iO&J?dw0NEYp@VL&BcpV*E+B|1)eArr&w{HF#U&WEK1HkpEUp$1fa}XgJ#U zM`F3izBi}8RUfFAXpo%$InJ3Y>P?U6frmn{paRlcezA%~u=Lzjx2Xn+db;|#taD0e F0s!AUx()yU literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00034.png b/tests/snapshots/nanox/test_menu_settings/00034.png new file mode 100644 index 0000000000000000000000000000000000000000..e525706d6a3e1faeecd5b54c58ec13231cdb4e45 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jkba4!+nDh2#bYF{tfJ0!K zk#*vK?cy z53)IK-#vH#%B{tYl0DP)>XKi~mp{FedBM+<+IgYtIiJToeRFP&O|h48E=lRxGC^$?Tuafvu80@>Mv1n z{BFTBZQa51cCwe%)=s>1*C6X+Nre^b-9;8`M~_TBA5|OsO54Jm^=iktj~}h(S5D~L ze#w}j?$MpC=^bj1rhM2rY1fU|E?qbIz(+N9*IQk?x?fJax=l}Z2Wx&r$;-bYUvdxe zZhToS92fbIw??)(+JYz2z_3nm(SJ4Bzh~z$t`yM^(vmFedg0DpAMjH!)AV_c^U-g4 z;?H>wEbEhMkQF}|$h=|kWwwOft{X1@XSCXJaqqLTWLSuS=(Hc~&ILTatE56DKwM8( KKbLh*2~7Y$r??>i literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00035.png b/tests/snapshots/nanox/test_menu_settings/00035.png new file mode 100644 index 0000000000000000000000000000000000000000..1418d03829e19fd98cd7ba726b5f2d44bb7862f4 GIT binary patch literal 432 zcmV;h0Z;ykP)dhrQ-)c?eo{QN7qE@ z*{;#Di$f!qLL0Vvr@QJ(+&#hkgH3ov8rh}HP+MYWkhVPi?l1S-)4FWf^3@i$I?LUu zskYMAsx|+vg)(Uia!{`FEMI1>McIJhFgv!&zwj78IeA<-+u- z{v;mf_(^jdXGs2qAAr`>ux}uLsZRsOqiO9nE8XSwX%wlVnxw|LkiW+7y!;^Arx!-+ za@F?h%U)RZ2j`>IpFp28_fuoCPg?quJGr!2~>qSJLi{o`x>hI^H-q!*O@w zy6Q9Y^wL{c^G_H%24Jx#9LDKEfA#49e|o|I3_Kc}k1c4i_gDeETmk?90000000000 afL=chBP7}*&+DH60000w~ba4!+nDh2V?xbb~o`%G- z^!!7A`;WwaV-IfkJk&0qS0qTN*4M+Tc7kO#62qeFelmFx?=r~_K z{NJ?hpACJQf6um`IFqxdZ5IEYWgnd8{Nymr6J9WNE4S;VU-M2JEsYFIT_NMUJn*!8 zjopgqJ<b|PjA;+G9_!T#xaeet9!j`uG?hR9s3hznPAK-XuPi@dG7~l!7m+d zVwZ1;sl4Et7I{r+hQE}!^5#0TLpQ^AZeXp94E*&if9>p|vujy*aN?!}cK1s1P}wc6$Ww(?q^!K9S*sdp+j*RRc*xbk0a zPf+mR*@o=a7hB67S?-yvm!EF_rS{4<%P&8_z0+A|@c(1EzU`s4|63LsGS0S5FkZKM zW3&9df07?Kg$?#AZxhtb*qnZcaZd~=fT5sa^FPM*Y)Y#NJc5^iggjmST-G@yGywoO CA+!Ae literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00037.png b/tests/snapshots/nanox/test_menu_settings/00037.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyG0@?kEP)H~aRw6fmAze*x;9Ra1|m%b)PL(c5y+(nnxD$qQV5JCtcgb+eL z2~&G9d%yn_Bwvlwd%3+1c8>Ip>fYfU;NX zdvR0cFS~-8$IO|hWIBWdD)W|RpK`-Tf4{}u#`G5unE7tqu9#OE`K&As=!3WMyjX4C z180526wJ#puLxur$eMsmnRDNGDAZ51q5EjNWMvW|gb+dqA><#kCLSP@)+k#d(kL`pqlh}AaOr2qF+MPyJgY#6pIK{i1?G(X5PszB#0=fk=g zBRxZE-IY=TYd^#`V-2j^qm&XAn`1=I0H-&`K)!MWxcPI;k^lez0B}ocPh{qEE=ts- z+FGaH3ID>@H1zo#R*Wv$byQi@DFk807IR15R|87c$6 z_1o2aa{4g;AOQdX0Jyb`8!<_x8Jv5l@N9}->bs#kbANjq6AVDjpJ|wADkRnaFQwK6 z|5V2teG|+88RPzQ%2{GR@0oC)OhLB_Ofdsy9RQCh#$bXasK5H}xaki700000fc*Xd XRZ)ZzpfP|000000NkvXXu0mjfN2b-d literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00040.png b/tests/snapshots/nanox/test_menu_settings/00040.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5e1c196d866edc5cb1949fd7ef7e69520ed067 GIT binary patch literal 535 zcmV+y0_gpTP)KfI8n(N@}NXt6B+eb@UbHXTU|&Q>&NffUKIl0QDQHuWcPW zs)@4G26ByxA+>`k;m=d$6vw# z0001|h^PlltOVSRIdZJ?+jWHh+xk>JPyQjMRszIFi(4ni&04fjAG4aG$MV^Q>_0RQ ztPBu(vSa0&w20Nd$?gN)DgNIkMOdf{JWk5q9ZU)Rl?4zfUk;+J{u(n9vGAYPg356p zMt%ARWq?x&5S>1jiGQutR-&o89dQYN`71a8000001Q4vQTnYNDKPB?;1)dR@+|yN6=(g000000002^ Z7XOX#x;D#806qW!002ovPDHLkV1lrF@Ol6M literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_settings/00041.png b/tests/snapshots/nanox/test_menu_settings/00041.png new file mode 100644 index 0000000000000000000000000000000000000000..d9936845661a7a3fa52829b0c9bf13cd8d2ee36a GIT binary patch literal 426 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=ltba4!+nDh2#bYF{tfJ0!K zk#*vK?(bZ@l$MG(br_1-7b|K1vo-48 zmHlhB?14_3K26nPht#U>hu7-T*+0BBo6)dm#aY&Q`F%>yPu^H}JAuimHo4PKu70Na z!C&8IFsRptt*=+vlf}eU)f^RI$@tn`=cMAamtV#A<*vV2FYQ*Z=2ma_ECGTnJtgj5 zyzuSpzF$_gB{NT*TUU~EZSU%j(M>z|cDet5{o>I|cYBtTbLN=EzdP;o*>lymilz3P z6?Q@|R%fupbng#4efjb6Gp@HhEVxaizK7>eDNLKUt$yjpvKupB^JVD!%)G33;dx1h zTSbn2iEqQcgU!2k_8I;9`@yxh?9738Mq54}X3ux-p1W~3&ysV_5qw)J>s~QAz72Fw zTcKaPdG4ZhGap+Xn;U+GW2@}F>z209#lJk`H;PUG1veD%eBpl`<}bMY#WMwvh^MQc J%Q~loCIIpUxVHcR literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_slot/00000.png b/tests/snapshots/nanox/test_menu_slot/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..e722c27b8303836926cc301f1d0bb7def66da253 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-&ba4!+nDh2#^rmJ7o`%Hg zW!8oNy^Hjp>z+;M@K8MX^1toYE|=z*E4j=-O)wC=N2yu%xZ?irwdJR-e5;cz%z5g( z=djY*-9Mtv$_hS?)>y~rGrjhZ&H{5WRqIQ-?kDe`Nc+LvvGC=clci$U--}<6PMxmz z%*90ezMtg!P*dj^W|8mf_uZXiy-OqDbegxz=Av}(o(qZ|%MMPvc|)hb+}G++Q1SW> zxuzp)_iUHHDr>vC^3k+~(=V^Il=&`Oy1i)gWZ$R_Yi|nHdt6It=D(#NpF5%RO}f(W znQ}A#-dbD~sP-(S&AVD4`-%RX`LoLff7vdWeUs<;o6kMQ-T&P#zhr-1KJm$W#>q4E z_kQ*}{`rdHio!n+@1B;JF3*$XpT6X3xTEflmdK II;Vst05VLV6#xJL literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_slot/00001.png b/tests/snapshots/nanox/test_menu_slot/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..a6dbaf70772384246ac9a2ce222b9abc18a97246 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^K?ba4!+nDh2VU|+L>07F3e zX7i8#+&}64zSttrrLm1C`upDXViP-!Ikubz=>h?skD`(}x3_(%jJ@tQfA4C2x0?44 z@;?fTW!^dbzPCm(siyT2S3v0xzYyyuy{_lEU;33VT|Y7P2Vcj;)5X*0ZLauN*1pFu z_S9}ur7-sRc}DxpuW%HyYCOxgyDMe9>&1rYXN?6{H=9Q#wdgr!O51Ff4!8cYOtb&T z@^AN4syMxNeX9Gn?)1gdc9^<-S#&VWtlwo#**yy( z_FKQFUGxsPHud}C@VR|;;g!?+7e017^{y-`w(orG)!UV&lX$BVvP-M4Tm4v{qZaw? za7d8u?}Jw!_=PRBeybA6+ZMIl{7deOOlNuCmmeyHzif*?w5K+Qah_55yp8O8WGj6) zo!g!JSZc5GFHPeIl6Dre&qp-v`ezUEGy{W&=3j=-NtbtNSw6BXxCzDw(Gug+nAhn|>uyG!OD{rg?|3H#-h zdm`17wtjx9`grX+w+?Lw!@AE8uSs5XZ4NW*cUe<*&r(Ragv;yngNavn+r+Sk z)^BPTg9D1R-XCATOQtrg@>K4N9TPY0o)fnGad!CJw|jm~;Jvls>#n(`{QtDis+_Ky z;k7E&eumVU6tP*E>L;@du4Gp^?{C|e{NmjN;k<7>e$~Ry-e=ZsQ@(OGD}ig452M;< eURJ0N-@O!1NjEaktG3V_}$4!S7I2=A( z@AZ6FzvRx+?lTs3F0NB%9Iak`jnO4w%@+%x9%P`+H zG_hC5t}jpfqG{D6Xl$i(#^;rf!{PqfTMGHk+JF60(jOA;?QzejOjp@6{KogC4>ENAN0;@A6r!U(Tcx$EZ=3Zk)rGlS&8}iqw+zAb5 z-6i~Ui`4QXMn+xxS(Yk2-qCxSDK%vM)s0)DeqLInzhR}&l!6LPt+vB;6Ru4-`18w& z`3sNDxt$-l^?}sY)^`)aes0aqy2AT4p>+MUX$NXtoAs_L2>(4E;N<&7zD?#$i`JIO zeiKeQYOLqWzrAyz`L?4EdOkQ^vpKS8XT9C-c-zkhd%e$}%F9^v+hP^x^yWnm1FNH- z^2>a@vC{N`j$ZG!4{`3>S;M{s-gTe~DWM4fn&#vN literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_slot/00005.png b/tests/snapshots/nanox/test_menu_slot/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1682ad8e4c6a0e04ec7f43c39862435e58074cd3 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9fba4!+nDh2#v{17Gk3-w6BXxCzDw(Gug+nAhn|>uyG!OD{rg?|3H#-h zdm`17wtjx9`grX+w+?Lw!@AE8uSs5XZ4NW*cUe<*&r(Ragv;yngNavn+r+Sk z)^BPTg9D1R-XCATOQtrg@>K4N9TPY0o)fnGad!CJw|jm~;Jvls>#n(`{QtDis+_Ky z;k7E&eumVU6tP*E>L;@du4Gp^?{C|e{NmjN;k<7>e$~Ry-e=ZsQ@(OGD}ig452M;< eURJ0N-@O!1NjEaktG3V_}$4!S7I2=A( z@AZ6FzvRx+?lTs3F0NB%9Iak`jnO4w%@+%x9%P`+H zG_hC5t}jpfqG{D6Xl$i(#^;rf!{PqfTMGHk+JF60(jOA;?QzejOjp@6{KogC4>ENAN0;@A6r!U(Tcx$EZ=3Zk)rGlS&8}iqw+zAb5 z-6i~Ui`4QXMn+xxS(Yk2-qCxSDK%vM)s0)DeqLInzhR}&l!6LPt+vB;6Ru4-`18w& z`3sNDxt$-l^?}sY)^`)aes0aqy2AT4p>+MUX$NXtoAs_L2>(4E;N<&7zD?#$i`JIO zeiKeQYOLqWzrAyz`L?4EdOkQ^vpKS8XT9C-c-zkhd%e$}%F9^v+hP^x^yWnm1FNH- z^2>a@vC{N`j$ZG!4{`3>S;M{s-gTe~DWM4fn&#vN literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_menu_slot/00008.png b/tests/snapshots/nanox/test_menu_slot/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..c58dbf531cf5b42b939a3e88ce7bd688e62dcad6 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qg1z7978JRyuIPrcgTQ;^@72y z*-!qte~L{DfCIgauASNwQAL@*rU;PY2qL1U#`8sgstFx z-TT@+)%-4=gqiQQU(4IfU2*g0v(9dnBBroO=8U;(MMW$bzwgukpdcdY5UtT%%i#Dw zz47m6@hg8>U;gviWj~+i+2n&YMh|w^{94{|*Cnpz+xk^gwzu5B$!fFxjQ9J64GeO< zo;Jsf=lxv}_#?p7V$bf~67_CAJ_lHO(rb3_yL5BPX8Av+U-sD%mSX-@WmAQ4YjKbLh*2~7a#oPH<( literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_verify_confirm_accepted/00000.png b/tests/snapshots/nanox/test_verify_confirm_accepted/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0afdb58fca6b8a3745b462da1b9199af2ef18b31 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-xba4!+nDh2#Am1Sco`yt| zdnw=TCzXF}T#~7g%o5S~v!1`r;CR9fAw?FTCLl;yvHnuc?kUI198$&T}Zr98c6vZ7B-vw+uTr>xZW4ub?&ld0TX^e-FO({hQkSZFM6Gu9sOiNrm(^3)B+3kgZF(K(yLZ}{8o8J?52ZC_o=luN(z1Ioqy*oz0~+z z24wXCox|H7zcs6Peyn2u(*JjQ=Qg}4tFPbucM@OD2FY*>vkmObtz}|2KYXw+T2U&- zIQ?t7{i~cqGvyd3mK@GB-xBPsb^WX{+{ literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_verify_confirm_accepted/00001.png b/tests/snapshots/nanox/test_verify_confirm_accepted/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6d125c66b5a826685b23677012c23609ac08b1 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qr|pX978JRyuInmbyz{f_2Kor zqkr{J?k!PhdBESuv+8-_zCdTI4c~)I)tn}&ctX%6!>qMiua%dd|8m#1!F-wK<3;%i ztW$z+wd=im{plAI>zalcr3ZZNmF#x2f4F4vP~bBEBl`s}AGIx$zr%ECf!Kzqmcj|F zcf#*p-Ph3+eqhIQ$MOr}1wZm5-dbqN+VH&paM8VMamQ1R^YT?vlUMluKmR5{J$>Qa z53dboeUxi2k-BBevc>zIVa(xbAwRar1Fxp4JaSyqtdmeOzb``e1D8awoG^Ro0c{1z u6vqDd%8t>>DU6GKq=TW32YMk$%zm3*hrnL3#QVSyVDNPHb6Mw<&;$VR7Jt70 literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_verify_confirm_accepted/00002.png b/tests/snapshots/nanox/test_verify_confirm_accepted/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c01a756a2abfb05dbc6b8c0ab9741d1b4c600936 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QlC6s978JRyuIP*$D$~}8enp- z<+pt2?i~t>H*EVPO&k61MQ>X5Pjr>%RFEbRkc`S+yY*`5o(Hw1jQ=&Yf4!T-*7GHM zZMJr$X9V-U*#-+=PT#>+GF|S;viL_*21;@Z-IvFERYu1i$iK5ZAmf+nJD}u_;>-04 zFI2_9Kly(%^ZsPlU)rAawzd)e{MRls-#GJhZ~cSM_4UeMK41DD5qn_%nX@mrJAa>i zmNc#K``UE-nZ@h3o@*Bb@}~PdFa1)h!Rou}jbMmeuG{l_Z|X&p@(vuGoRYov_j9`= of0$2QUuZwSWTAZ`#PJO0zH;`xt*ifXK^N>FPgg&ebxsLQ0DRMfx&QzG literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_verify_confirm_refused/00000.png b/tests/snapshots/nanox/test_verify_confirm_refused/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0afdb58fca6b8a3745b462da1b9199af2ef18b31 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-xba4!+nDh2#Am1Sco`yt| zdnw=TCzXF}T#~7g%o5S~v!1`r;CR9fAw?FTCLl;yvHnuc?kUI198$&T}Zr98c6vZ7B-vw+uTr>xZW4ub?&ld0TX^e-FO({hQkSZFM6Gu9sOiNrm(^3)B+3kgZF(K(yLZ}{8o8J?52ZC_o=luN(z1Ioqy*oz0~+z z24wXCox|H7zcs6Peyn2u(*JjQ=Qg}4tFPbucM@OD2FY*>vkmObtz}|2KYXw+T2U&- zIQ?t7{i~cqGvyd3mK@GB-xBPsb^WX{+{ literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_verify_confirm_refused/00001.png b/tests/snapshots/nanox/test_verify_confirm_refused/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6d125c66b5a826685b23677012c23609ac08b1 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qr|pX978JRyuInmbyz{f_2Kor zqkr{J?k!PhdBESuv+8-_zCdTI4c~)I)tn}&ctX%6!>qMiua%dd|8m#1!F-wK<3;%i ztW$z+wd=im{plAI>zalcr3ZZNmF#x2f4F4vP~bBEBl`s}AGIx$zr%ECf!Kzqmcj|F zcf#*p-Ph3+eqhIQ$MOr}1wZm5-dbqN+VH&paM8VMamQ1R^YT?vlUMluKmR5{J$>Qa z53dboeUxi2k-BBevc>zIVa(xbAwRar1Fxp4JaSyqtdmeOzb``e1D8awoG^Ro0c{1z u6vqDd%8t>>DU6GKq=TW32YMk$%zm3*hrnL3#QVSyVDNPHb6Mw<&;$VR7Jt70 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_settings/00000.png b/tests/snapshots/stax/test_menu_settings/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac168e405d55a4cd9f0cdf4668fb2094ee536a GIT binary patch literal 10511 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 nnfm{)_{UFh{@?{d=W%?Oy&5;}VG( literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_settings/00003.png b/tests/snapshots/stax/test_menu_settings/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..9487c4fde5f74b548525f221e0efa56e3950629d GIT binary patch literal 12007 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_settings/00004.png b/tests/snapshots/stax/test_menu_settings/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac168e405d55a4cd9f0cdf4668fb2094ee536a GIT binary patch literal 10511 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

x zGiKh$fSilBsNI-`fiZ44TBJ#%Kk`Art>IK_{Q}xlKu$7F3Hu2YP+bYoliPu!K$m0| zbK2a?3mKN~aB{vOu1JV>5=qe5@G!)sAGZB5H3tJT1{2os-Em|(2Ww0xPD8zdCV)+& zmfW`evLIe42uwo1aKZuSo%U%^bHzq9`I>)?W0*P*%^~4_oi>GcI;at5LAqsw(w)9( z^fy%Z2OxO8tIqY>Suy_>1{jaH4eu_>zV**KYG6w0g8E(5_l!$2-v$Ep_yQ$cX z%5Fui@z+vBGFM*t`9k?w*$#@dy5WG_YYEpzy6-^8wbb34^|8{4LXm1uZtzY=lcwG$ zwmvm>MiaGsMQ}d=)x!vcKxCK{9v|D|ti2%uMp-u!PH?pPh~NsyR@Ld6ffTHh*&FIt znTL%{srRr#x7gr|wg*bH@8i$?fmy+smAlpOi?4$BMdwAyyV?lrp*4|+OAOcanx(-` zEY3OgNeBD%5Ghn5_J(Fs-#QyM#wEYTg_&pgn!x?qc<^NUFr<~V)#`KB!d@v93Y)DE zARp%M5MDaHb@_q&r+bI@IO>V5Y53*j4OvHajaMAJ7Gc5&IIU6a`FSdjJel*!O~IOc zXvO@dT;E(F(t1Xz&HUj)#@um>{XQo~D|r^$g~}xf`2h0)pZ_YuXb-$E+JCm0=t$FwIMn&S0c04-KKq~*KTc<5NJx9nq$dtL=DuB&hYC?V3kkP+e5AOvokY2 z4|YE-S|byRnBDkUKL6UHhoc4n6rvgKTH?&P*Jp>&d$Kmr0RW?*2D zwrx1E6(}{pLQwXtae|OT3GEZrC%t^b~G#W%5oOA`vR~-7<&)~kTF8JDpM-U z^C)P4w?B4oQJb2x6x9>aOfv-kl0}8_^k8z;loX+$^8jl1Dd@<2WJeJ$z?CDx^Drwr zhDBET&WbsQ;u9q0nwYSlnLCXm|IC!yjs))@PTRfv4eI)$up`oS&kaDke$^l(b;5X z841{0i3=ccb$&VzzgG^4nmddV53I<#qx0snnrk`afha@>Sw90*D?-_X(^ zl)k^(C`D0<9L~>DI2c;Oz1k8$hId+len9Kn3qDjKjgL zm=wPhe2&y3&1_>GT{PjTUYD2R2i_>zvAC*_zT}0U9s7a;c=b9ue!|1~2|uE8=t4&H z&S_+SrPY)$VpBY(BGxG#+z0?VM+7|s0y3fKjZ+%|M(TK@HDb}gc98mvMWeov*dnJG ze3p@HaqwOXH;kq5ve|}@%jcIf>{ea?n=hc_6)U{?i5dBgI*Dv`YU(NoZF5a*oTd12 zFum|Hy%3B#Fh5@M>+2Y9XZJ$2^0nX3*{Nw{Ya*R(-~(U$=%ZH_JfpF>4yjbi#ehSn z*aiM%@Xg1)JEC%do@ z@b3#hRf4!j#+rGR!G|~B9F(C+zVad{r{v2QM z?B%S?%ohU5Lg4*{{!Cl<0+0IKmq24=WH@sZi}xL{xw0gtuDubZu*xsUfw^r?Br?g; zOGRAg3{=?J$zF%P)fl?G%oEgF7|eNR{K;m~a8-G6L0OL=XrzWsrsglt=v__)pthA? zYJ_WV(zg%ue5`qbQ?~4RVN(7@GZ$cRe#Hyw9;S`Ok)vQ8i|NSfYmh8us_61KhG-tV zqch)>);M&8nbMw>kpXc27pOWB&#JNvz>ksw58vK5G2y(H^@PXjO2lh+=HJ^eaRSW% z?3u*Y@i;P|uWTy-;RcASse8B;D367$|xG literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_settings/00006.png b/tests/snapshots/stax/test_menu_settings/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac168e405d55a4cd9f0cdf4668fb2094ee536a GIT binary patch literal 10511 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 Mx+ZsOwH*@w4}i-`od5s; literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_settings/00008.png b/tests/snapshots/stax/test_menu_settings/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..770b9cc03ee1d8cb5c348dd900041732c8fe1f73 GIT binary patch literal 9246 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_settings/00009.png b/tests/snapshots/stax/test_menu_settings/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..673d6b6c50d86455427a67f2e454eefae13853c2 GIT binary patch literal 9313 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_settings/00010.png b/tests/snapshots/stax/test_menu_settings/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac168e405d55a4cd9f0cdf4668fb2094ee536a GIT binary patch literal 10511 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_settings/00013.png b/tests/snapshots/stax/test_menu_settings/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac168e405d55a4cd9f0cdf4668fb2094ee536a GIT binary patch literal 10511 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 Vvk|oi9*Y7Q8Qi~BbJHpIzW_CSN1Olv literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_menu_slot/00002.png b/tests/snapshots/stax/test_menu_slot/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..a0811b488bdcbd1af4dd08a0442f0e7dc7c94ee8 GIT binary patch literal 8753 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 G;{O5R8OhoJ literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_verify_confirm_accepted/00000.png b/tests/snapshots/stax/test_verify_confirm_accepted/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..38dd8e01a1f8f7576bf82aa7b1fd66fac5a50f9f GIT binary patch literal 6465 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 1: + initial_instructions.append(NavInsID.RIGHT_CLICK) + initial_instructions.append(NavInsID.RIGHT_CLICK) + initial_instructions.append(NavInsID.BOTH_CLICK) # Settings + + instructions = [ + NavInsID.BOTH_CLICK, # Key Template + NavInsID.BOTH_CLICK, # Choose Key + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Decryption + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Choose Type + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # NIST P256 + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Set Template + NavInsID.BOTH_CLICK, # OK + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # (Back to settings) + + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Seed mode ON + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # (Back to settings) + + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # PIN mode + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # On Screen + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Set as default + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # (Back to settings) + + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # UIF + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # UIF for Signature + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # (Back to settings) + + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Reset + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Validate + ] + + elif firmware.device.startswith("nano"): + initial_instructions = [ + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Settings + ] + instructions = [ + NavInsID.BOTH_CLICK, # Key Template + NavInsID.BOTH_CLICK, # Choose Key + NavInsID.RIGHT_CLICK, # Decryption + NavInsID.BOTH_CLICK, # Key Decryption + NavInsID.RIGHT_CLICK, # Choose Type + NavInsID.BOTH_CLICK, # (Select) + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # SECP 256K1 + NavInsID.RIGHT_CLICK, # Type SECP 256K1 + NavInsID.BOTH_CLICK, # Set Template + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # (Back) + + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Seed mode ON + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # (Back to settings) + + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # PIN mode + NavInsID.BOTH_CLICK, # On Screen + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Set as default + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # (Back to settings) + + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # UIF + NavInsID.BOTH_CLICK, # UIF for Signature + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # (Back to settings) + + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Reset + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, # Validate + ] + else: + initial_instructions = [ + NavInsID.USE_CASE_HOME_SETTINGS, # Settings + ] + instructions = [ + NavIns(NavInsID.TOUCH, (350, 130)), # Key Template + NavIns(NavInsID.TOUCH, (350, 300)), # Decryption + NavIns(NavInsID.TOUCH, (350, 390)), # SECP 256K1 + NavInsID.NAVIGATION_HEADER_TAP, # (Back) + NavIns(NavInsID.TOUCH, (350, 220)), # Seed mode + NavInsID.NAVIGATION_HEADER_TAP, # (Back) + NavIns(NavInsID.TOUCH, (350, 300)), # PIN mode + NavIns(NavInsID.TOUCH, (350, 130)), # On Screen + NavInsID.CENTERED_FOOTER_TAP, # Set default + NavInsID.NAVIGATION_HEADER_TAP, # (Back) + NavIns(NavInsID.TOUCH, (350, 390)), # UIF + NavIns(NavInsID.TOUCH, (350, 130)), # UIF for Signature + NavInsID.NAVIGATION_HEADER_TAP, # (Back) + NavIns(NavInsID.TOUCH, (350, 480)), # Reset + NavInsID.USE_CASE_REVIEW_CONFIRM, # Long press 'Yes' + ] + + # Use the app interface instead of raw interface + client = CommandSender(backend) + # Verify PW2 (User) + check_pincode(client, PassWord.PW2) + + # Navigate to settings menu to avoid 1st screen with random serial no + navigator.navigate(initial_instructions, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True) + + navigator.navigate_and_compare(ROOT_SCREENSHOT_PATH, test_name, instructions, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=False) diff --git a/tests/test_password.py b/tests/test_password.py new file mode 100644 index 0000000..c115602 --- /dev/null +++ b/tests/test_password.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests for Password feature +""" +import pytest +from application_client.command_sender import CommandSender +from application_client.app_def import Errors, PassWord + +from ragger.error import ExceptionRAPDU + +from utils import util_navigate + + +# In this test we check the card Password verification +@pytest.mark.parametrize( + "pwd, value", + [ + (PassWord.PW1, "123456"), + (PassWord.PW2, "123456"), + (PassWord.PW3, "12345678"), + ], +) +def test_verify(backend, pwd, value): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Verify PW status - Not yet verified + with pytest.raises(ExceptionRAPDU) as err: + client.send_verify_pw(pwd) + assert err.value.status & 0xFFF0 == 0x63c0 + + # Verify PW with its value + rapdu = client.send_verify_pw(pwd, value) + assert rapdu.status == Errors.SW_OK + + # Verify PW status + rapdu = client.send_verify_pw(pwd) + assert rapdu.status == Errors.SW_OK + + # Verify PW Reset Status + rapdu = client.send_verify_pw(pwd, reset=True) + assert rapdu.status == Errors.SW_OK + + # Verify PW status - Not yet verified + with pytest.raises(ExceptionRAPDU) as err: + client.send_verify_pw(pwd) + assert err.value.status & 0xFFF0 == 0x63c0 + + +def test_verify_wrong(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Verify PW status - Wrong Password + with pytest.raises(ExceptionRAPDU) as err: + client.send_verify_pw(PassWord.PW1, "999999") + assert err.value.status == Errors.SW_SECURITY_STATUS_NOT_SATISFIED + + +# In this test we check the card Password verification with Pinpad +def test_verify_confirm_accepted(firmware, backend, navigator, test_name): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Send the APDU (Asynchronous) + with client.send_verify_pw_with_confirmation(PassWord.PW1): + util_navigate(firmware, navigator, test_name, "Confirm_Yes") + + # Check the status (Asynchronous) + response = client.get_async_response() + assert response.status == Errors.SW_OK + + +# In this test we check the Rejected card Password verification with Pinpad +def test_verify_confirm_refused(firmware, backend, navigator, test_name): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Send the APDU (Asynchronous) + with pytest.raises(ExceptionRAPDU) as err: + with client.send_verify_pw_with_confirmation(PassWord.PW1): + util_navigate(firmware, navigator, test_name, "Confirm_No") + + # Assert we have received a refusal + assert err.value.status == Errors.SW_CONDITIONS_NOT_SATISFIED + assert len(err.value.data) == 0 + + +# In this test we check the Password Update +@pytest.mark.parametrize( + "pwd, actual, new", + [ + (PassWord.PW1, "123456", "654321"), + (PassWord.PW3, "12345678", "87654321"), + ], +) +def test_change(backend, pwd, actual, new): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Verify PW with its value + rapdu = client.send_verify_pw(pwd, actual) + assert rapdu.status == Errors.SW_OK + + # Change PW value + rapdu = client.send_change_pw(pwd, actual, new) + assert rapdu.status == Errors.SW_OK + + # Verify PW status + rapdu = client.send_verify_pw(pwd, new) + assert rapdu.status == Errors.SW_OK + + +# In this test we check the Password Reset +def test_reset(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Verify PW1 + rapdu = client.send_verify_pw(PassWord.PW1, "123456") + assert rapdu.status == Errors.SW_OK + + # Verify PW3 (Admin) + rapdu = client.send_verify_pw(PassWord.PW3, "12345678") + assert rapdu.status == Errors.SW_OK + + # Reset PW1 with a new value + rapdu = client.send_reset_pw("654321") + assert rapdu.status == Errors.SW_OK + + # Verify PW status + rapdu = client.send_verify_pw(PassWord.PW1, "654321") + assert rapdu.status == Errors.SW_OK + + +# In this test we check the Get Challenge +def test_challenge(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Get Random number + rapdu = client.get_challenge(32) + assert rapdu.status == Errors.SW_OK + print(f"Random: {rapdu.data.hex()}") diff --git a/tests/test_seed.py b/tests/test_seed.py new file mode 100644 index 0000000..ff6cb60 --- /dev/null +++ b/tests/test_seed.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests for Signing feature with SEED mode +""" +import sys +import pytest +from Crypto.PublicKey import RSA, ECC + +from application_client.command_sender import CommandSender +from application_client.app_def import Errors, DataObject, PassWord, PubkeyAlgo + +from utils import get_RSA_pub_key, get_ECDSA_pub_key, get_EDDSA_pub_key +from utils import check_pincode, generate_key, get_key_attributes, KEY_TEMPLATES + + +def _gen_key(client: CommandSender, template: str) -> RSA.RsaKey | ECC.EccKey: + + # Verify PW3 (Admin) + check_pincode(client, PassWord.PW3) + + # Set SIG key template + rapdu = client.set_template(DataObject.DO_SIG_ATTR, KEY_TEMPLATES[template]) + assert rapdu.status == Errors.SW_OK + + # Generate the SIG Key Pair in SEED mode + generate_key(client, DataObject.DO_SIG_KEY, True) + + key_algo, _ = get_key_attributes(client, DataObject.DO_SIG_ATTR) + + # Read the SIG pub Key + if key_algo == PubkeyAlgo.RSA: + pubkey: RSA.RsaKey = get_RSA_pub_key(client, DataObject.DO_SIG_KEY) + elif key_algo == PubkeyAlgo.ECDSA: + pubkey: ECC.EccKey = get_ECDSA_pub_key(client, DataObject.DO_SIG_KEY) + elif key_algo == PubkeyAlgo.EDDSA: + pubkey: ECC.EccKey = get_EDDSA_pub_key(client, DataObject.DO_SIG_KEY) + else: + raise ValueError + + return pubkey + + +@pytest.mark.parametrize( + "template", + [ + "rsa2048", + pytest.param("rsa3072", marks=pytest.mark.skipif("--full" not in sys.argv, reason="skipping long test")), + pytest.param("rsa4096", marks=pytest.mark.skipif("--full" not in sys.argv, reason="skipping long test")), + "nistp256", # ECDSA + "ed25519", # EdDSA + # "cv25519", # ECDH, SDK returns CX_EC_INVALID_CURVE + ], +) +def test_seed_key(backend, template): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Generate the key + pubkey1 = _gen_key(client, template) + + # Reset the App (delete the key) + client.send_terminate() + client.send_activate() + + # Ensure the SIG Key is no more available + rapdu = client.read_key(DataObject.DO_SIG_KEY) + assert rapdu.status == Errors.SW_REFERENCED_DATA_NOT_FOUND + + # Generate the key again + pubkey2 = _gen_key(client, template) + + # Check generated keys + assert pubkey1 == pubkey2 diff --git a/tests/test_sign.py b/tests/test_sign.py new file mode 100644 index 0000000..41ec111 --- /dev/null +++ b/tests/test_sign.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests for Signing feature +""" +from Crypto.Hash import SHA256 +from Crypto.PublicKey.RSA import RsaKey +from Crypto.Signature import pkcs1_15 +from Crypto.Random import get_random_bytes + +from application_client.command_sender import CommandSender +from application_client.app_def import Errors, DataObject, PassWord, PubkeyAlgo + +from utils import check_pincode, get_key_attributes, get_RSA_pub_key, generate_key, SHA256_DIGEST_INFO + + +# In this test we check the key pair generation +def test_sign(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Generate the SIG Key Pair + generate_key(client, DataObject.DO_SIG_KEY) + + # SIG Key attributes + key_algo, key_size = get_key_attributes(client, DataObject.DO_SIG_ATTR) + # Check default config values + assert key_algo == PubkeyAlgo.RSA + assert key_size == 2048 + + # Verify PW1 (User) + check_pincode(client, PassWord.PW1) + + # Hash data buffer + hash_obj = SHA256.new(get_random_bytes(16)) + + rapdu = client.sign(SHA256_DIGEST_INFO + hash_obj.digest()) + assert rapdu.status == Errors.SW_OK + + # Verify the signature + _verify_signature(client, hash_obj, DataObject.DO_SIG_KEY, rapdu.data) + + +# In this test we check the key pair generation +def test_auth(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Generate the AUT Key Pair + generate_key(client, DataObject.DO_AUT_KEY) + + # Verify PW2 (User) + check_pincode(client, PassWord.PW2) + + # Hash data buffer + hash_obj = SHA256.new(get_random_bytes(16)) + + rapdu = client.authenticate(SHA256_DIGEST_INFO + hash_obj.digest()) + assert rapdu.status == Errors.SW_OK + + # Verify the signature + _verify_signature(client, hash_obj, DataObject.DO_AUT_KEY, rapdu.data) + + +def _verify_signature(client: CommandSender, hash_obj: SHA256.SHA256Hash, key_tag: DataObject, signature: bytes): + + # Read the SIG pub Key + pubkey: RsaKey = get_RSA_pub_key(client, key_tag) + # Verify the signature + verifier = pkcs1_15.new(pubkey) + verifier.verify(hash_obj, signature) diff --git a/tests/test_slot.py b/tests/test_slot.py new file mode 100644 index 0000000..aff7eec --- /dev/null +++ b/tests/test_slot.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests for Slots feature +""" +import pytest + +from application_client.command_sender import CommandSender +from application_client.app_def import Errors, DataObject, PassWord + +from utils import check_pincode, generate_key + +def test_slot(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Check slots availability + nb_slots, def_slot = client.get_slot_config() + print("Slots configuration:") + print(f" Nb: {nb_slots}") + print(f" default: {def_slot}") + if nb_slots == 1: + pytest.skip("single slot configuration") + + # Generate the SIG Key Pair + generate_key(client, DataObject.DO_SIG_KEY) + + # Read slot + slot = client.get_slot() + assert slot == 0 + + # Read the SIG pub Key + rapdu = client.read_key(DataObject.DO_SIG_KEY) + assert rapdu.status == Errors.SW_OK + + # Verify PW2 + check_pincode(client, PassWord.PW2) + + # Change slot + rapdu = client.set_slot(2) + assert rapdu.status == Errors.SW_OK + + # Read slot + slot = client.get_slot() + assert slot == 2 + + # Read an empty pub key + rapdu = client.read_key(DataObject.DO_SIG_KEY) + assert rapdu.status == Errors.SW_REFERENCED_DATA_NOT_FOUND diff --git a/tests/test_template.py b/tests/test_template.py new file mode 100644 index 0000000..63325ab --- /dev/null +++ b/tests/test_template.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests for Key Templates feature +""" +import sys +import pytest +from Crypto.Hash import SHA256 +from Crypto.Signature import pkcs1_15, eddsa +from Crypto.Random import get_random_bytes +from Crypto.Signature import DSS + +from application_client.command_sender import CommandSender +from application_client.app_def import Errors, DataObject, PassWord, PubkeyAlgo + +from utils import get_RSA_pub_key, get_ECDSA_pub_key, get_EDDSA_pub_key +from utils import check_pincode, generate_key, get_key_attributes +from utils import KEY_TEMPLATES, SHA256_DIGEST_INFO + + +@pytest.mark.parametrize( + "template", + [ + "rsa2048", + pytest.param("rsa3072", marks=pytest.mark.skipif("--full" not in sys.argv, reason="skipping long test")), + # "rsa4096", # Invalid signature? + # "nistp256", # ECDSA, Pb with Pubkey generation? + "ed25519", # EdDSA + # "cv25519", # ECDH, SDK returns CX_EC_INVALID_CURVE + ], +) +def test_sign(backend, template): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Verify PW3 (Admin) + check_pincode(client, PassWord.PW3) + + # Set SIG key template + rapdu = client.set_template(DataObject.DO_SIG_ATTR, KEY_TEMPLATES[template]) + assert rapdu.status == Errors.SW_OK + + # Generate the SIG Key Pair + generate_key(client, DataObject.DO_SIG_KEY) + + key_algo, _ = get_key_attributes(client, DataObject.DO_SIG_ATTR) + + # Hash data buffer + plain = get_random_bytes(16) + hash_obj = SHA256.new(plain) + + # Sign data buffer + if key_algo == PubkeyAlgo.RSA: + digest_info = SHA256_DIGEST_INFO + data = digest_info + hash_obj.digest() + elif key_algo == PubkeyAlgo.ECDSA: + data = hash_obj.digest() + else: + data = plain + + # Verify PW1 (User) + check_pincode(client, PassWord.PW1) + + rapdu = client.sign(data) + assert rapdu.status == Errors.SW_OK + + # Read the SIG pub Key and Verify the signature + if key_algo == PubkeyAlgo.RSA: + pubkey = get_RSA_pub_key(client, DataObject.DO_SIG_KEY) + verifier = pkcs1_15.new(pubkey) + verifier.verify(hash_obj, rapdu.data) + elif key_algo == PubkeyAlgo.ECDSA: + pubkey = get_ECDSA_pub_key(client, DataObject.DO_SIG_KEY) + verifier = DSS.new(pubkey, 'fips-186-3') + verifier.verify(hash_obj, rapdu.data[2:]) + elif key_algo == PubkeyAlgo.EDDSA: + pubkey = get_EDDSA_pub_key(client, DataObject.DO_SIG_KEY) + verifier = eddsa.new(pubkey, 'rfc8032') + verifier.verify(plain, rapdu.data) + else: + raise ValueError diff --git a/tests/test_version.py b/tests/test_version.py new file mode 100644 index 0000000..45ddc3c --- /dev/null +++ b/tests/test_version.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests for Version check +""" +from application_client.command_sender import CommandSender +from application_client.app_def import Errors, DataObject, PassWord +from application_client.response_unpacker import unpack_info_response + +from ragger.utils.misc import get_current_app_name_and_version + +from utils import verify_name, verify_version, decode_tlv, check_pincode + + +# In this test we check the App name and version +def test_check_version(backend): + """Check version and name""" + + # Send the APDU + app_name, version = get_current_app_name_and_version(backend) + print(f" Name: {app_name}") + print(f" Version: {version}") + verify_name(app_name) + verify_version(version) + + +# In this test we check the Card activation +def test_activate(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Activate the Card + rapdu = client.send_activate() + assert rapdu.status == Errors.SW_OK + + +# In this test we get the Card Application ID value +def test_info(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Get info from the Card + rapdu = client.get_data(DataObject.DO_AID) + assert rapdu.status == Errors.SW_OK + aid = rapdu.data.hex() + print(f" AID: {aid}") + assert aid[:12] == "d27600012401" + + # Parse the response + version, serial = unpack_info_response(rapdu.data) + print(f" Version: {int(version[0:2]):d}.{int(version[2:4]):d}") + print(f" Serial: {serial}") + + # Check expected value + assert version == "0303" + + +# In this test we test the User Data information +def test_user(backend): + # Use the app interface instead of raw interface + client = CommandSender(backend) + + # Verify PW3 (Admin) + check_pincode(client, PassWord.PW3) + + # Write and Read the 'Login' + _check_user_value(client, DataObject.DO_LOGIN, "John.Doe") + + # Write and Read the 'URL' + _check_user_value(client, DataObject.DO_URL, "This is John Doe URL") + + # Write and Read the 'name' + _check_card_value(client, DataObject.DO_CARD_NAME, "John Doe") + + # Write and Read the 'Lang' + _check_card_value(client, DataObject.DO_CARD_LANG, "fr") + + # Write and Read the 'Salutation' + _check_card_value(client, DataObject.DO_CARD_SALUTATION, "1") + + # Write and Read the 'Serial number' + serial = "12345678" + rapdu = client.put_data(DataObject.DO_AID, bytes.fromhex(serial)) + assert rapdu.status == Errors.SW_OK + + rapdu = client.get_data(DataObject.DO_AID) + assert rapdu.status == Errors.SW_OK + assert rapdu.data.hex()[20:28] == serial + + +def _check_card_value(client, tag: DataObject, value: str): + + rapdu = client.put_data(tag, value.encode("utf-8")) + assert rapdu.status == Errors.SW_OK + + rapdu = client.get_data(DataObject.DO_CARDHOLDER_DATA) + assert rapdu.status == Errors.SW_OK + tags = decode_tlv(rapdu.data) + rvalue = tags.get(tag, b"").decode("utf-8") + assert rvalue == value + + +def _check_user_value(client, tag: DataObject, value: str): + + rapdu = client.put_data(tag, value.encode("utf-8")) + assert rapdu.status == Errors.SW_OK + + rapdu = client.get_data(tag) + assert rapdu.status == Errors.SW_OK + assert rapdu.data.decode("utf-8") == value diff --git a/tests/usage.md b/tests/usage.md new file mode 100644 index 0000000..75e9664 --- /dev/null +++ b/tests/usage.md @@ -0,0 +1,82 @@ +# How to use the Ragger test framework + +This framework allows testing the application on the Speculos emulator or on a real device using LedgerComm or LedgerWallet + +## Quickly get started with Ragger and Speculos + +### Install ragger and dependencies + +```shell +pip install --extra-index-url https://test.pypi.org/simple/ -r requirements.txt +sudo apt-get update && sudo apt-get install qemu-user-static +``` + +### Compile the application + +The application to test must be compiled for all required devices. +You can use for this the container `ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-lite`: + +```shell +docker pull ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-lite:latest +cd + +docker run --user "$(id -u)":"$(id -g)" --rm -ti -v "$(realpath .):/app" --privileged -v "/dev/bus/usb:/dev/bus/usb" ledger-app-builder-lite:latest +make clean && make BOLOS_SDK=$_SDK # replace with one of [NANOS, NANOX, NANOSP, STAX] +exit +``` + +### Run a simple test using the Speculos emulator + +You can use the following command to get your first experience with Ragger and Speculos + +```shell +pytest -v --tb=short --device nanox --display +``` + +Or you can refer to the section `Available pytest options` to configure the options you want to use + +### Run a simple test using a real device + +The application to test must be loaded and started on a Ledger device plugged in USB. +You can use for this the container `ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-lite`: + +```shell +docker pull ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-lite:latest +cd app-/ + +docker run --user "$(id -u)":"$(id -g)" --rm -ti -v "$(realpath .):/app" --privileged -v "/dev/bus/usb:/dev/bus/usb" ledger-app-builder-lite:latest +make clean && make BOLOS_SDK=$_SDK load # replace with one of [NANOS, NANOX, NANOSP, STAX] +exit +``` + +You can use the following command to get your first experience with Ragger and Ledgerwallet on a NANOX. +Make sure that the device is plugged, unlocked, and that the tested application is open. + +```shell +pytest -v --tb=short --device nanox --backend ledgerwallet +``` + +Or you can refer to the section `Available pytest options` to configure the options you want to use + +## Available pytest options + +Standard useful pytest options + +```shell + -v formats the test summary in a readable way + -s enable logs for successful tests, on Speculos it will enable app logs if compiled with DEBUG=1 + -k only run the tests that contain in their names + --tb=short in case of errors, formats the test traceback in a readable way +``` + +Custom pytest options + +```shell + --full Run full tests + --device Run the test on the specified device [nanos,nanox,nanosp,stax,all]. This parameter is mandatory + --backend Run the tests against the backend [speculos, ledgercomm, ledgerwallet]. Speculos is the default + --display On Speculos, enables the display of the app screen using QT + --golden_run Pn Speculos, screen comparison functions will save the current screen instead of comparing + --log_apdu_file Log all apdu exchanges to the file in parameter. The previous file content is erased + --seed=SEED Set a custom seed +``` diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 0000000..b89303e --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,318 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: 2023 Ledger SAS +# SPDX-License-Identifier: LicenseRef-LEDGER +""" +This module provides Ragger tests utility functions +""" +from pathlib import Path +from typing import List, Tuple +import re +from Crypto.PublicKey import RSA, ECC +from Crypto.Util.number import bytes_to_long +from Crypto.Signature import eddsa + +from ragger.navigator import NavInsID, NavIns, Navigator +from ragger.firmware import Firmware + +from application_client.command_sender import CommandSender +from application_client.app_def import Errors, PassWord, DataObject, PubkeyAlgo + +ROOT_SCREENSHOT_PATH = Path(__file__).parent.resolve() + +KEY_TEMPLATES = { + "rsa2048" : "010800002001", + "rsa3072" : "010C00002001", + "rsa4096" : "011000002001", + "nistp256": "132A8648CE3D030107", + "ed25519" : "162B06010401DA470F01", + "cv25519" : "122B060104019755010501" +} + +# digestInfo header: https://www.rfc-editor.org/rfc/rfc8017#section-9.2 +SHA256_DIGEST_INFO = b"\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20" + + +def util_navigate( + firmware: Firmware, + navigator: Navigator, + test_name: Path, + text: str = "", +) -> None: + """Navigate in the menus with conditions """ + + assert text + valid_instr: list[NavIns | NavInsID] = [] + + if firmware.device == "nanos": + text, txt_cfg = text.split("_") + nav_inst = NavInsID.RIGHT_CLICK + if txt_cfg == "Yes": + valid_instr.append(NavInsID.RIGHT_CLICK) + elif txt_cfg == "No": + valid_instr.append(NavInsID.LEFT_CLICK) + else: + raise ValueError(f'Wrong text "{text}"') + + elif firmware.device.startswith("nano"): + text = text.split("_")[1] + nav_inst = NavInsID.RIGHT_CLICK + valid_instr.append(NavInsID.BOTH_CLICK) + + else: + text, txt_cfg = text.split("_") + if txt_cfg == "Yes": + nav_inst = NavInsID.USE_CASE_CHOICE_CONFIRM + valid_instr.append(NavInsID.USE_CASE_CHOICE_CONFIRM) + elif txt_cfg == "No": + nav_inst = NavInsID.USE_CASE_REVIEW_REJECT + valid_instr.append(NavInsID.USE_CASE_CHOICE_REJECT) + else: + raise ValueError(f'Wrong text "{text}"') + + # Do not wait last screen change because home screen contain a "random" ID + navigator.navigate_until_text_and_compare(nav_inst, + valid_instr, + text, + ROOT_SCREENSHOT_PATH, + test_name, + screen_change_after_last_instruction=False) + + +def generate_key(client: CommandSender, key_tag: DataObject, seed: bool = False) -> None: + """Generate a Asymmetric key + + Args: + client (CommandSender): Application object + key_tag (DataObject): Tag identifying the key + seed (bool): Generate a key in SEED mode + """ + + # Verify PW3 (Admin) + check_pincode(client, PassWord.PW3) + + # Generate the SIG Key Pair + rapdu = client.generate_key(key_tag, seed) + assert rapdu.status == Errors.SW_OK + + +def get_key_attributes(client: CommandSender, key_attr: int) -> Tuple[PubkeyAlgo, int]: + """Send and check the pincode + + Args: + client (CommandSender): Application object + key_attr (int): Key related attribute to be parsed + + Returns: + Public-Key Algorithm ID and Key size + """ + + rapdu = client.get_data(DataObject.DO_APP_DATA) + assert rapdu.status == Errors.SW_OK + + tags = decode_tlv(rapdu.data) + data1 = tags.get(DataObject.DO_DISCRET_DATA, b"") + if not data1: + return PubkeyAlgo.INVALID, 0 + data2 = decode_tlv(data1) + attr = data2.get(key_attr, b"") + if not attr: + return PubkeyAlgo.INVALID, 0 + key_algo = attr[0] + print(f" Key ID: {key_algo}") + if key_algo == PubkeyAlgo.RSA: + key_size = (attr[1] << 8) | attr[2] + print(f" Key size: {key_size}") + else: + key_size = 0 + return key_algo, key_size + + +def get_EDDSA_pub_key(client: CommandSender, key_tag: DataObject) -> ECC.EccKey: + """Read the Public Key and generate a EccKey object + + Args: + client (CommandSender): Application object + key_tag (DataObject): Tag identifying the key to read + + Returns: + EccKey + """ + + # Extract Pub key parameters + data = _get_pub_key(client, key_tag) + + oid = data[0x86] + print(f" OID[{len(oid)}]: {oid.hex()}") + assert len(oid) == 32 + return eddsa.import_public_key(oid) + + +def get_ECDSA_pub_key(client: CommandSender, key_tag: DataObject) -> ECC.EccKey: + """Read the Public Key and generate a EccKey object + + Args: + client (CommandSender): Application object + key_tag (DataObject): Tag identifying the key to read + + Returns: + EccKey + """ + + # Extract Pub key parameters + data = _get_pub_key(client, key_tag) + + oid = data[0x86][1:] + pt_len = int(len(oid) / 2) + x = oid[:pt_len] + y = oid[pt_len:] + print(f" X[{len(x)}]: {x.hex()}") + print(f" Y[{len(y)}]: {y.hex()}") + assert len(x) == len(y) + return ECC.construct(curve="P-256", point_x=bytes_to_long(x), point_y=bytes_to_long(y)) + + +def get_RSA_pub_key(client: CommandSender, key_tag: DataObject) -> RSA.RsaKey: + """Read the Public Key and generate a RsaKey object + + Args: + client (CommandSender): Application object + key_tag (DataObject): Tag identifying the key to read + + Returns: + RsaKey + """ + + # Extract Pub key parameters + data = _get_pub_key(client, key_tag) + + exponent = data[0x82] + modulus = data[0x81] + print(f" Key Exponent: 0x{exponent.hex()}") + print(f" Key Modulus[{len(modulus)}]: {modulus.hex()}") + + return RSA.construct((int.from_bytes(modulus, 'big'), int.from_bytes(exponent, 'big'))) + + +def check_pincode(client: CommandSender, pwd: PassWord) -> None: + """Send and check the pincode + + Args: + client (CommandSender): Application object + pwd (PassWord): Password to be verified + """ + + if pwd in (PassWord.PW1, PassWord.PW2): + pincode = "123456" + elif pwd == PassWord.PW3: + pincode = "12345678" + # Verify PW2 (User) + rapdu = client.send_verify_pw(pwd, pincode) + assert rapdu.status == Errors.SW_OK + + +def verify_version(version: str) -> None: + """Verify the app version, based on defines in Makefile + + Args: + Version (str): Version to be checked + """ + + vers_dict = {} + vers_str = "" + lines = _read_makefile() + version_re = re.compile(r"^APPVERSION_(?P\w)\s?=\s?(?P\d)", re.I) + for line in lines: + info = version_re.match(line) + if info: + dinfo = info.groupdict() + vers_dict[dinfo["part"]] = dinfo["val"] + try: + vers_str = f"{vers_dict['M']}.{vers_dict['N']}.{vers_dict['P']}" + except KeyError: + pass + assert version == vers_str + + +def verify_name(name: str) -> None: + """Verify the app name, based on defines in Makefile + + Args: + name (str): Name to be checked + """ + + name_str = "" + lines = _read_makefile() + name_re = re.compile(r"^APPNAME\s?=\s?(?P\w+)", re.I) + for line in lines: + info = name_re.match(line) + if info: + dinfo = info.groupdict() + name_str = dinfo["val"] + assert name == name_str + + +def decode_tlv(tlv: bytes) -> dict: + """Decode TLV fields + + Args: + tlv (bytes): Input data bytes to parse + + Returns: + dict {t: v, t:v, ...} + """ + + tags = {} + while len(tlv): + o = 0 + l = 0 + if (tlv[0] & 0x1F) == 0x1F: + t = (tlv[0] << 8) | tlv[1] + o = 2 + else: + t = tlv[0] + o = 1 + l = tlv[o] + if l & 0x80 : + if (l & 0x7f) == 1: + l = tlv[o + 1] + o += 2 + if (l & 0x7f) == 2: + l = (tlv[o + 1] << 8) | tlv[o + 2] + o += 3 + else: + o += 1 + v = tlv[o:o + l] + tags[t] = v + tlv = tlv[o + l:] + return tags + + +def _read_makefile() -> List[str]: + """Read lines from the parent Makefile """ + + parent = Path(ROOT_SCREENSHOT_PATH).parent.resolve() + makefile = f"{parent}/Makefile" + print(f"Analyzing {makefile}...") + with open(makefile, "r", encoding="utf-8") as f_p: + lines = f_p.readlines() + + return lines + + +def _get_pub_key(client: CommandSender, key_tag: DataObject) -> dict: + """Read the Public Key parameters + + Args: + client (CommandSender): Application object + key_tag (DataObject): Tag identifying the key to read + + Returns: + Dictionary with key parameters + """ + + rapdu = client.read_key(key_tag) + assert rapdu.status == Errors.SW_OK + + # Extract Pub key parameters + tags = decode_tlv(rapdu.data) + return decode_tlv(tags[DataObject.DO_PUB_KEY]) From eab32ad7afb26d8c12ddcaa6901457e74d7b3d8d Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 17 Jan 2024 18:22:39 +0100 Subject: [PATCH 25/75] Add Unit Tests --- unit-tests/CMakeLists.txt | 62 ++++++++++++++++++++++++++++++++ unit-tests/README.md | 48 +++++++++++++++++++++++++ unit-tests/gen_coverage.sh | 15 ++++++++ unit-tests/mocks/bolos_target.h | 0 unit-tests/mocks/cx.h | 30 ++++++++++++++++ unit-tests/mocks/lcx_sha3.h | 0 unit-tests/mocks/ledger_assert.h | 6 ++++ unit-tests/mocks/mocks.c | 17 +++++++++ unit-tests/mocks/offsets.h | 26 ++++++++++++++ unit-tests/mocks/os.h | 22 ++++++++++++ unit-tests/mocks/os_utils.h | 23 ++++++++++++ unit-tests/mocks/usbd_ccid_if.h | 1 + unit-tests/mocks/ux.h | 1 + unit-tests/src/test_io.c | 53 +++++++++++++++++++++++++++ 14 files changed, 304 insertions(+) create mode 100644 unit-tests/CMakeLists.txt create mode 100644 unit-tests/README.md create mode 100755 unit-tests/gen_coverage.sh create mode 100644 unit-tests/mocks/bolos_target.h create mode 100644 unit-tests/mocks/cx.h create mode 100644 unit-tests/mocks/lcx_sha3.h create mode 100644 unit-tests/mocks/ledger_assert.h create mode 100644 unit-tests/mocks/mocks.c create mode 100644 unit-tests/mocks/offsets.h create mode 100644 unit-tests/mocks/os.h create mode 100644 unit-tests/mocks/os_utils.h create mode 100644 unit-tests/mocks/usbd_ccid_if.h create mode 100644 unit-tests/mocks/ux.h create mode 100644 unit-tests/src/test_io.c diff --git a/unit-tests/CMakeLists.txt b/unit-tests/CMakeLists.txt new file mode 100644 index 0000000..7e64b05 --- /dev/null +++ b/unit-tests/CMakeLists.txt @@ -0,0 +1,62 @@ +cmake_minimum_required(VERSION 3.10) + +if(${CMAKE_VERSION} VERSION_LESS 3.10) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +endif() + +# project information +project(unit_tests + VERSION 0.1 + DESCRIPTION "Unit tests for Ledger OpenPGP application" + LANGUAGES C) + + +# guard against bad build-type strings +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release") +endif() + +# guard against in-source builds +if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ") +endif() + +include(CTest) + +# specify C standard +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED True) + +add_compile_options(-Wall -Wextra -g -pedantic --coverage) +# Flag depending on the Build Type +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}-O3") + +set(GCC_COVERAGE_LINK_FLAGS "--coverage -lgcov") +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") + +set(APP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../src") +set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") +set(MOCK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mocks") + +add_compile_definitions(TEST) + +include_directories( + ${MOCK_DIR} + ${APP_DIR} +) +# include_directories($ENV{BOLOS_SDK}/lib_standard_app) + +add_executable(test_io + ${SRC_DIR}/test_io.c + ${MOCK_DIR}/mocks.c + ${APP_DIR}/gpg_io.c + ${APP_DIR}/gpg_vars.c +) + +target_link_libraries(test_io PUBLIC + cmocka + gcov) + +add_test(test_io test_io) diff --git a/unit-tests/README.md b/unit-tests/README.md new file mode 100644 index 0000000..133fad0 --- /dev/null +++ b/unit-tests/README.md @@ -0,0 +1,48 @@ +# Unit tests + +## Prerequisite + +Be sure to have installed: + +- CMake >= 3.10 +- CMocka >= 1.1.5 + +and for code coverage generation: + +- lcov >= 1.14 + +## Overview + +In `unit-tests` folder, compile with: + +```shell +cmake -Bbuild -H. && make -C build +``` + +and run tests with: + +```shell +CTEST_OUTPUT_ON_FAILURE=1 make -C build test +``` + +To get more verbose output, use: + +```shell +CTEST_OUTPUT_ON_FAILURE=1 make -C build test ARGS="-V" +``` + +Or also directly with: + +```shell +CTEST_OUTPUT_ON_FAILURE=1 build/test_io +``` + +## Generate code coverage + +Just execute in `unit-tests` folder: + +```shell +./gen_coverage.sh +``` + +it will output `coverage.total` and `coverage/` folder with HTML details (in `coverage/index.html`). diff --git a/unit-tests/gen_coverage.sh b/unit-tests/gen_coverage.sh new file mode 100755 index 0000000..8048270 --- /dev/null +++ b/unit-tests/gen_coverage.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -x +set -e + +BUILD_DIRECTORY=$(realpath build/) + +lcov --directory . -b "${BUILD_DIRECTORY}" --capture --initial -o coverage.base && +lcov --rc lcov_branch_coverage=1 --directory . -b "${BUILD_DIRECTORY}" --capture -o coverage.capture && +lcov --directory . -b "${BUILD_DIRECTORY}" --add-tracefile coverage.base --add-tracefile coverage.capture -o coverage.info && +lcov --directory . -b "${BUILD_DIRECTORY}" --remove coverage.info '*/unit-tests/*' -o coverage.info && +echo "Generated 'coverage.info'." && +genhtml coverage.info -o coverage + +rm -f coverage.base coverage.capture diff --git a/unit-tests/mocks/bolos_target.h b/unit-tests/mocks/bolos_target.h new file mode 100644 index 0000000..e69de29 diff --git a/unit-tests/mocks/cx.h b/unit-tests/mocks/cx.h new file mode 100644 index 0000000..b475a99 --- /dev/null +++ b/unit-tests/mocks/cx.h @@ -0,0 +1,30 @@ + + +#define cx_rsa_public_key_t char +#define cx_rsa_1024_public_key_t char +#define cx_rsa_2048_public_key_t char +#define cx_rsa_3072_public_key_t char +#define cx_rsa_4096_public_key_t char + +#define cx_rsa_private_key_t char +#define cx_rsa_1024_private_key_t char +#define cx_rsa_2048_private_key_t char +#define cx_rsa_3072_private_key_t char +#define cx_rsa_4096_private_key_t char + +#define cx_ecfp_public_key_t char +#define cx_ecfp_256_public_key_t char +#define cx_ecfp_384_public_key_t char +#define cx_ecfp_512_public_key_t char +#define cx_ecfp_640_public_key_t char + +#define cx_ecfp_private_key_t char +#define cx_ecfp_256_private_key_t char +#define cx_ecfp_384_private_key_t char +#define cx_ecfp_512_private_key_t char +#define cx_ecfp_640_private_key_t char + +#define cx_sha3_t char +#define cx_sha256_t char + +#define cx_aes_key_t char diff --git a/unit-tests/mocks/lcx_sha3.h b/unit-tests/mocks/lcx_sha3.h new file mode 100644 index 0000000..e69de29 diff --git a/unit-tests/mocks/ledger_assert.h b/unit-tests/mocks/ledger_assert.h new file mode 100644 index 0000000..90e97d4 --- /dev/null +++ b/unit-tests/mocks/ledger_assert.h @@ -0,0 +1,6 @@ +#define LEDGER_ASSERT(test, message) \ + do { \ + if (!(test)) { \ + return; \ + } \ + } while (0) diff --git a/unit-tests/mocks/mocks.c b/unit-tests/mocks/mocks.c new file mode 100644 index 0000000..ebb703d --- /dev/null +++ b/unit-tests/mocks/mocks.c @@ -0,0 +1,17 @@ + +#include "os.h" + +unsigned char G_io_apdu_buffer[IO_APDU_BUFFER_SIZE]; + +unsigned short io_exchange(unsigned char channel_and_flags, unsigned short tx_len) { + (void) channel_and_flags; + (void) tx_len; + return 0; +} + +void nvm_write(void *dst_adr, void *src_adr, unsigned int src_len) { + (void) dst_adr; + (void) src_adr; + (void) src_len; + return; +} diff --git a/unit-tests/mocks/offsets.h b/unit-tests/mocks/offsets.h new file mode 100644 index 0000000..3db4bc1 --- /dev/null +++ b/unit-tests/mocks/offsets.h @@ -0,0 +1,26 @@ +#pragma once + +/** + * Offset of instruction class. + */ +#define OFFSET_CLA 0 +/** + * Offset of instruction code. + */ +#define OFFSET_INS 1 +/** + * Offset of instruction parameter 1. + */ +#define OFFSET_P1 2 +/** + * Offset of instruction parameter 2. + */ +#define OFFSET_P2 3 +/** + * Offset of command data length. + */ +#define OFFSET_LC 4 +/** + * Offset of command data. + */ +#define OFFSET_CDATA 5 diff --git a/unit-tests/mocks/os.h b/unit-tests/mocks/os.h new file mode 100644 index 0000000..a6c7cad --- /dev/null +++ b/unit-tests/mocks/os.h @@ -0,0 +1,22 @@ + +#include +#include + +#undef MAX +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) + +#define PRINTF(...) +#define THROW(x) + +// send tx_len bytes (atr or rapdu) and retrieve the length of the next command apdu (over the +// requested channel) +#define CHANNEL_APDU 0 +#define IO_RETURN_AFTER_TX 0x20 +#define IO_ASYNCH_REPLY 0x10 // avoid apdu state reset if tx_len == 0 when we're expected to reply + +#define IO_APDU_BUFFER_SIZE (255 + 5 + 64) + +extern unsigned char G_io_apdu_buffer[IO_APDU_BUFFER_SIZE]; + +extern unsigned short io_exchange(unsigned char channel_and_flags, unsigned short tx_len); +extern void nvm_write(void *dst_adr, void *src_adr, unsigned int src_len); diff --git a/unit-tests/mocks/os_utils.h b/unit-tests/mocks/os_utils.h new file mode 100644 index 0000000..510f2ef --- /dev/null +++ b/unit-tests/mocks/os_utils.h @@ -0,0 +1,23 @@ +#pragma once + +#define U2(hi, lo) ((((hi) &0xFFu) << 8) | ((lo) &0xFFu)) +#define U4(hi3, hi2, lo1, lo0) \ + ((((hi3) &0xFFu) << 24) | (((hi2) &0xFFu) << 16) | (((lo1) &0xFFu) << 8) | ((lo0) &0xFFu)) +static inline uint16_t U2BE(const uint8_t *buf, size_t off) { + return (buf[off] << 8) | buf[off + 1]; +} +static inline uint32_t U4BE(const uint8_t *buf, size_t off) { + return (((uint32_t) buf[off]) << 24) | (buf[off + 1] << 16) | (buf[off + 2] << 8) | + buf[off + 3]; +} + +static inline void U2BE_ENCODE(uint8_t *buf, size_t off, uint32_t value) { + buf[off + 0] = (value >> 8) & 0xFF; + buf[off + 1] = value & 0xFF; +} +static inline void U4BE_ENCODE(uint8_t *buf, size_t off, uint32_t value) { + buf[off + 0] = (value >> 24) & 0xFF; + buf[off + 1] = (value >> 16) & 0xFF; + buf[off + 2] = (value >> 8) & 0xFF; + buf[off + 3] = value & 0xFF; +} diff --git a/unit-tests/mocks/usbd_ccid_if.h b/unit-tests/mocks/usbd_ccid_if.h new file mode 100644 index 0000000..37dc501 --- /dev/null +++ b/unit-tests/mocks/usbd_ccid_if.h @@ -0,0 +1 @@ +#define PIN_OPR_APDU_CLA 0xEF diff --git a/unit-tests/mocks/ux.h b/unit-tests/mocks/ux.h new file mode 100644 index 0000000..7256169 --- /dev/null +++ b/unit-tests/mocks/ux.h @@ -0,0 +1 @@ +#define ux_state_t char diff --git a/unit-tests/src/test_io.c b/unit-tests/src/test_io.c new file mode 100644 index 0000000..e7d4fbe --- /dev/null +++ b/unit-tests/src/test_io.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include "gpg_vars.h" + +static int setup(void **state) { + (void) state; + + // Init tests + gpg_io_discard(1); + return 0; +} + +static void test_io(void **state) { + (void) state; + + unsigned int v32 = 0x789ABCDE; + unsigned int v16 = 0x3456; + unsigned int v8 = 0x12; + + gpg_io_insert_u8(v8); + + gpg_io_insert_u16(v16); + + // Mark the current offset + gpg_io_mark(); + + gpg_io_insert_u32(v32); + + // rewind offset to the beginning to the buffer + gpg_io_set_offset(0); + + assert_int_equal(gpg_io_fetch_u8(), v8); + assert_int_equal(gpg_io_fetch_u16(), v16); + assert_int_equal(gpg_io_fetch_u32(), v32); + + // rewind offset to the mark + gpg_io_set_offset(IO_OFFSET_MARK); + + assert_int_equal(gpg_io_fetch_u32(), v32); +} + +int main() { + const struct CMUnitTest tests[] = {cmocka_unit_test_setup(test_io, setup)}; + + return cmocka_run_group_tests(tests, NULL, NULL); +} From a227475192e07606b02ad8fe85e1ac93d0aa96c1 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 17 Jan 2024 12:23:23 +0100 Subject: [PATCH 26/75] Add Manual Tests - Helper script to ease the command to - Generate keys - Encrypt / Decrypt - Sign / Verify --- .gitignore | 4 + manual-tests/manual.sh | 190 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100755 manual-tests/manual.sh diff --git a/.gitignore b/.gitignore index c79a014..86c174c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,10 @@ debug/ # Temporary directory with snapshots taken during test runs tests/snapshots-tmp/ +# manual-tests +manual-tests/foo* +manual-tests/gnupg + # Unit tests and code coverage unit-tests/build/ unit-tests/coverage/ diff --git a/manual-tests/manual.sh b/manual-tests/manual.sh new file mode 100755 index 0000000..d81eb33 --- /dev/null +++ b/manual-tests/manual.sh @@ -0,0 +1,190 @@ +#!/bin/bash +# +# script to check OpenPGP Application features +# + +exeName=$(readlink "$0") +[[ -z ${exeName} ]] && exeName=$0 +dirName=$(dirname "${exeName}") + +gnupg_home_dir="$(realpath "${dirName}/gnupg")" + +VERBOSE=false + +#=============================================================================== +# +# help - Prints script help and usage +# +#=============================================================================== +# shellcheck disable=SC2154 # var is referenced but not assigned +help() { + echo + echo "Usage: ${exeName} " + echo + echo "Options:" + echo + echo " -c : Requested command" + echo " -v : Verbose mode" + echo " -h : Displays this help" + echo + exit 1 +} + +#=============================================================================== +# +# kill_process - Kill running process, ensure clear next operation +# +#=============================================================================== +kill_process() { + # Kill running process + killall scdaemon gpg-agent 2>/dev/null +} + +#=============================================================================== +# +# init - Init the gnupg config, start from an empty keyring +# +#=============================================================================== +init() { + kill_process + + # Cleanup old gnupg home directory + dir=$(basename "${gnupg_home_dir}") + rm -fr "${dir}" foo.txt* + mkdir "${dir}" + chmod 700 "${dir}" + + { + echo reader-port \"Ledger token\" + echo allow-admin + echo enable-pinpad-varlen + echo card-timeout 1 + } > "${dir}/scdaemon.conf" +} + +#=============================================================================== +# +# card - Show/edit the card status and configuration +# +#=============================================================================== +card() { + + gpg --homedir "${gnupg_home_dir}" --card-edit +} + +#=============================================================================== +# +# encrypt - Encrypt a clear file +# +#=============================================================================== +encrypt() { + local recipient="" + kill_process + rm -fr foo* + echo CLEAR > foo.txt + + [[ ${VERBOSE} == true ]] && verbose_mode="--verbose" + + recipient=$(gpg --homedir "${gnupg_home_dir}" --card-status | grep "General key info" | awk '{print $NF}') + + echo "Encrypt with recipient '${recipient}'" + + gpg --homedir "${gnupg_home_dir}" ${verbose_mode} --encrypt --recipient "${recipient}" foo.txt +} + +#=============================================================================== +# +# decrypt - Decrypt a file and compare with original clear content +# +#=============================================================================== +decrypt() { + + kill_process + + [[ ${VERBOSE} == true ]] && verbose_mode="--verbose" + + gpg --homedir "${gnupg_home_dir}" ${verbose_mode} --decrypt foo.txt.gpg > foo_dec.txt + + # Check with original clear file + diff foo.txt foo_dec.txt >/dev/null + if [[ $? -eq 0 ]]; then + echo "Success !" + else + echo "Decryption error!" + fi + rm -fr foo* +} + +#=============================================================================== +# +# sign - Sign a file +# +#=============================================================================== +sign() { + + kill_process + rm -fr foo* + echo CLEAR > foo.txt + + [[ ${VERBOSE} == true ]] && verbose_mode="--verbose" + + gpg --homedir "${gnupg_home_dir}" ${verbose_mode} --sign foo.txt +} + +#=============================================================================== +# +# verify - Verify a file signature +# +#=============================================================================== +verify() { + + kill_process + + [[ ${VERBOSE} == true ]] && verbose_mode="--verbose" + + gpg --homedir "${gnupg_home_dir}" ${verbose_mode} --verify foo.txt.gpg + rm -fr foo* +} + +#=============================================================================== +# +# Parsing parameters +# +#=============================================================================== + +if (($# < 1)); then + help +fi + +while getopts ":c:vh" opt; do + case $opt in + + c) + case ${OPTARG} in + init|card|encrypt|decrypt|sign|verify) + CMD=${OPTARG} + ;; + *) + echo "Wrong parameter '${OPTARG}'!" + exit 1 + ;; + esac + ;; + + v) VERBOSE=true ;; + h) help ;; + + \?) echo "Unknown option: -${OPTARG}" >&2; exit 1;; + : ) echo "Missing option argument for -${OPTARG}" >&2; exit 1;; + * ) echo "Unimplemented option: -${OPTARG}" >&2; exit 1;; + esac +done + +#=============================================================================== +# +# Main +# +#=============================================================================== + +# execute the command +${CMD} From 438cabfb78f6308a5d81c3bdf8056f5b987fce85 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 2 Feb 2024 19:28:03 +0100 Subject: [PATCH 27/75] Add CI workflows --- .github/PULL_REQUEST_TEMPLATE.md | 12 +++++ .../workflows/build_and_functional_tests.yml | 8 ++- .github/workflows/codeql_checks.yml | 44 ++++++++++++++++ .github/workflows/coding_style_checks.yml | 25 ++++++++++ .github/workflows/guidelines_enforcer.yml | 2 - .github/workflows/misspellings_checks.yml | 29 +++++++++++ .github/workflows/python_client_checks.yml | 43 ++++++++++++++++ .github/workflows/python_tool_checks.yml | 45 +++++++++++++++++ .github/workflows/unit_tests.yml | 50 +++++++++++++++++++ 9 files changed, 255 insertions(+), 3 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/codeql_checks.yml create mode 100644 .github/workflows/coding_style_checks.yml create mode 100644 .github/workflows/misspellings_checks.yml create mode 100644 .github/workflows/python_client_checks.yml create mode 100644 .github/workflows/python_tool_checks.yml create mode 100644 .github/workflows/unit_tests.yml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..58eb2e1 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,12 @@ +# Checklist + + + +- [ ] App update process has been followed +- [ ] Target branch is `develop` +- [ ] Application version has been bumped + + diff --git a/.github/workflows/build_and_functional_tests.yml b/.github/workflows/build_and_functional_tests.yml index 3feee3b..0efd14d 100644 --- a/.github/workflows/build_and_functional_tests.yml +++ b/.github/workflows/build_and_functional_tests.yml @@ -18,4 +18,10 @@ jobs: uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_build.yml@v1 with: upload_app_binaries_artifact: "compiled_app_binaries" - run_for_devices: '["nanos", "nanox", "nanosp"]' + + ragger_tests: + name: Run ragger tests using the reusable workflow + needs: build_application + uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_ragger_tests.yml@v1 + with: + download_app_binaries_artifact: "compiled_app_binaries" diff --git a/.github/workflows/codeql_checks.yml b/.github/workflows/codeql_checks.yml new file mode 100644 index 0000000..fb95064 --- /dev/null +++ b/.github/workflows/codeql_checks.yml @@ -0,0 +1,44 @@ +name: "CodeQL" + +on: + workflow_dispatch: + push: + branches: + - master + - main + - develop + pull_request: + # Excluded path: add the paths you want to ignore instead of deleting the workflow + paths-ignore: + - '.github/workflows/*.yml' + - 'tests/*' + +jobs: + analyse: + name: Analyse + strategy: + matrix: + sdk: [ "$NANOS_SDK", "$NANOX_SDK", "$NANOSP_SDK", "$STAX_SDK" ] + #'cpp' covers C and C++ + language: [ 'cpp' ] + runs-on: ubuntu-latest + container: + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-legacy:latest + + steps: + - name: Clone + uses: actions/checkout@v4 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + queries: security-and-quality + + # CodeQL will create the database during the compilation + - name: Build + run: | + make BOLOS_SDK=${{ matrix.sdk }} + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/coding_style_checks.yml b/.github/workflows/coding_style_checks.yml new file mode 100644 index 0000000..6be2786 --- /dev/null +++ b/.github/workflows/coding_style_checks.yml @@ -0,0 +1,25 @@ +name: Run coding style check through reusable workflow + +# This workflow will run linting checks to ensure a level of uniformization among all Ledger applications. +# +# The presence of this workflow is mandatory as a minimal level of linting is required. +# You are however free to modify the content of the .clang-format file and thus the coding style of your application. +# We simply ask you to not diverge too much from the linting of the Boilerplate application. + +on: + workflow_dispatch: + push: + branches: + - master + - main + - develop + pull_request: + +jobs: + check_linting: + name: Check linting using the reusable workflow + uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_lint.yml@v1 + with: + source: './src' + extensions: 'h,c' + version: 11 diff --git a/.github/workflows/guidelines_enforcer.yml b/.github/workflows/guidelines_enforcer.yml index 894eed0..fdaf9f2 100644 --- a/.github/workflows/guidelines_enforcer.yml +++ b/.github/workflows/guidelines_enforcer.yml @@ -21,5 +21,3 @@ jobs: guidelines_enforcer: name: Call Ledger guidelines_enforcer uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_guidelines_enforcer.yml@v1 - with: - run_for_devices: '["nanos", "nanox", "nanosp"]' diff --git a/.github/workflows/misspellings_checks.yml b/.github/workflows/misspellings_checks.yml new file mode 100644 index 0000000..d808379 --- /dev/null +++ b/.github/workflows/misspellings_checks.yml @@ -0,0 +1,29 @@ +name: Misspellings checks + +# This workflow performs some misspelling checks on the repository +# It is there to help us maintain a level of quality in our codebase and does not have to be kept on forked +# applications. + +on: + workflow_dispatch: + push: + branches: + - master + - main + - develop + pull_request: + +jobs: + misspell: + name: Check misspellings + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v4 + + - name: Check misspellings + uses: codespell-project/actions-codespell@v2 + with: + builtin: clear,rare + check_filenames: true + ignore_words_list: ontop diff --git a/.github/workflows/python_client_checks.yml b/.github/workflows/python_client_checks.yml new file mode 100644 index 0000000..91329bb --- /dev/null +++ b/.github/workflows/python_client_checks.yml @@ -0,0 +1,43 @@ +name: Checks on the Python client + +# This workflow performs some checks on the Python client used by the Application tests +# It is there to help us maintain a level of quality in our codebase and does not have to be kept on forked +# applications. + +on: + workflow_dispatch: + push: + branches: + - master + - main + - develop + pull_request: + +jobs: + lint: + name: Client linting + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v4 + - name: Installing PIP dependencies + run: | + pip install pylint + pip install -r tests/requirements.txt + - name: Lint Python code + run: | + pylint --rc tests/setup.cfg tests/application_client/ + + mypy: + name: Type checking + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v4 + - name: Installing PIP dependencies + run: | + pip install mypy + pip install -r tests/requirements.txt + - name: Mypy type checking + run: | + mypy tests/application_client/ diff --git a/.github/workflows/python_tool_checks.yml b/.github/workflows/python_tool_checks.yml new file mode 100644 index 0000000..ade35b6 --- /dev/null +++ b/.github/workflows/python_tool_checks.yml @@ -0,0 +1,45 @@ +name: Checks on the Tools client + +# This workflow performs some checks on the Python client used by the cli tool +# It is there to help us maintain a level of quality in our codebase and does not have to be kept on forked +# applications. + +on: + workflow_dispatch: + push: + branches: + - master + - main + - develop + pull_request: + +jobs: + lint: + name: Client linting + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v4 + - name: Installing PIP dependencies + run: | + sudo apt-get update && sudo apt-get install -y libpcsclite-dev + pip install pylint + pip install -r pytools/requirements.txt + - name: Lint Python code + run: | + pylint --rc pytools/setup.cfg pytools/ + + mypy: + name: Type checking + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v4 + - name: Installing PIP dependencies + run: | + sudo apt-get update && sudo apt-get install -y libpcsclite-dev + pip install mypy + pip install -r pytools/requirements.txt + - name: Mypy type checking + run: | + mypy pytools/ diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml new file mode 100644 index 0000000..90d6f7d --- /dev/null +++ b/.github/workflows/unit_tests.yml @@ -0,0 +1,50 @@ +name: Unit testing with Codecov coverage checking + +on: + workflow_dispatch: + push: + branches: + - master + - main + - develop + pull_request: + +jobs: + job_unit_test: + name: Unit test + runs-on: ubuntu-latest + container: + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-lite:latest + + steps: + - name: Clone + uses: actions/checkout@v4 + + - name: Build unit tests + run: | + cd unit-tests/ + cmake -Bbuild -H. && make -C build && make -C build test + + - name: Generate code coverage + run: | + cd unit-tests/ + lcov --directory . -b "$(realpath build/)" --capture --initial -o coverage.base && \ + lcov --rc lcov_branch_coverage=1 --directory . -b "$(realpath build/)" --capture -o coverage.capture && \ + lcov --directory . -b "$(realpath build/)" --add-tracefile coverage.base --add-tracefile coverage.capture -o coverage.info && \ + lcov --directory . -b "$(realpath build/)" --remove coverage.info '*/unit-tests/*' -o coverage.info && \ + genhtml coverage.info -o coverage + + - uses: actions/upload-artifact@v3 + with: + name: code-coverage + path: unit-tests/coverage + + - name: Upload to codecov.io + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./unit-tests/coverage.info + flags: unittests + name: codecov-app-openpgp + fail_ci_if_error: true + verbose: true From f08271326d0b302cd14d23029d8baab5c92fdf90 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 8 Jan 2024 19:12:31 +0100 Subject: [PATCH 28/75] Add pre-commit config --- .mdl.rb | 11 ++++++++ .mdlrc | 11 ++++++++ .pre-commit-config.yaml | 58 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 .mdl.rb create mode 100644 .mdlrc create mode 100644 .pre-commit-config.yaml diff --git a/.mdl.rb b/.mdl.rb new file mode 100644 index 0000000..0b971f6 --- /dev/null +++ b/.mdl.rb @@ -0,0 +1,11 @@ +# Style file for mdl +# https://github.com/markdownlint/markdownlint/blob/main/docs/creating_styles.md + +# Include all rules +all + +# Disable specific rules +#exclude_rule 'MD012' + +# Update rules configuration +rule 'MD013', :line_length => 120 diff --git a/.mdlrc b/.mdlrc new file mode 100644 index 0000000..4d04c4d --- /dev/null +++ b/.mdlrc @@ -0,0 +1,11 @@ +# markdownlint config file + +# Use custom style file +style "#{File.dirname(__FILE__)}/.mdl.rb" + +# MD005 - Inconsistent indentation for list items at the same level +# MD007 - Unordered list indentation +# MD014 - Dollar signs used before commands without showing output +# MD024 - Multiple headers with the same content +# MD041 - First line in file should be a top level header +rules "~MD005,~MD007,~MD014,~MD024,~MD041" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..f79567a --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,58 @@ +# To install hooks, run: +# pre-commit install --hook-type pre-commit +# pre-commit install --hook-type commit-msg + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: mixed-line-ending + - id: check-added-large-files + - id: check-merge-conflict + - id: check-case-conflict + + - repo: https://github.com/codespell-project/codespell + rev: v2.2.5 + hooks: + - id: codespell + args: ['--ignore-words-list', 'ontop'] + + - repo: https://github.com/pre-commit/mirrors-clang-format + rev: v11.0.1 + hooks: + - id: clang-format + types_or: [c] + + - repo: https://github.com/Mateusz-Grzelinski/actionlint-py + rev: v1.6.26.11 + hooks: + - id: actionlint + types_or: [yaml] + + - repo: https://github.com/markdownlint/markdownlint + rev: v0.13.0 + hooks: + - id: markdownlint + types_or: [markdown] + + - repo: local + hooks: + + # Python scripts + - id: pylint + name: Check python Client + # Only display messages, no score, disable few errors + entry: pylint -j 0 --rc tests/setup.cfg + language: system + types: [python] + files: '^tests\/.*$' + + - id: pylint + name: Check python Tool + # Only display messages, no score, disable few errors + entry: pylint -j 0 --rc pytools/setup.cfg + language: system + types: [python] + files: '^pytools\/.*$' From 0908c34e7e5448902ffd916a9cfd5ed8772bf115 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 18 Jan 2024 15:58:25 +0100 Subject: [PATCH 29/75] Refactor documentation - Align README with default Boilerplate content - Update README with Tests and Documentation details - README few formatting - Update OpenPGP Specifications to 3.3 - Update the Developer and User documentations (formatting, rewritting, adding new elements...) - PDF generation of both Developer and User documents - Provide patch file to update CCID driver with correct Ledger device Ids - Use the renamed app-openpgp --- README.md | 285 ++- doc/LogoLedger.png | Bin 0 -> 1775 bytes doc/common/LogoLedgerV.png | Bin 17790 -> 0 bytes doc/developer/gpgcard-addon.pdf | Bin 0 -> 221475 bytes doc/developer/gpgcard-addon.rst | 344 ++++ doc/developer/gpgcard3.0-addon.rst | 326 ---- doc/developer/quick-test.md | 361 ++++ doc/developer/quick-test.txt | 206 -- doc/developer/slots.png | Bin 0 -> 1007 bytes doc/developer/template.latex | 516 +++++ doc/generate.sh | 24 + .../OpenPGP-smart-card-application.pdf | Bin 0 -> 1092398 bytes doc/specification/openpgp-card-3.0.pdf | Bin 1444915 -> 0 bytes doc/user/0001-plist.patch | 33 + ...e-app-openpgp-card.pdf => app-openpgp.pdf} | Bin 1205476 -> 1218644 bytes doc/user/app-openpgp.rst | 1686 +++++++++++++++++ doc/user/blue-app-openpgp-card.rst | 1447 -------------- doc/user/blue-app-openpgp-card.template | 275 --- doc/user/generate.sh | 9 - doc/user/template.latex | 520 +++++ 20 files changed, 3751 insertions(+), 2281 deletions(-) create mode 100644 doc/LogoLedger.png delete mode 100644 doc/common/LogoLedgerV.png create mode 100644 doc/developer/gpgcard-addon.pdf create mode 100644 doc/developer/gpgcard-addon.rst delete mode 100644 doc/developer/gpgcard3.0-addon.rst create mode 100644 doc/developer/quick-test.md delete mode 100644 doc/developer/quick-test.txt create mode 100644 doc/developer/slots.png create mode 100644 doc/developer/template.latex create mode 100755 doc/generate.sh create mode 100644 doc/specification/OpenPGP-smart-card-application.pdf delete mode 100644 doc/specification/openpgp-card-3.0.pdf create mode 100644 doc/user/0001-plist.patch rename doc/user/{blue-app-openpgp-card.pdf => app-openpgp.pdf} (77%) create mode 100644 doc/user/app-openpgp.rst delete mode 100644 doc/user/blue-app-openpgp-card.rst delete mode 100644 doc/user/blue-app-openpgp-card.template delete mode 100755 doc/user/generate.sh create mode 100644 doc/user/template.latex diff --git a/README.md b/README.md index 8b293cd..6b3474f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # GnuPG application -GnuPG application for Nano S and Nano X +[![Ensure compliance with Ledger guidelines](https://github.com/LedgerHQ/app-openpgp/actions/workflows/guidelines_enforcer.yml/badge.svg)](https://github.com/LedgerHQ/app-openpgp/actions/workflows/guidelines_enforcer.yml) + +[![Build and run functional tests using ragger through reusable workflow](https://github.com/LedgerHQ/app-openpgp/actions/workflows/build_and_functional_tests.yml/badge.svg?branch=master)](https://github.com/LedgerHQ/app-openpgp/actions/workflows/build_and_functional_tests.yml) + +GnuPG application for Ledger devices This application implements "The OpenPGP card" specification revision 3.3. This specification is available in *doc* directory and at . @@ -12,46 +16,291 @@ The application supports: - EDDSA with Ed25519 curve - ECDH with secp256k1 and curve25519 curves -This release has known missing parts (see also Add-on) : - -- Ledger Blue support -- Seed mode ON/OFF via apdu - ## Installation and Usage -See the full doc at +See the full doc in [rst](doc/user/app-openpgp.rst), or in [pdf]() ## Add-on The GnuPG application implements the following addon: -- serial modification -- on screen reset -- 3 independent key slots -- seeded key generation +- Serial modification +- On screen reset +- 3 independent key slots (except for Nanos, where we have only a single slot) +- Seeded key generation -Technical specification is available at +Technical specification is available in [rst](doc/developer/gpgcard-addon.rst), or in [pdf]() ### Key slot -"The OpenPGP card" specification specifies: +The OpenPGP card specification indicates: -- 3 asymmetric keys : Signature, Decryption, Authentication +- 3 asymmetric keys: + - Signature, + - Decryption + - Authentication - 1 symmetric key The application allows you to store 3 different key sets, named slot. Each slot contains the above 4 keys. You can choose the active slot on the main screen. When installed the default slot is "1". You can change it in settings. -### seeded key generation +### Seeded key generation A seeded mode is implemented in order to restore private keys on a new token. -In this mode key material is generated from the global token seeded. +In this mode, key material is generated from the global token seed. -Please consider SEED mode as experimental. +Also, a backup/restore mechanism is provided. Please report to the [Documentation](#documentation). -More details to come... +> Warning: Without such configuration, an OS or App update will cause your private key to be lost!" ### On screen reset The application can be reset as if it was fresh installed. In settings, choose reset and confirm. + +## Quick start guide + +### With VSCode + +You can quickly setup a convenient environment to build and test your application by using +[Ledger's VSCode developer tools extension](https://marketplace.visualstudio.com/items?itemName=LedgerHQ.ledger-dev-tools) +which leverages the [ledger-app-dev-tools](https://github.com/LedgerHQ/ledger-app-builder/pkgs/container/ledger-app-builder%2Fledger-app-dev-tools) +docker image. + +It will allow you, whether you are developing on macOS, Windows or Linux, +to quickly **build** your apps, **test** them on **Speculos** and **load** them on any supported device. + +- Install and run [Docker](https://www.docker.com/products/docker-desktop/). +- Make sure you have an X11 server running: + - On Ubuntu Linux, it should be running by default. + - On macOS, install and launch [XQuartz](https://www.xquartz.org/) + (make sure to go to XQuartz > Preferences > Security and check "Allow client connections"). + - On Windows, install and launch [VcXsrv](https://sourceforge.net/projects/vcxsrv/) + (make sure to configure it to disable access control). +- Install [VScode](https://code.visualstudio.com/download) and add [Ledger's extension](https://marketplace.visualstudio.com/items?itemName=LedgerHQ.ledger-dev-tools). +- Open a terminal and clone `app-openpgp` with `git clone git@github.com:LedgerHQ/app-openpgp.git`. +- Open the `app-openpgp` folder with VSCode. +- Use Ledger extension's sidebar menu or open the tasks menu with `ctrl + shift + b` + (`command + shift + b` on a Mac) to conveniently execute actions: + - Build the app for the device model of your choice with `Build`. + - Test your binary on [Speculos](https://github.com/LedgerHQ/speculos) with `Run with Speculos`. + - You can also run functional tests, load the app on a physical device, and more. + +> The terminal tab of VSCode will show you what commands the extension runs behind the scene. + +### With a terminal + +The [ledger-app-dev-tools](https://github.com/LedgerHQ/ledger-app-builder/pkgs/container/ledger-app-builder%2Fledger-app-dev-tools) +docker image contains all the required tools and libraries to **build**, **test** and **load** an application. + +You can download it from the ghcr.io docker repository: + +```shell +sudo docker pull ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest +``` + +You can then enter this development environment by executing the following command +from the directory of the application `git` repository: + +#### Linux (Ubuntu) + +```shell +sudo docker run --rm -ti --user "$(id -u):$(id -g)" --privileged -v "/dev/bus/usb:/dev/bus/usb" -v "$(realpath .):/app" ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest +``` + +#### macOS + +```shell +sudo docker run --rm -ti --user "$(id -u):$(id -g)" --privileged -v "$(pwd -P):/app" ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest +``` + +#### Windows (with PowerShell) + +```shell +docker run --rm -ti --privileged -v "$(Get-Location):/app" ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest +``` + +The application's code will be available from inside the docker container, +you can proceed to the following compilation steps to build your app. + +## Compilation and load + +To easily setup a development environment for compilation and loading on a physical device, you can use the [VSCode integration](#with-vscode) +whether you are on Linux, macOS or Windows. + +If you prefer using a terminal to perform the steps manually, you can use the guide below. + +### Compilation + +Setup a compilation environment by following the [shell with docker approach](#with-a-terminal). + +From inside the container, use the following command to build the app: + +```shell +make DEBUG=1 # compile optionally with PRINTF +``` + +You can choose which device to compile and load for by setting the `BOLOS_SDK` environment variable to the following values: + +- `BOLOS_SDK=$NANOS_SDK` +- `BOLOS_SDK=$NANOX_SDK` +- `BOLOS_SDK=$NANOSP_SDK` +- `BOLOS_SDK=$STAX_SDK` + +### Loading on a physical device + +This step will vary slightly depending on your platform. + +> Your physical device must be connected, unlocked and the screen showing the dashboard (not inside an application). + +#### Linux (Ubuntu) + +First make sure you have the proper udev rules added on your host. +See [udev-rules](https://github.com/LedgerHQ/udev-rules) + +Then once you have [opened a terminal](#with-a-terminal) in the `app-builder` image and [built the app](#compilation-and-load) +for the device you want, run the following command: + +```shell +# Run this command from the app-builder container terminal. +make load # load the app on a Nano S by default +``` + +[Setting the BOLOS_SDK environment variable](#compilation-and-load) will allow you to load +on whichever supported device you want. + +#### macOS / Windows (with PowerShell) + +> It is assumed you have [Python](https://www.python.org/downloads/) installed on your computer. + +Run these commands on your host from the app's source folder once you have [built the app](#compilation-and-load) +for the device you want: + +```shell +# Install Python virtualenv +python3 -m pip install virtualenv +# Create the 'ledger' virtualenv +python3 -m virtualenv ledger +``` + +Enter the Python virtual environment + +- macOS: `source ledger/bin/activate` +- Windows: `.\ledger\Scripts\Activate.ps1` + +```shell +# Install Ledgerblue (tool to load the app) +python3 -m pip install ledgerblue +# Load the app. +python3 -m ledgerblue.runScript --scp --fileName bin/app.apdu --elfFile bin/app.elf +``` + +## Tests + +The OpenPGP app comes with different tests: + +- Functional Tests implemented with Ledger's [Ragger](https://github.com/LedgerHQ/ragger) test framework. +- Unit Tests, allowing to test basic simple functions +- Manual Tests, using some script to perform real tests on the device: + - Key generation + - Encryption/Decryption + - Sign/Verify + +### Functional Tests (Ragger based) + +#### Linux (Ubuntu) + +On Linux, you can use [Ledger's VS Code extension](#with-vscode) to run the tests. +If you prefer not to, open a terminal and follow the steps below. + +Install the tests requirements: + +```shell +pip install -r tests/requirements.txt +``` + +Then you can: + +Run the functional tests (here for nanos but available for any device once you have built the binaries): + +```shell +pytest tests/ --tb=short -v --device nanos +``` + +Or run your app directly with Speculos + +```shell +speculos --model nanos build/nanos/bin/app.elf +``` + +#### macOS / Windows + +To test your app on macOS or Windows, it is recommended to use [Ledger's VS Code extension](#with-vscode) +to quickly setup a working test environment. + +You can use the following sequence of tasks and commands (all accessible in the **extension sidebar menu**): + +- `Select build target` +- `Build app` + +Then you can choose to execute the functional tests: + +- Use `Run tests`. + +Or simply run the app on the Speculos emulator: + +- `Run with Speculos`. + +### Unit Tests + +Those tests are available in the directory `unit-tests`. Please see the corresponding [README](unit-tests/README.md) +to compile and run them. + +### Manual Tests + +Those tests are available in the directory `manual-tests`. This consists in a helper script (`manual.sh`) +corresponding to different cases described in the document [Quick tests](doc/developer/quick-test.md). + +## Documentation + +Several documents are available. + +Functional Specification of the OpenPGP Application available [here](), +but also at . + +User documentation for the Ledger Application available here: [rst](doc/user/app-openpgp.rst), +or [pdf]() + +Developer documentation related to the Ledger Add-ons available here: [rst](doc/developer/gpgcard-addon.rst), +or [pdf]() + +A Quick Test document to perform `Manual Tests` available [here](doc/developer/quick-test.md) + +The pdf documentation for **User** and **Developer** are available, and can be generated from +the corresponding `.rst` files (in the same respective directories) using this command: + +```shell +cd doc/ +./generate.sh +``` + +## Continuous Integration + +The flow processed in [GitHub Actions](https://github.com/features/actions) is the following: + +- Ledger guidelines enforcer which verifies that an app is compliant with Ledger guidelines. + The successful completion of this reusable workflow is a mandatory step for an app to be available + on the Ledger application store. More information on the guidelines can be found + in the repository [ledger-app-workflow](https://github.com/LedgerHQ/ledger-app-workflows) +- Code formatting with [clang-format](http://clang.llvm.org/docs/ClangFormat.html) +- Compilation of the application for all Ledger hardware in [ledger-app-builder](https://github.com/LedgerHQ/ledger-app-builder) +- Unit tests of C functions with [cmocka](https://cmocka.org/) (see [unit-tests/](unit-tests/)) +- End-to-end tests with [Speculos](https://github.com/LedgerHQ/speculos) emulator + and [ragger](https://github.com/LedgerHQ/ragger) (see [tests/](tests/)) +- Code coverage with [gcov](https://gcc.gnu.org/onlinedocs/gcc/Gcov.html)/[lcov](http://ltp.sourceforge.net/coverage/lcov.php) + and upload to [codecov.io](https://about.codecov.io) + +It outputs 3 artifacts: + +- `compiled_app_binaries` within binary files of the build process for each device +- `code-coverage` within HTML details of code coverage diff --git a/doc/LogoLedger.png b/doc/LogoLedger.png new file mode 100644 index 0000000000000000000000000000000000000000..7c921213d2637a1469a3985fd813803106f2acf4 GIT binary patch literal 1775 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

klN}`5pAzkpM!}J|x3a+U}_^ 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%0Dyv{<1gia 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%0D26;xRGd$m0 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

gR`3H^jUWgHP6|M_Cp6( zP7zJO2siS|;2E*^=QHm@mWZB!H&qmsqg;7h9n(Nd4TEPo@S<~tv2|A`xrT(yx2eoF zeBDo~Qy1xs^bKlyxy9H`jXC|H9SY7;y7wGcjr9J4(|u(7fo+v=bjZ%ofo(w#JX8_9CodFoqbOKbG88 zYFc9=8l=him)G9>{khXx=1tn`0C2Sc(|VJj4DXVqWjgf^Cs(=uHwVLt+SAriR|U|f zxSeaq?Veo8pE+*OBO8Sk4BP_rDH`Lbz#Ip|nKK}du{O~xl_2lqHXhXfaE0u(TNRYL zYgxvVj34wJn-!#5Q~}cU`&4@7Pev znM@6fuIi(RkRgakTgSr5J!}^a$+q%ya1JixZ+bhrbB90`V$2zkG)|gTu99QnIMdZ- znW_y`mWGok{Dl+B&Pmk}npx&dkqh^N2%`jbmszC^(KdkS8Vk;s@EC;O9`E}Usj(U7 zOS|nZ5fsBkvK4!MTYqn zmin=jo;{f@JjHe6#o+Mxo8>BoVJ!=hh|9P;z5RBUViy5s@-g$L8mGr0KvX4Cqa05! zhZu~ogIc_vLJ_&)4OcH}hcp8d>;8GH2`oa`!f`D9y|J;3elo8G)}3&vva8>U;5Wz> zw*Gnxz)^PmeEtg*y}A6x;0SoWB{=Cg;H028#%^`Yh8u)e}m&^{R!vq@Bu}%c@lHJSDzd#7R zK<|iiCpp7Lx)gF1Ew|aiss#*16Bqim|E)Yv+$ETeIy`Zl9|6hE+V?Jmj#GTw4-;gBa=4ZiB0A!dL*HU#oHch}`TG zDl|{S;c$u!!_hsZpNsFf9FaVP^-;{GqS%KIo|*?bgsmXuUqPh4Fe6`t7~`vFFwNC( zN~9sL+y8xR9XtNeZ9ypyd_f?6Gu7!I@@y$md!cfO~+D=?4o1f%p4C|RW5GM|nzoV1u7v{xmoHSOBWC9IXX1jtAP8lrlE9H3r zxLD$>pjY8Hv@*k>vrkMBmv?fx6DScwzaWRpp{0?o5{bmkqcJa#_KDdeP$aaPbFxPRYJYbV{JUYU2z0bqTxnN9+V19aRI{f$ShXi+d>r6{#s_%i!PJB{0+4qK(q-bO7oEY`o@5lf5l~M?ZL^z{a(^Ls z$;X>hu;3 z^)8CLEySrp2e4-aQg>~W>6$zz8%H2g#AxfhY_&dRdi0`xAxe(6JNEgBNOch%BCp+X zgtM~AYP$z~O{RdOs7X-YTwFZQuyZ!8D%o!v3!*ghLP+J)KI*E-fDo(tNzkZYQ(}6$ z?jWrlvDh#XK%3sNni*}BPwG0qq_Y7k939`PfFZN4^#zBe4 z+0kYwLgbDPVu$JSG>wb{K#yMmk5QuAbpR&u%Y z2TW`b@CBt#-ZYam`5&`|$3309h>t9Le0OiJbovNVcZt2*oX3aSSRV-8ag&{7Q-j#_ zVowJ+`u(i3-`az)Bkq}n$u3j_zblN2-$1mbK(*qvY1il(L8s($1h4A39Pga~hWY+c z`Opb2Bz8K*SVyGXrAqZrYBytu)C+U{=n7y>!G2Qi1Vb{(6U?W-N#HSB$>7ru1euMN zPx7Am_SzTq-tj9pVIcVWBV*>_u zZf#Wo?)TBpm-`l|GwD`rX^_)J=vg5r_yM^SnMJz?^sb_KJx9;lFhT7Ki}E9?@{bjb zEfHT>Wp(E*y_pYjF_?;VjmE{DQE?>u7%T76uM{!#^U>-^LPw!{DMQ6~Xz~O_T%yd; zYo6LuSXeZ}BD2D2Y3=ZKhoP)s_Ud2V*8mn<7i3w%98ra~8!sHsG7+Pg*uMkOgCu0)Eab)v_Zw%1 zH?hgwj1MMUc#@WODYh(86{Ch}4SGcSS`xJ=Qm$1x1Uve3jj;Wd(TJormjO z>QYUJXPdb`OR5|`eC6bYQz!J>nA8wv95~{sl^B_DQg*jzT9uY$ED?IhGzj0G))3iC zOKLt}gu@xoXS)eJAV+w9G?g&kLWnOIsFYC)- z5toC*hDIt#-W6wseoE z6(nOUYOegrlYwaSEDBw*QnZ9?(xQK6WmF?ZuB4@O+p+6_+k0r)QW{OT z`Hv<#@%U&`zKh{ZdYX#6-lvyhN-?j~Z^RCyL@t<&G6kARtjG}c>s}1IkrqqiE6X4f zF{N(`I@D#D#;O|JAeMq66v)6_B*3XYDgoa zCbte@1}&y8c#{@;RT6pHAedp+X5`$iqTX2gp7$kaEzU&=Jiz10EKRb(M}sjpYC#ZV48}p<)2{4aXfJ zVSI=xOv|b8^5|YT8Y>|8z*WQN$-Fjug8(eB%&uI+O>xM;yo&3S!8aK3-NwR?qWXY9 z9j+EHbcG^6umvxcUp-xDs`bH7eI%1RnH^+J`p-CVtD$?*xeaaE$}?K$cUThykiOFo z|I|*QIl05Ci`*Mr57SmfX!ud2CAURW-n{ALqhPh6D@9EO=<`nqjPTAnrejTd73$I% z?pw!=9l7dC%V|C1bByx<==S8!P}lW|hhYURKT}#-!z&P{n109@Si#{MZpPNN|w$G?)5JLoP7CG}Nm$~2;uCKt|FH(=H1gP^@N*doAI zytn_Z%Xi6HOQa$UCEggx#$YNcn}QU!+fkJnMf9Thcn`7Gk9Ga616_!%^40&+>K;``V6HZ#btRnh8cU)f3l#$opf3Y<-8VOLu8G#M2UF>-M- zwD{Frk1=U}wh2z&R-5poGrg*WTbTFH^KLw8vckxN_t?iK{~(K&PlXy~kln-}V`hq_ z;SmV9lsJD~Jmh3wHBb;LacR7#@XqtB-CYwAGTwaXv?30sG+Jqojw-9Dk)v(}o!HgT z%BCGFocx~~N}7I}c1SP+zl)6h0DwH)$AE}Ll`N91`7<1SzJ8E5*v^7p7v;i2e~$P+ zzDeL);msSn-fkk_a|GJ0nBrHuh2HO@F?kdQ6`|=wQ-t7TE4VaZYYOe#ax#g*bx@2? z7@p(KnmV--0H=!G^S^I)Qlu9qLAgGy6Z}X-BMKInwjArxa;NQB)+0%JwkU=ZBZ4>%B(jUEZ}D;*^*g4aWq^_Oe0l?1hLVRH>yDLiNt zs37kX$6)_;ih+L?e)k11pUCE_3iZ$YJ?E>tSZ-~t zeR6z^Uj4JeZol4CH|H1}1%k^3bymX5JaP zDM%(As|pV+#={(7DOcTw(Iue>jM1~%Gi4*^oDE5)4L-6lhIBQ~ftC=Jp>aa2rHiLw zN_%y4_n!I8b}%%DcKhUfHGwxbyZP$w8LTB4XiJ*5Wo-O|gSxYtm}f7J839K_9i!Q& z0Oi#EhUDEM=t$S?YJgTG&J0ay}m&Rb(x?IJpDe!Lhp| zF`{#>rraq`7S8kfN0-FRLg|^h0n8LcZC&lmC%bxL(V?Q*-pGd>cPIQ+o<6Sv-A!MAbIJw! z=T2;0lqrcOICa)YHe;2L-4g8Vsh!0><=L5CH8JTxbPMHrMvdK0z=8PISPJ`AG5y+vpkrqu|`kbs5{9P&( z$zmQr{){0IcuzUAP?aa%TAWyi>Pu!|RQn4cUkYq03J5%ArW)?FTROUi}*V#?OmL>LMW6u1bE^LH*-9+eI&3TMcwa{?9t^Vd{fNwT0xeH6nI>eNR3cZqM%3*Zy2BW zFgq#!=6xIL@?p(6Q;SsTBzC03RJX|H=QXpJyA7#!{6IbSOBuBlW6WH|vB^^yS#e z4^Ln^au#xP-;qJ*foQY7)|l0F^TUc#y5fm?*|Z6Ulne838OQ8pC840wAq(i0+)q9A zdky6vNs1!-mNPUlsoV%eV)*oU5@x5qqtW+o~e?^A`2#F{24?-IOCIPQ?($JOCaZ z9`Qfpp_qUo=LJ_**CYBR$ET-b=L85$LYQ3|fHa`8y8O8ZY}2Cp6H!8ATVsndImva4 zZJMZ}{IW=e(`0yog^^eL2kN*4i+no|P?VoPLriFqz-xPLK+KMI84(U^8#`+YG7gUN`LkUN-9de{c-SU3i3$)09ecd@s#~4@9#>` zCf@^Fez^ZA@9AIVy`ilmAT1=VDIO4f<_ZIV;)gjqws!8i{q^NO;qzgY8mYAM#o!u`#DVdsUndv{*UFnrTi5=a^g_Lp{pT57!`_|V8g%1^g z5#SUYz#~nA;Y;RarRfu;@e`%Dxo>6T&mjOEYl}1JyGAjxvfcarE*n%_j_83jNER>rSB zF|nSM>tO?{&cP0#OMP2p9s2ZcB@ZAC?TVkqmIeS!6;;=deH7yR#lXP?Ve zfMm{>kj4Zc@ep?qQ1AT~tR66}=o^m(An_4*5JWHGC(sQ*D&j|E)0RH@JCBuji8l=M zU(u88-~-CgE1buK={*b1bj$E`%1=r|UBeFw=NG*vq51x!37AtoNJi&peB+nq_Y2>* zWZyT+zenqf@3F!DPm#IHU*=78yK`GTCiU+p?BAQ_&8dae$H*~tdVBH)Z`Sr`W}sH~ zH^Sr8;J$1aYxmHNC+w?iBCClng|V+DsiZ8JWZoAq)wYq!FAaxjd;{~kIL4L9vK3zY z&S~X+Z*{K!08-zE{zk|=s-~FDy|it?```ts??vZC>&>43nKN=p`HBBFjZ|0Lrg#(8 zr?PGOx!rw@_OtmZi#(XxTpK@-U2X07wp>%+R@svUjA`wnNs;;I%k&wY8~K6z&1Eb8 z-Eov9&HuYL=zbBu!CP`RHFfa&PBkaE7`81se5JjC-zO@{@7{`E&fttcYn?xi!9T&u z+F5)oeA1MSt+BK}bn&b{nIdr7$E}D-N7CQV54EoEKkF2kQtKRsgre0gBANIqwrqe--b9Np|yo3aIV6@U=| zp?9XlEqN(Y`<=y;<*;5_cb~XLeE9|cX#c1u3FEPo>v;Dr@_qcJj)14yNPSvPsu;6m zG~Tl|MyQ3fOCXj4u6amp+Eo7L5)$Npb zKAneJY>M&dV(iiK!Xe3s+?>@9oiRC}twESpW*?$u86%=vh@Pe%1azedYiMX5OJhjT ztYQf=!g#L1Q;{|=&{DBcz-Q`EBoatt-uVDVV7obFLt_PFN$Oj-@0ZKKY9`FL?J`y6W0_{;(HdR) zcJ5=#;R9rc)5R}KmDs#;GK+O=?hukAy_uO*g6OOfv5e_GYRL=sCT~EV^+@O)-uUboyLs`l;!>e-*Y zO>`bJeaS(c?!XuJECd5$@QQMC2nUkIi!rmUk&;Lvxg*1h< zulWd{d?r@loU^q) zHq|;@zdpXED!iC?@zd;cJO{PX4TRhSwh8fd!D0r)Zc42p7M_ac2$&m2G0ju6^o+iD z;^w>Gahn8`3z>Sb3o$zDRM?<)43B_?K}Uq8PGasW^r{3(DWQ1Tagzy#QlY(<6r~u{ zzB+zMtxAXi)NZYpoH*>{1s%pwj$~W1GS5h{hAXMGf_6;zNNdUPig!|sY{a_~BIX0d zPH2y6QAstY<1U0r{9L-K>D^VJVaEvv;0dZA@xgn2>^*_0C^APAFu?{Kn)V^${CDa! z^!Ct!d^qilbtI>Y#)4QZ|O2P1TnK4|b5{H%oyn=OaYq(s%co<_-8a-+mwjECl@1t-ai|snp?^K#0M^2F26V@IJeC z9*ly{7@Y~p)n|R_zgytSXm5yMr&y!n01LpsOqtzSK3{l=~Cx35K3zBS$84#nusuI zfi`~$IqM960p^KR5IhycjCI z-GNe-fnwGxMVbbl4%wm2fBHlDXE~#1T_$mVR=m}kG0s}5>`FT(|CZ0y#tY>%5lYS% zou1IrvR~`UbtUazUm%kWaiP(5jG+pRO#8#N3)`V#u~AShv*~q=+&g_}SlTBt)c@NM~z5UZKqYj|tPQ3|;+#?M((oB%_3{4$Se!!ozlA`UF)Y zxI##`8w^LtPPG2mt+Bl~;T4)~U|5RK<+!Z%hwgrG{i}RhMW}F} z@cGGs7*=9E2+EMno4Lj1^aJpVFl`0-@6%CWCd|CE|6jI1IjHP^pMfaefXmdf=jtL? zvG+>@!Hjc~f80yyW)j%Z&DHw3v`e%t%PU-xa)vJT5e$Co_Ih>J6x-s5bHk%g{YL#SU(4s&44kUjzJ^qz zr^dK4>E%#_Ft8D}4O?U`sTxh($pkHwb96jjT?pK`SGq)6bF<8LGO$?q zOw@O*y!6xeAF>&_tTJ4{qTbQXQ&!fjt369_1g&iP7!Wx0d{Hvd2%B3b+q}7 z3cV~7>ec6dDRgNJ-NV*4zAclcejcBKJy|k>qsXzrqqTU|1B8M{-phI=vg=C|-dmUv z%HKTq`hjO^wG4iY$7xx#lLs*nsFF*`Irr!p_l*YLb_R`?3ppcOrl z%I=G@8oz-kfq2HFkK;q?tg_;}k<2FSmlBg;CO#?%OptzHo`_6O*+V1}zFt6mh}?{) zJ7oXv;VLx| z)-4X-4L6vxKRi`B$Y4wKDqOlswbMf?EQl{iYkP5o6j%*RyRZQL(CcBXL< z52nRRasA(~g{1ssY?w=VZ1+M0HD9wh^gUh_Z};shqTc?yE1bd#kfKnoGWKhK6nz#>NEq4w`%2BLljr(vZT?Cuy#YG*H;f2+iLR@Z@h|v7~9h2Y)jnDgu41iBJ3B}Muf@{Kr~vSZm=j1K1zc*5=cr9Q(vPY zH58iPBT?d_7oO~P3sZb3(LULPo6FjGu5JyrmYmgoR3Ov`dv_B2u)$ukJ6WSTa?wXr z(Iwuvr_;-2JK*gj?TkC#f`*;D@8ZF!bdw3``^;zE(Shlbn138y9W;EQkjLjDtGv3f zx_>(x&T>W+Q=90fdF+xXz4iS)0bY5lvCJrQRP_&0Rh`f9ae}Afecx2gU8Q#ersBkz z%?(z6I%3@*g~9^(-b&dNe6;`hb(k}g^DdQ`m*a&B zKTE0BePe13FA8TiB*2ny?4>^QwPQ)OYIq*mYm$X&s)0GRfy-MeU?Z`=GyvV z1%fW#PCTSweLzsRzI=LM35=P~_iRr79TlY&FXBehGjw#ev42mq~&6)DF~?}{t{v_u5(brn$j(hcFQZ6cH6 zB|d*jsJ1;9H5TNAF``sEhMiy;#bF zp4%AG@Jev=jdYLo%H@N91U5$5dmPgp5^u$?vfp2E8@w=udYRAMSjZbd zQXkV|j4#B{S&y4p+hHtn>p!nYRx@N?#)+`(rYL{5Ef7G~TsyeAHGN1uI5<<%w!Ft|s8_@T&m!6n&w&3YREZuOh!+;^V_oLxgY0 zdM1m4Ef3*aL7L!-V2222Yv&ev&HkzD+C=dUQ;LrM6WE*`FW)<6ab_PL1#F66dvP%+ zTu8|(H4<*(@NE;|jv>G(1uvIVThd-wAWz_zKGK}^8!=b1wvOqP6PQiFzD<`F&cwwVW3ZZg8c21zKgORAi@qCJ1 z^*srY2(sx^PqAgZCV_9DM{x#u^~b9Ac?xjZn`>tD<~uovmY0U87@Fua=MvM4lDovnan7 zdS5)KsSXS(Bt>bXMydPG`w4L+l>9* zU3j|_*T%pX(G*&+Il6(DH%%vbuuZbi!2LXC;gJ}vz50YV^-M4 z8Z*>Y_4GqLjMwy~Ux5NYO)&Bq1aX0O*U6V%fm^1p63LIKk`JNl?jeVd{5&V$<+Yzv z_A;hQl%NX9X@c4)1V7IBCvvX! zEnkxp7*|H1YaCqt5_c8^^}U+|eL@(Jw*MS=o(VVR-`)cjb6JWAhSGyO5h5(`g{x%m zSXV_Y3ml~$`bo43pPOL0E-mvUt>t49jVeBnNG_wc6Xt9A#sa}^)#@fm={E@xSX!n% zJ4+QQ?35AfHk+z2GuDjYuC2pB?JWSJmlJywO(y@G$k439^|@mHr?&1%lwfVaP}E!CIT zhj-TM8ZO=r`SHVBtE3Y8B$i#^0z|0z z*y` zVyV#^S>B{excI@2Q<*tlnA5g+l7UIX5QS{)*^H-8q zjX7c8v-)JRL)ySnNX~E%N1tle|E{tQtsSw}G<`XSBWVw-dB>#Oh>E=Bhr&U8JxpaS zMv7OMb<~7ud%!tyV(4QfMy1w+TWwSz&~8S@gJaDOf^&9g{02!d3GW`Z0c-I|{&S^u zJgQWh(nd>nsZIn?#e0 zDQMI^~T(^o2ImKc#xEBK|MaRQufO$4Lp6$Ukls8G;4o)>9U3E_pP zYTS*)wCoY$_u*F!O9r!#Uv^D<$IN~#bFzF6$lO=sD_>ZZPr>f@LCi z7)+zbtyw^lMgbHtt9ce=gM6$ca7eM?C`Wtctf8eC`A{wvBK)%}pY@b? zUwdw-2AVRpU-a0F^1ls$bA}~`RXCo1t-7iRNFj&wD`N`Yup*p)(TF@k=B6(O?WTGwUd(v~O+WdsKO{z>-+Y-|s9P%4zwTB}JHFs`uK=g3dolFb3_D7E36Do9h0 zHyg#%22wht|_{NZY49xgs1l7-X zIPU1BnJ1Xf)>_(#Wz>;^qgx)QO|^sCZ6sMmR}NO$VIGU3x0Wc+hw(&)9K0}1nK18a ztkIQKwdRGN_=WDK##uzgI`2hfeykP%Mu`#gpiZ`tUU+|^rh{uG|4Z5mMgM>q8H2SN@r22cdmQ31y8rJ76z;DIh>Gi-)y>50HM% z-uyAP68D-GW29WrO; zI3=ohJZG*ea0bao8gxU``0Y+8DGQzZ-GlRRV!qZHun|*0vj2L=$MU_b%$l1jQ=Fzg zIYC>QLr-2t5!n6S@#l0Ig-1TD_+emuBRc9lvpKdy6#_MUzqDPc0Fp2hf6dUEvrTP( zcpAAgl!F~a&{__~c^mstXqHo|t~gqCr4t2x_X+Mv#kuVKiG$L%#wCfJR$&c}Uu^ZF2m&vEpwZ@sbKY6?oJimhSgWSW4kq?XFL<^SJw!CKf}E|1j_T zI6+9`_6{;(9Ji)IYU$Oirz|y_VKv%N(aB%|)wXd+o$x9q%46?5^BDLm46!LC9;S?P zYpT@egXK$FR@7A$CwxrLynFU;aw1!dGQb=BgtJMAh&Uhe9FOf(SM2o}z>1486IPrW z%#g~vKd-<@|8&@9s)5Za~!c9$(|F6jM)xev&sxVooRgUu-^SrxLj&eRf zs`73gXIa%r5%`9yPb2l!$JX9UB}O1|HE}h%T;erO`}a1e(%w{uWl-`0Hm2H?quL58 z*wtE5w8q^m9QC|tQ29eF3uFaAKhN{P^Hj`nieq^0_iyMt@8JZEf zVdrG|3HY-v7mtVvHK(1ULkT=&4c{e5ygA_(4@?O{$f<@8b)C?=c4{jS%gvdCf&q6E#Kfmq9L>2x&)haqsTh%q zRBu3y2!GMr22ODga0gM=2z9g&O4w%%aoZofjBNP z5I|&msCfsRqa@<(BXsZor4DDKG&~*%IXr*kIY>CL*Xe~&bYQm35=_6{h;0@>;@M{O zt+4EJgoc)FB>ISyk^j4-Hwn2yo=BM*+<9!R7 zMuX-pC2T^LpPX86)YRN{9>f6mV&VkFSn9 z#y!g0S@^ zF5qsXcB0=1F!Lxl+8kg%&zDtd3$aB18jtxsCjJs9mHkwa;r;`(dz<@@Czwix&2l55 zPihn8VXHe&`6fI(>!$fd!gaQ{um_sCEV4GaOT&a}dL$=g+5A1W9sqNK| z0{s9DPq3#;hg?*p9cDZv?P+xTwE0?eg!x>DC{9Jn1ws2#aJnx!)cva@-ypq>r^K+G z8$1ThE;XgKc`TW@HFhTYEPR6n7@}V^>z|Gt&Y1l-X5=2f^74LG)6H^ zX#h3F=GH`MQcVan^(~ka+Ncmq*k_5E-YRLmWbwA@Z8EraGL5+#P#vYmRKZDZrm=lI zW=*{I&(GJ_Br&+BNePH#jF(V=i|s!RUOLqw%_(m6KM%tdOQpp_IPxISABM9pRi|x6 z@&YTEKIPy+!IweRX!AuY91E_LP$3?B^G)ubxD zz6c)|@5xY9&%{UE)3{jK&NI%AGnWWGyhm4j$)R+*XfrY z-<&#)v@HjY$h;NEpCu6Y=5+!;b@Y8#BHZ#pkL|ODs`w%%4Pae)8)>CcwX$Tn3Y%?k z?^;G1ezC+mn-*Kj4#tJJ?~V~E!3%k+nRJ=3AmnBPRgtu_TW7PAHOvc6mCWEFwKbZgG)l9iHQ$u& ztRxf}Y+frI*00XmN20Ew(GRNX zOlkuPvW2#UrIN&SQ^u-b<0Z5{qmm4Zo~oQ!n#sX+c+iRmv$gEnpIL&zkcx3NdkOb8 zk4S@3Hjd?2C_=08A=}ZF!@$5Uq(j@UuT8YjUJdQof`lNMoyFnYFPFXXfV0xF>g8ezVv^oP;VaduI;Ee@Iv=mJw^$9^vgzYgM(Mr70$pTLL&<2@^@?k~v7-Cq-=H8*{7 z96C&m?U=)df)ttsU2l;;&xtH32KA4ZdkE|Cycq-`>IM1Knz~-&{ch{tMsb2U|k;E+q;jP@r=xa^dim*N`CpZ zX8|V_(eLC9u!=1q9!W*&Ffk!4qXvJ{#qfV1zA)GoIP^9ZDbJCpuA}=QPBMOb@tM(- zOj*6)FzzF{d2niR^WI3&cs>`Q1QYOQLORf2`6ziQ=%%9HtGw3ni!={J0PQuvM74MA zKF8(Cc;l=nl-rgW$LfA_tK=2$HpYl!+uGvUv48dCYO=XPw`OQ{(d6z~@Kr&oZ>$8cPQL)w;VHHd#+j_thLE8~V!=h8bogF8Bc8IYkH^O5*JfECRos zjEwXpySuL&41s-R!XeWM^25M%_$LwTsaNzo!qK6?{_B3UUs;4?WnRlHvqdqE33V7= zT8U<~nUl;vii);PKi=bAsDmf!BrauJw_+D=F^i6PT&_(qgt0bKLX4fgutesKB|S$g zzmOP&bEJl0it1_eajMKcu-P%LWZ6m8%+!2iOyz-m`h?V|K)|Ua+zOQRJoW3SxFfn& zL)Of#G@4#FqOM7@rxIpn`%x`2nxJ!pfERqFlyUF!k*CeYN37A3DJYNX@sTC9Hh;o0Rqw`aJ6&WdZ=)DO#`aLt;pxe|TD@;9f90Fx6!PS=*S z0VA_uC0lzmqSf@F)@(Tb%U;s8(a`B!oSePWy^ta7OS@M$M8@Yy;E)lsBu z+iHI2Z^c)Rj13UEmMDp(!hX}OP1O(kjc#ynb)M5m&2r3MEq+3Ljqi0`U3oog1SsR z^>d}FOZ-LEEnQ?fhNnb);I@-gOY}k_s46{X;A@Xliuxy zN9GAVtyWmQRWk;<&m%+BE}iVCC?8*W;evn zmhNX(96vur8HSy_F1PG#B+xfcvJMOsX#H9`*U1ROVB+U`v-oc4;7!E zdV{~KJ?qDM)8TkSR3A;@~&B1<8@FD}QH-~r#+eN=sR%4eWE7onh z!=ETzVHkgqx&y~-X^tC0X_l_6O^YcQtAmxZd+#oa2zY3$|43|Cv@rWV&t~sJa;|*U z;~MXwWq3!sF~Jsma0ourO^2H=wE$G6U@GJ(eW2!maCJ8K^2$c%`!raTD+ha z4e=-*ko|diKNQ|P&}IDdR44HwtnbOqdYGUUVZtidYp=g`F_R~$mZb-;l9~{ z#?lB4c9SeTu`KVFOR)EJ2qBo&gVj+U?N_Mj;m=q-Xhlp*UG#MRpE=_%3QNecSHQr= zOBINj?fF(FY4~Wv>4K(U9wS>H2-=*|3zHgFN{6!mydWzoD4y3ax_WTO!d(ho;4W=Je!gv~{zZ~x9R+aaj<2U#KC)2J2Tha40lKwo;ohi)jLqgANcs!9gY0}r zM{V8*K`kIYQ(2H#7im^`%A*W;=yrgLOyX-36sK-$o2QQ@d^v{PrC?$KEt8RQk9$rv z{X>nA9L9?X8}p91djgb?eer5eW}!8EfI2|@hN>NouN|S)kI+mWr4|qOpe_8Eq@un* zW$^ZuN+12H{QI0Ay5GiflYuD5#%B}D9} z+`MDfE>Y3?qMes4bhSx=I}X*!-iKo^rn&vd!1xfCO6EKmaOB#((^txEZ0=UKeki*~ zs&myOwB&)D`p6>O`0T>}<7+;Rb7hxdYac)N$HydGURbPpahZ@@>5d&ptyAfh&Gw?i*=76p0#T~6 zo;id#v!iEYPFNdc7pF@Snu(0KKGuk82d_+IOoo5r@t*>R&OAN$po2jB3P&W}VRVzOxTOK*qS^hL(-iuI^2N#u#}Q z+R2gjH#&)N9u~&mr_cv&Z|dUlz~i{i6yKjh;FAJ8eOf}CHbfFgZyOitexPzQ)Up!7 zPF`s+?2eg8=BT6dVHghGr{Vu5uQ+8z#>o` zXeP+InYN%~S5Z+i!X=;zMxon)efX{gkF+DjWr}ZD=)`Ck0<-(aHA_D~4wEd?I5R6( zEfK~{MKyA)qCSS|bZnWnLGlqqrnJ?UOZy+8a2pkh|Hq?{`HDw=>^$2la%|}R@{{4B z=rsdRY@`vqptu_?UjH#qTW z@3o|_YH~%JO^q?6G1?o#uPD*TSG9cf&p_viC+X#O#SEDy=p!UQCO3VLBqz)k%R>3B z^vn$cJLqn@5>>(D zL`RHQYMess6MQkg2kSON*ebbTx=4He>wcQF+dv&ZA zZATupXTpZ@sJxRX93DEnI-kgxkTzQnzFsY?(h*$dV$1xKlCun`RKGnW$x})pQVtwQ zoy_Jhl26n=^CI78ST0cqw@EiVH4@LH))Oa|$ds`MQ^0mGTIWaQ_HzHxd+in=HL(gr(u3IuO-&?_DVJ|P!Jv;Vc(xF(Gz zb-7{Er$S1j2c#(S%lUBLVa2;m3xu?#*_WGh;r+!)4{2lCBUiamE}!wqpbU1Fg>NB{ z%6*;2oadaxl$|URLwdnJM%ww*I0wla?_lWk-D(cK!Y3WOYXHqbU)i+ZEt9fmhIp;> zL&N{H>do+LgbsFE(lW+qU!PbJNvi&sDD9O*1G70YS^_2(mfg3d>|(m)Q5PC#z9plI>V!_UTo{iTKyXZcvpub&!MTAVF_0XejJrqn+25R5Z?p!FKUhqSV zPDg=7TDuuA{ggSSBei<(qKhn=`p$F6Uq%nw))T3GB@4ZHK|3LXq@B3J41lknki-?Y z(Utz?D`DyeomlVJ*2GN-7rqkg7V2L)H+3D17*KlE--+*(p`BqKYO5Mu_jc!!n}ZrsNGUocZePGhZBfCsM4D~Ccgr~oeagiu{lSW3tNgIH0dZP+vpIZ+{53c~ z55>JzN}p)PR;p704nzRiS8eb-J%PhQx&1up>quD1jjZ@CKxzAt&x1+*|M*9Y=<)SC z1|>Ok@Y2%V2niSrM7w-Adpuf{ssYABFuE!@Xrnl!^B2%u{%x+C*r3dDsq`3ajOX`= zr>ZT_iNKzhRDuT$Vk|NxeXFxi5Ez+ASE=qD-?PB@@+4;J)P_-$%ixuzV7K#Ph2mmu zlI?A3Y38B)eOQzBxh$&THI`3q=?O3o3?f#Er5{+!VHKD*9)bw#qk3rJ$H4tCP@MW| zG0N8haK$+wUL?Og${Y`BgvzYQJ6&2<<^cr>Fd~@h>khBgdT-txDMU&JaA+eQSz{k2 zQ{vk=cNqW79%{Y0beb0Mq^w&@DZ!ctqXO}PU52=G@8&vmC4s5j@}f@OX+GylrF$mC zvi#72zF6Z3K8V#7?QhNl_YEUGf!n4VjZ%*cL}3)#G@5`!Vo09g zYvcC))NvwjTxKmei^;SPgUS#!y7-_M4vZXIWB^4B4iw95nrJG7$QZrEphLw3;tC^U z(P6;8j62$Ypr?-8knfF$(y5SzJ@nR{m9(`?hgOsP1!Na9fvr<%s3Q2FW@ST`Ba4x& z^EKVd2yv&BN0>r#1rYbd|6>_b*G71m@aB*(8GK+(WTEO88bb^GndK{AxN}H+D;BO= zb2{$5&Tv#OTgjfj8q+=|y>%H)G`)>iO#D~ZRnSuYn)hr1cFXL8x6Y7}mbX=${i1ICOX)w)o-r3?r*@iA`ml3Dcdx&V#6N!L(QI)OX|DIac|3iAQ`y* zS|e?NUQ8<2-V*)dOrJKzm)ps0H%*cE8t8q5>pR!qh-UzE(kp29{oEl@mXEbuyM-JH z&W0ketRB!+Zoj`x1uHzSS&D~3v!A6 zW*uYAO7Gve#i~X3h-JPu)=8{)Q!@_6(qxtd_N3;_}7bk!|UKGO_@C>Kjb^ghSNWpH^#hI{i_t1Tf z@P9pllWFzXcU_qq0QdrfChfJ|@3bRAk)fp4Q+7%advGhqs}6>cDtKTwM{oO(sfKa@ zt2s<3j*8z%{vFXyBRdtlF;R|Exuf!@z-*U%m#kgNy#l}@B4h+x8C@uY0 z3AGY~Sr3lj@-^43O^>))ep%5r&5xq&wkX1QXf{iUE1__3AHo86qJ?kG41aRiErw#} zt=~Z-`4%SR`*(`~wjY^KwomO*B5Rro`!M6HTdi zXx--T!K1tu+bQz+0W9RQD#*0DBwK9!s)aIu$aYf{n?~`C*D@KcKH+3(es8=NCgOcU zjdaYZ?NIiGt3|mTiXGk5&ddntP?+~VZesUprto*ZHjyKNkiQ1l)Qk6fa!H7_VFl!a znbIqX>>}uvV<@feY8|sls^%G+hh#l&s@%ib%#7mK`&_swIytz>`+75_lvIqwNtc~~ zQY_WdBj&ysi+6d67;&{r5kB^8B{00A`Z=owb~Xz0{LaQXCe9|(xyoRcze*F+ftu$D zZ4tI`uNw!xzfAifs`fQyXW!o$qmU?B=#iFqrh23%;zl&_Krz`+(P5AS#QTC>r+B%i z@$U-{YIkAb@lskWa}5R%S;4l};!3M?uShIE3wQ6zZvR?u_fy#EMWf<9_89vCr*Ux| z>lmc#sXsxXIQs?kMxa$iu zGP0d8N9VhdE1pn@vYFOq{orKEl>n?<0DKfGt_SL&RF;TyRZP~3`S-*5LZMr}pIAQ8 z&gwr#F0Tt6NMj*}rVm-bjISx4Zhr(6y(*b?8lQ`8dx4>S;y~X0RJtk#C&4Ey5p*_r zV2sTUX;{)vSJTE6r^&8=A?{2#!$ybVZxGUNeMutFiP&NExy~S3-!`uo=T}#sTyhK_ z;X98U#p%RMBm-k7tMvq~vwDk{ewX4p%5L0Fb*(0{!02hH+GW1`(#ZPE5}8>2K(b#g$6172+qR7AM9F1d~;;x^9Nh? z&`roI3;~8hA<;7$DLJ!!J#5@r!k-%bKY2vn^ac*Mt*`IR?ma7Rf4D$)Ybv%zu92d9 zZT7fx=@9#t@_5os%;XUkl2h;OCE9B`{OyC5Bj$imHVb)1bVoO`{FuY;hD zar-81v0zo+)O=~IGs}e^>-nrfRqrI!E@Eplnr_|&mvt*F0jMF|u}yr9dLB`AOK`Yw z2%MiLrc+glP(x zmOA5s`4X4vB*beo?~{7)=Xs8Xpn^JtjMehakXj^QYia7t1AU0~Q8*G87k=NfGq{d7KXr8-M7D(y<$_tc@-$CygFvy_OKT;BUS$RKT8x_Dejrcrrc^aTp(J z*A0Kd#jJuRpbGqCoWr-Ym+VsjddLe`0+12R8kUdNkgVcA;gT~RmlRh^h~leMaK+UL z*}pT+3e=22F6=8MhuCOs(2G;|tYNfcZ?MvzgP>Mjz-~TUh^!|=t6xuo!=`_H2tzpO zbYKbhuUQ|K_=%@9dz@!{2A`%K;vc;_M;5PX57(5q2G=ogdiUJnP=uhaoNxBAoySwI z_4;Hg#~paxEW(qTEPtMwyjV#m{kIM{7vZ;H0#R(SGAhXPQ}P%dMo~-JEHlj zcvZ?7e$5GlkcA?ZR$;szWd+>u2tRu*kW8^LmFa2AYhjrRK51*dz?YPBtD7E@M-X+m zZMLLEe3g(LM!<4?;YXL8?oZGSI-HZd_)O2Y2oYUrpzy_{h3Uc1TjO|CpA(`odxD-D%@kpZy#K05%5t?TGkuQk1h*}t9N&v zKQ>@ey`n}DiG92dNw(9Fl0z!3pHkYiB`c;QX>6G{@@$Vmc87bOjn9PdM&}}xWR))d zZ*1j7(cDDk*k#X~QG zfwef?s^OkrC+G2lc)sM%kI#&p$j365V}GX>@mXh8iXJV`cycj_NB|pvreS|by0Gz^ zW(txf7ZNd+*C$<~kXYuP3vob>kXBJg0Ht!ASNp8flZoT$VUiAz`}ddvq5LW;16r3y zjkim6h9hzcYQh5v$W6264^vX8mmH_1zNX)JmSV%n`)+>4G7^MV`HO)dp^3BAzcqKV zeg!~D(jirkB&VhNVFT5|`ak^~aDDEQk3VP*P-6tg&70W$1?FRM)jBV(NY}$+*JNaM z%Dh{5wdu4iU`mtJEo~Lh`pTrz(@oTP5#Ib{5cFt}CVqc?#m9P*clFeVgC@2OO-A0t zY}e!6bTK|UCCw1)Llmo^eeZIk53Pq;dJXdn zG0DAARpc6*#mMF7SdH-il--XL0a%kih*up|j3Od^9j}CQ?k8u@)}8#Pzsr9& zhcZbLj3G=zK_jPZ%9z}=l%X5)EX&XMM^T^M0yC4JD4lZ0whNIBvWU7pS6+C2Yk{eF zCBcK&mtr-aJ)0UFp>3T}|L*WhdiC>*A)3sX3P;-~k*hMwyg#p{i%^OETUbg-_V;{o zW-8I~KuUvZfEtu{YUuv}F*1~6TtzKOlTc-F{A1XyF2A<8!0-0d00?=Pei9Jk0lTTF z1z{^jMHVjhH3>ATXbaXU&ftCq--BUJE)mP6U}6{_eCZPmt0$>kU*HW9)0HqVlHg?d z>#$huqUq-5&D*6G8)YEuz(Yq`57vO)qQyyykFLMY+ffRDp?U077tTY%fGF!s$BhDQ zZEULwkfwAteccb~uDz zq_zSlD`5ZMONx0LTU6!g*^AY)sBcVN8@ZhX{6bvc(G%7clm?6Qorduxq8IIyCRz?v1c`2=J-l(*7m^0 zpfx~}9b0v2Vw&|1y!RC@Hx*G2zhLoaQlls?22_nzJxXrdB={hXz7ru%iQp%H#N_)H zhouN-1T|)?c{s=t){u5xB=&WVUuyi0=Hl*{b~!WH6p$a@v&ON7eO|1f(v4~lBzy<_ zP>q909Ne~fdw)-Bwj-5>D>b{X^&k3!70ho)P@zy z+jC`J#7wX4Id5pBJSM*rf&%6(gn$5u?TdW9r^|UH16RPWVCWY@dXXlnz?^^g=1}3n zd#?CBw2Siog=AdH1j2(ZS#}x>8++oRs3k29f3|YhYEv5WHMKl!_2$7SqaDAK@K$PB z-zBXiW=xrMYZpRcmoLltPEa~vRaAk9s5S?A=r4K1z2B@)!P;-w?B`&q$`H%;XSnzI zO3Wo$QQ%$R4Be!5ITi`l;AYVa30j~Dx#h?TTh5X_Y@#rg{4yiiMD zCXXT5qYi>vv~Q$yAw5S-eQ~Z`7BC~o1{!0D$V8;Wji*XyP#qp?_si-EN_qYa!&EH~ zVpD$wbY3q|GJk+9XTE}7YgauzMKKwFz4s$^6h)7ke!zaU_a*r<5w)4EU^b^eN9zGM zqUZW`Svip2aIHVXP#ig_x{{0S$?k1gQh4Xu`NlFygVYs<5GbnMg%=U~`ppDz^HAL` zc42~O>V0eLCua8`g%B-`^6-s)9ttuj$=#}ulDTP(oDMZR?qguPp&LaS@c1rIKPYOu zd`79%&n~NS(IbQwPJO8D6<4O46vsx^Q6<=+iTmwCKRD}`XQmCo7n!^`J06jbwJa$S z?1{_!Np%BVC%GWHH~ zdsM=27bm49@o++(&7p<|6lCrP?vlDi9=V%L3=iU-ZPGc?@-){StJFM3IcCsY+@{m= z1%J^yc4v=udco~*Qm#UECMcg>w=9P(hv3j+gt(8(>j@*f+hjYXNKD4U0pEx4@dd}2 zg4Pxlmxo8WTZQg0QhBVdOLUG|Z>>wY;jZZU&^o0R=xNcGw$Qk^uV^LWQopYaTVk_< z4rB9_#K=Pny&o}CyB=l&E6Y=SA8hF@9I!V#RJ4jSOT~>IRug;7=ZE}%8i;`wrwaz| zAuosD(Z_06OBtUKuON!6!b;*Skg7Ma+Go6js6Q5;VsAMEPdri-#4mkqMb(g{2z|6~ zHx@iKs=8PwqGH%aRGY4~Ifr<9$**$wX27J?unpjzJPr8dcp^l=8`*Vkxo9yikSC#qtEv?69SAW3n z`n|$FC$1a7m;Z3QsIEizg2~78>Z@ouIT%Q1!BT$_j!g-=w(e z^sY>{(RHXvLC1tC+@i7~1+2Ed;cQzC|G6$U)26KMt2CzCH)+^;(>rZzHfcVZJPYKL za%IAqtMMrQB@uHb0;PyrY|?|RJQ%Q79vb2fSw}Q_UMQ!P!c+^tysOe=KNIgcwha}B zuAna#81%ZSkr7h(tuB!7#9MBC+c@lNm}}z!fIWpl)EFHg7Kx51y}M4AU72Zpi0n~O z=Omgt9S|_&J4G4v%~%;&eczHRs;0uV_~jrfY(F{Q7|##KDGM{(tngLj6`@AuV^Htv zTmbV-KOm|D422a)4IL`pL9S)?&m@r^**|%F0_uYXcrkQRNFTS2{{6O+lL(C76C=h1 z54iHuJPRwH4g8;nqbf|p`^^(cFiS6<#MQ-h80aAn!p0gI@vR$8hQWyO;_Js5AB^^5 zd&BI#1x#j3o9_#ayEg9b?(WjKHtz23?oQLtxHRtW?$EfqySw{&d++_td}n5#J9Cnm zS%fWm^#+gj|q^2 zghl61W7GwFC7Sr(14w_iB1+tlK55k7RpT%(ujXRW%sRaYOoP2~rj_J|!^{0xF5(Sq zOM6I1pjTHSl3h(OxoV1izxhlIgtHqR%c@DeVsFQpc9GdcXE})$ij5>*YtSiBn=0&q z-9)K$bjD<#CMwqNbRc7#fMxgZ=0 zBOEg!O4(}U9&#$T81LB&889{Qn=4<4!`DD!Lg7bAd+sYxH2x)t-e&2>G1jQkHdlSo z=rDT4h!oazvM&_F2Ql1jWmsXjHv-33^KgZ!r5?rP(XkQ9V+X$k2R#h{s! zh~bgxAs3fmjR={|l143)Pi#wSefkluX;(a6NsRajvwDIHaDK7rE~T=Dachd+k<|7u z{>TNG_r(rbDw9IBjaIyU9lDnC5ARTw7nC6)e8(F>GH}w$$ZP#hAa2H3F$S`3R|GZ& z!l!mHLA_eMe82H;Wh!zsg^MFUq@rOF+ATABA+{(AElKSS!+O4O_HWe=NJF)Acd7Wi z>l?)&=O%Kz2vw-#?}6qR&6MQQMLL4-uI43!t$pnu6`e0u5ZIfFst~Rloc2msx?-cZlqft zY&rAPH^Uaxte>Co8D%_1wfB2y??T8qvkXr^xyNj+&4>c|Mf0)(qx1rm7@Jp zUlQ9QL{xu5U1X6&E8OZQ^O`t)!H&=S9U4ALChc%GA#;5LuqQm^fr|itqQ_GW$hBdi7QW3q zX>{ud zfI4~KU`*P14O1HyEh?{BhI6Nyswht7g!Zhmmtx?orfjABVQ7h;!tklLS6bx2X8 zV8;2xbMfosD}5+!W#(4!ryT8Lh>sOQmF2^Swoxw=Ng9M1nW~tLAUdqO2&k&y;_87- zyGUV3u`TxfVHjmLW3I&5ZJEb8bZ5R=rgKZ1-n>R$6EQf5qo8ReUybppT?V@DRWr-rbr9535%W?x?#5c4Qg{T z#NazY9U0xZtw#j3W_cY4yDW#@Yw1gbWD|Zgvg!UMY52JRcc(}SMHrEkF88^D)w^Oa z!`YW_Y!=e{{$PkA@kr?w zRiE))LNAAAHx_ngG!cH!HW;od)Wz09Hyp4QrBJe-eFh@56^3kiN?I>4Xk?)adCkN6 zjy(U>M~F4WGho6pxmttr#H+d(ag48(RQAn2W1)fFkJg0CzcXFKD{T{-^#|*({^}pG zlRz(z*Tj|plxJU+MTHAzqXsQ=dAgtI947#F zPI(Y2)`mV5feP>hD?)e(6+j%J>B1n^FS3Hxg}&WL4f_=h=Z4BrLbOpMqW4PQgF$*n zKdT|*oz(Fmsne^5TJymZ>{cYTla#i&(%_WAo`Tj;p8Oy;$u5kw2Ie1?Tkc@ExaQW% z0y~HfIGBotccxvZcO~6DKyzHmjM4tlbcrGZv*78BZeDBGnrpSrQ%gX`pi^}4K4>p3 zwZI_yKs)4Rf<}g}S*VpaP9bEQ=t8NVxssbyK$Qy*vWHQ0&UUR>#tO_1m84)cQ|2O@ zE}0Lab4YwoDVd(lg92H+3IBZQgGiY35THqHI1&n+K2k=83 zkA12z<)JBVbKP7E91)GAVE9a-=UOs}1ku6qZLC$uVN@NPB+MILPZ~gn2hObwu-g+T z92+3glTuQ=u(}RVE2ZlXNs7rnq)hFy0xdCG(AElggJV|`dktqYlTxZGfMbW$A8*QK zq;4iDFS}dKK8_-TlL{o@`c%fKu*sM-8{pV%@$J-Yb}|K^Z7~TSJh&xLjbRel--TH4 z$<=_4R*trK^}cp(31R)b0&by@fk^cRUtHLRhb4Vd*eC~glB#fy6pwk=YAsdZnBOfe zx1UP;N#n|1fS0fDt%E!643F;83QU%i7Qk5RCY_0L>8?y3U&jhZOfl;MYKWALc1yV(c6y&UnWX-9B0X>GBz^MWWe1$ayqx|-aEKD&g zydaH9yCjX8-EtOrNVZ{&|7g>_Cf6yuMw>w@lt{+o%9F0?$1|&-8kuRKzu8UZso)wP zX0yuWXBo)FE{2`sMzf%p0if@4dTJ+Rt9x=agFA+h&U26h>VA1`dI2p?DN zOrf%z1XavIPJ-L))>MwQWWK`Iu0ajSH z%_ByBDI>fa0rcw0O~ zQB2ZSd*zMc!ek&Gplmrwasw^$x|KO-GQAS)-QBGu|zxWq$oWV{ot?{`uULC zLO->EHBxK7V$yL=dBuJ1%Vjeh685f1N9W3VqI?18b10!a$4nK$cC&hS%Hy33y{V0y z`4qBQRJ%*>)zNFR4~rpa1~-jUd;FK5Yl;Kgoi5dCWKb(RoC1xNx=JLy&{h@{AE&@748kqG>OFA3-v)Bu_sG0 zmW~edie|AGs>9aEiNjb>M$W(PC9czad88#=#Kv2`&wqbw7IPj+H-Cx_lm;b+ch&OI zEg7=#ag#L0MQLl(Dx|DF4e1;Rlg3@>!J?2|Ic|uLm{c7ik6PxaNxby-k<>6a=6bw3 zgG;HcKX5?>$+G_;_b$d8DGW?gjAwNhD+pBjYr_<6I5Ot5`Ks5P6Mp&<5%i8pmv=yT4!)R3l%Z@ujK*;7{JKHn&u|n) z&>v99N%(yd!qmvJ$3<*9@K6W@;8vzoeaV_?p^dt!rl3C8T^VI6NS1fTM#-#nhsYDq z=)< zNLdQVPFgP@&7$>P_|`l`zek~%GS6%O9Jy<{S{IBFbCJ+o;y)ihjk;9A?(6k>;Z!Z? zmt)w<|JAHi^SE4evHMxD;B{&nwoFfqOoQ)vMPv^B=c**DWdags;s?`YijRv16T$-a zx)(;rqF~f3NcL?j6?KWi5hfNWv_QHSm!)+tecW}~r&((rl+y1dP1L*ub$xbZeV;(5 zxyBLg{SI>(Ve%WVhZWmKpWkYwM5`jK0!VKU?T$y@A=hH)DR1Ms7V&=C&P=805`Zhw zyKi-obG6cj7q;+FD3?Iz?CQe z+8S4VF)9`;$6H`q7BH=}NJ^iYeTP8&z1K1`X2&nP6*R zJEOpCpXHJeFql+TVO4}fRi-b*LeV@=qlq5}ECuvIV zf9Dv;dp$ZP>Y^#O$uXo!`>NI%kTsF-eH(=`+}WJWWEwJGR`~TZWC|xKsg&D(%N5V8 zXii}-;k@Yj<3iizwhk~N&8tJQJrLf!U*}fsF!NyaQX8I$Y)&hj*PJ_#vcTQ)m7-PeqaCL9{kuJ7tjt&T}1?j1P-r&qW$ z5#Pr8E9QgEi@T<7UCyfz0xPU=N+V)jO1}}$?T!^|=lE#k%2%9FrEt%28W^k~bhbg; zw9mNs&_Y9F`0uz1mhpJJ?#uVr~#y-5>F5?^8S7s<_#AnwgTPc5$X zrj{m0_f3hYETdeiA7+?El5=bV{d+JnEOE!p%PV|01&r!ys%2PN^tNLvWK|PrIH(}fiZSm%N@RXv#s_G1vOiX4t>`9Ex7(?j!>LQaU zJ+0^blpq~bSPT4Z-TjEpr`n>RTvnILd84L8Q8R3^X{XEk-StKjck@@#gLlDO>X#-jPB8=mvlVO49SwJ}r$#Skh* zPWPI1xD$o)3q9R785YI%M(D_Wi*q0k(XFisMxlo{wUkGf3&^)S91u>SC;K`J1kz)) z8K`j5r|Yp%+U;;Lfm*3vwF7tVG^UF)LhakM5o!_wrorJh{|aV$G_s$78p>?dF%v2T zMY>^M?-w$m<6e*>K||^-zEP9X3x`20%r&&7Vc;5G`>~$4c-Vs;r#)~53SA0Vu8%nj z7iL~=c1vlN!&iEuXG%qDM}n+_yYflhs^M(r`J28vp-ohrp7sfeSmu5=#F?B`1^aK_ z{Wj%Gat<|MDH}RK-VzJb`t0RFhJ6o}Xk7OcS8!#9)vRfy2n6l&M;W719Wd){Vs*u-1_Y4D$}1{OJvdCfR}v!Hh51 znh!X^WtLJ%P(Z-oj$^iwi@MDxMK*YPYS67&k8p@y%MVMOK%1hI9H^Y?;2jaM6utZV zAIo?Xaf}ti!f*cE`CoWFTS#%{G;F2YESgVXh+c902j(b=SykwlI4|I3cOkHndTN(j<8(m0ZhEI zDY$MqpRvRDRF4*%RaUxI@Z60xhp$&m;)JD!sh=%D)=hBy@5;$4B4S0&!DN5g2C4M7 z%lrcW5%X$3r>{wWHbTnI(P3kv!b_i!kZXe?yuz4PlnoNiP@>{ilX{+fd2RgK1R0=p zU$exa@bTCZH(^1bL64tjg?qlbXh{ISxG)q^a_fL; zM4NXt1^E$1Q_JW*E$qZ(XuWf6X}5m322yC2oTfQJuX986QSE9?gfp>Mp`A4egGt$c ziCLF#7%ka2oW0@2@ogVs6z`_AK++0pTL9gNSaB`moGi9>h)jT)*<176_npTRLtU0J zjru-qHQ0h*t4Qu6U!4D=OagUAR&Zv{$WIo-kRTuk75+#HvX=e3yylw>Y4J2p0}Usq@AEa z4S2!Oi3uUxqUOj~g)w6k8llF3F|vHghpsdvG$;?+epzHsN5OZ-xn%~*eespK7=d~_ za_^>^58yl3(ZKF%fgepk=78%+jBe1;T2Naht}e8M%iqAa zcD$j!O(NkMF+eaI@)>M1I#UTZe|IU;F#{?-YD+v98ncf!T^VE2Co#iJBvR zg;QGTX28PEwTM?CU6$w^!&D=o@c#>V>2H z5T*+z52FkhaZ_RGg9nl%V}X!fU+xgqD=D2zmR-nlnfmDR1>Wcoobs~{yq9qV@ER2V z>dBP08X!l~chn$SN5_4-!c2`N{Xs4#``GkAdoOz|ZdkjV1<63@`P& z8QMi$wCKf9esPVht%lxv;QO)rH@6apHmWec2y2CCp`*1It#D|=dh~v{kghH}JAjW2 z@)fpm!7g)#tbIGV26A9lD2*|VVTXr2bFDNveZmo`Yhhp6G;}!RjwbdnD)bwp>?Rw! zklRXm)k4nQJT6WxndLaN55K+#Vz?n{?y_gBm+E^h(i5J4qT@}1~oyxjv6-NYUs5UZ1vVOtatCWRvG&YO^Cpo!|I--krZnM5jL==_$~ zzH1f0SZY{i)okn(hAUkEx;s|FNM761<1VfHO}C`xiyG6PSj9|VS{gHWqNE$~p zrSHj|y>1hJ+>Qk>D3U4uHgID5hsHORL7UsN$B+o(H%dMML(thz{!92|p#p)lyr#Mw zRT<1HSd<_vkLN#t3l=!crF$oB=dPm|^=S0?kk0JrBZQ`jtrW9?;y2RGvpQ`z4gPz5+~ion*u z0-A^CA7@YzaImoaaqJWU0W`gsxs{W#0|C95mA;d)h_RuqkufwMAGD*BgR#CfwA-?^ zij3{D0Al;gS1W|L?;!dM1G-2;8Y^nslVs2ebJUAc5uj{L1gsw&FD3($*n4_z+%G2k zW3}xaPxp11iwzqsl1`O#wcHO2+4k|*FZ-ygtIFPvye;R~z0LFWJLgY=yl~#NF6hph z6(uT-ovZHGC6@3D^U-CMlEI#9uK1|83XSyV3w^Bdz4kAIW*?!!;4j9$oNn_ApnJK; zO3Dh$a_s33-VZ-V+vk@d616q&#ibqK3v$F{#JyX+7vPB`tqBF zbUHKW&zp{2ycx1ek7_q~bVJw`-O;7-L+9aM&Q;cYruQG_7iNw&e+nPzRm+#JJbhme z#81mrnyDQ0B5!ZYNQXAJR#Ts8Joj2=u~~Ggq)WDJm%nMz0j;p)Kf{zic62`T z6~f(%)U)|!B?O&}?2q9e1QLf31dah*&U^1ay3@2Tunz)-L8&qig~5s89^)t3O)-_f zjfDqs105BiM8%NE0?M4IH>)>0dWq2+t+ZQfU$XyTf(YVenP)EClniW0gPRCtC(_gt z<{^d?*}=8%2A0my&_#Jr(1ke|p5EExcEa&0K{Q2nf?l(EPE8mIJu4?-X0xK2Hm+_O;hA1L9_FBKD$-mwGilk&r#WiSZ#rt$e}JLpMHcfIrK9RK;Aq}&dRxEE z{93ooY~N=(YSV9e*tpH?q;Z8=t9galp?;Ne962#*3mB&9GrgtlGrfel!h99-3dt1m zD$oMVLf>Y->Nnjs^YHLHInl z1Bo6(wnRMYsX|MRnjygvcD3ckzngZ#@OYEeLFZJm!?WRf{s!W7EcYuXvO{ZU0l9RL z>k($xVG;Z9;AHt91ZU7Y0u0>!$h*U3StZo4_*`L8PFdaTGj&!sc7Cf@|o!cR`7JQbOzt^lqujU^dFMkAa4WoCj5-bIwGLU{^`~(F-gbxYF z@JYk-6eMNPe$0Oq0+~Uvqzr|@f#DhlI6gojN2;Hd2Y&xE#^*w1JsNXJ6PoU#?xK_} z#t`hnU#2_CV;5rt;E(eXGa+`2AOmV#G$@;4cELz@Q5;22;-s z@2U&9MtmQM3*Y&{bs#T#)FoU~oiXfC#xQR394faI#B{K2%LhXk+s1_kCKE-Y6!_B^ zbw0%}gtYxa29TN`6&`=}I{7UeeKx6$f%)YRul;G6U&5b03tQlwTGDlPR_D z7~YQa_<>oqJ{}QNf!3bVcJG3sDCV&c%U-}Dgx>2}ye@>;~7Bm!790YK_iyUjd@ zo|U};7*-FPIMfWA*aXn{82kv!8~iBU446gVXSy9Z(KqpEL_k9h_Z!Sn#jp=Ic$lj! zi|bZ{VzN$husNiU?&7Aeu=rFlgGh8ZGBx7K4<#D16kKt3h&#PkKEK!(^e+$iy|oXO z2i-d^R$m|vXS2SEqI)+FRFbO3I$xrb8!wXn9h|Ix2Pf-)S~;Bo%9#dG&Kv56P>G@L zE4t*$Uo~}paSmoE{R(rXASb9p;4mwpuP^6mnBUnf;1_K}*_mzesyy$`?3ruNF1Jml z%2nmgS+oWQ#)dCe4DFm%;KuegpKlNjG!|rCLaZ;nXOHZylS}s~|qRBTN#@?q} z!tZ<)w{%+H0|WSupO@ZJn@t+{SqcZtK4O1>zcq7T@SeehTfZcsXw z*5CU(ZzT2t_ofFlLn_`#ZdaVFC@2@Bo54yKEmv@kMEIlyx`GX*HO?&Ip1-Ui(j-~D z@7iXL?_eLbLG2?Lo(xp@sw`ynKc%IOTs65O<~UVp6wjY|$z1fto^=;Lp~rXBW^TmD z2G_Bbm1AnSa@kWN|HrB5Ew9uG!jw$KBB(qxo7oA_br~j|%O#GA1G60=r z|DZFi;1~J~fX*|Dzv!$6`X@RA{!8f0{DaPu&PSBOclJN%6qS(s7do%Y{*F#f1|5+9 z1D!Dcp3aPaM`!5&Bb^ifOy|Vk)A{gUMyH!80S))R(uwc~os9rGeg7?;Rx%E;3>&2u zOW9`PJz`P0JKjmQbUTL#KwP?JUk82G@6O*Kx!}c(rbJB_oQw?az6H|Wzi}9!$?BkU+&T{m(NNd zCT||cM$;gYOYvhTm{;H{ZP3;%?sjE+jjdM8UYmKrzkZ#Y)Pk?z-{4+oaarbFD;~5r z%Un~}PD-{ z0Z+Y)E!8I*vv*(3eNLVnc+PQ+C~(VEOPslNrzU(mc{x}=Tm}%vM_#6izs-j@vkITc z4qERFSbyvXr;ThPU2pX}@R|<$8Ulf%`5a0jxxXNc_!?;M#u@ zi1=syAm2B4oCTa;UIf6z`NLem#1O<2NDP!1q%F!?y*qm9{tEVAzy?x7^aik^u%c2i z@eG^HBfJ=8=3bX#4E$`PS*#(^Vf3Q%dzpY^AirWL(1#gLeI3N9^g|gyDs#d`0E%^0-!CGGUJeJYMP zRkJKhYTrZo?T;%NFNNID>4ZF{%XGF>mbS@N<)Z8@Vcg*4C@L_IGB zTwx`*vF(Z`GKjs=7)z%|9fXERxBcwc4OZ_;D$|1>GyZH?B6pL9aUr7095SAM zH+Yx^5YN~2yBY2TK*z&jK1-hNM2^98{8?$c_C4saj5&Be-MPSRfb%4ZBFR}SVT23L zo9(o=p9T=dMyYzm`2Qi2hsOP;ZAq$LV!G6Py>iriDB@lNr>b5dKGb}|g`cw+TR&%Q zrG3sS?s$ZK0}PJ~d5LWZd4YE#W_1I^@{qF6bQmzplaLQZ*Ne<&fE+}h)0{zy@ZB&` z=ylLjE$l-%zVovb>k~I+QOqNPY=67Kqr5#&jNO*mcix`1uX7GUQ{h2@7@g6v%pJ{9 zx%}@(8$yL#<2Mzq_?=lhb|PrnfZ`LM1U25-Zrv)tE+&6RCj0*wGEttntH7V~0it=d z;=LDmY$>lWP0ya$lHIAauWES)a?(K?3NpX}<`|c=AK#?C(3pFuP$`d|EMKqfnD}`u zE${(kXyT%hXv{w2?)R<3;F(vg$( z;p1s%@qQMCpPuxPt3+51cVZDTpAoY%5WVs~1}0Vh)k1xtwCnE7*HcVU#}&o(thwdB zQC|FsN)3x7?c1jU5dtxSErDH-Y+x|~%UExM8;%OjZ%+cB#J>D+{v-x3mPxFq$neFf zxG7|?yXI5wb^>%1D_nOJD+b_;nPW81}q8qHK8X zkdF&(Ky=87_@rKw&-cxqmRGGA$1=VJWz#nV-|bml!_DAJI<27FJoQju_NgdFIjRXP zJmcN^t9cJAjNTI(BUo$oK8(9supL$gck5q~H2P7`>chz#m=g$aDQ<$^Lol^|^y=Lh zskPr3d4{P5l(Y8P8P~(hOkgtr8Ritb=^NuC=SiU}1)y`gTgIQQHJ_z-pMF=^2gp4E zZ>vF%ah^zDMLEu6D$xBwC)TsoBH*Z6Kn#mn{)htt2tkpurbZ$r+~~_6qdEZGWvTv= zf-aT+iJ>etpP>r?SaxbYCGRWDXTWeqFkmJil=UIx3)Bspm{bazNC3>b7xE(Oc$9vP zk^}E?nAZDEB~9>S>_Zje2S6{W6D_V?73FcS@Y5qa`!BP%-Eg*grbs-4+$&4=f^txx zAQ*kH@lCxPF~xmfXF7vrozoArFZg`;2e-m#S`Ir|-zcg*iUK=tO6GC@j!cffBa`{R zM>E$-Aif`5rKPYVFns05%Q9`i)mfuynL8fJ2pL&yQh##vgsrG3$!^Bc^6hY~a6YT^ zY*C8cndE7$ZJ}eIE4UbE&ulwNd&_r5Iq_87T5oxe{~gfwzh(XoXrnTw{>V0^T-QD4 zAAVawQUELH-=Rsy3FfGfyC2{28%+ttN<@sm(0pTqu!Z`bwIOHfx_H}4s75#UI`li9 z9 zx{gqb#*Y#3iYzDxk(RzlJ3)-7F0NzSCs_>5%>+lK&8VHe3C>3F2At5?md%bnN=_Z1 zucssysbP*t>}A;m>B!>oZ>Jid*l-K6KfCSTNV5EhefO6;ga()ixPE7v06c}|2>FyM z0JC7OQXTo+hfByt7 zvqAdZs?Bcf*lmu{sbZvN?g?$T0%Kpl(jvo-uWG6{cY*7$kVk*jc(R>@QR22aMItD-x~DE`2FwDw0q zMW@+~=S0$u{l#yawqEg1oA%{*uK8f-^G#|b(C_J7JXb?>9{+Rn+&m;bV9 zOZCkEuWj0qKW*B1fK5C951Up-X*bfmWPbus*7c`Ns|NH>Hm%@)flcf9+osi0%DCfy z4gZHtOY|Sww6qwN|0kOk?EgD9?IXu-+6c$|ncIlu?{ zS2mk#7WMy*O~!xECOZSee>$dhR{r08AZug>6;!Aj!o4c%Ipxy!f=#D59spK12}FMB zwWHOqyriy&4z5jwKe1E48MXVQr%$qcEh|5^U{81XapHQ`3Ztr6(O*Kd;BR?C|6wrh zwjwu+ILmMqn1BaCU3<&9U<(n- z+Yu0Jqk}29DJZ`!-Nn0564xajYY63p&#Hq;w>xD5)2oF6>p1X0#9$P5F&+$bh3xbl zI2V%I4PSvSI_Pd2;WTz}F6GE8nGY}sWPion3sTT61$|cO!N@e5FRn%#n>Rb0IxMXx zO1H;3nLbSvlhIbJ1alC!b1KSa9_2*8>kZhMYzXqfMZdI2VHSHc?)E^n8{)X-cpkh7 z<4_3VVtgtycr@IdW6!Pd!ScRay~LETPoN+-i2d2y7xWZ`$)_`Ey+{m&OV;jTbb8l^ zc^&M{(gr~}uLnJFNwoDQ5tl~Ogw8@*M%e#OnkT5R5%jPwq$%V>Ii0dQ>VE+>r~5sY z@lTB1WpH0$5)Chvzk`A4?_l`Po1)IjBQ`4xh;1j- zi^6`po5^`r;n1)kIe2~u)&U$89?m3OpY^0dNbs*8_D+`-rdS|GdiPGx?H-!|i~Sk- z&JV{XTkWV5HizThdnQW{Ym`mRL#@YNPG^t3&C7EOOIw0GciQ#NxlLniPX*Qk+;Z!6 zb6Z-i)F&S#C+n#$Ilp1B?=<-h!wv`4(T5pHx3Bp?;DNU&5+5C3KUn^|)4!!*0&$c+ zwePjWVWZC37l}-VkXc@1R)$qa?6y2+9fQPnBXkOv{j385 z<%U+(cL!Qk<7Rj*%@1aD$AOb~AvnOR#UF9gJ9@@wcxm|`X2nPn^@HYLU}L?1UM^C> zqw?u>R}n4%_2z^`Q*Krx7(t@q{E}Eu5k%GbtkUWFCfb^Sq#?!n?voC7G5pPlwfjJ#e z7wv#EU|tpTn1@n8Hc(1BN${1{(@;GP)qTTK?;Tu!4%YaaQ_^IS< zU}0?N1n3C^s$iS|ztdu7X9Ha9S_}*f(!U%1-;MI`#`t%m_PfzyU;$hV3@*PL^WV)M zv;Hw`_b($hzk5c%8{6NFAtk+(vAe6SgOMWz;CBA_OmkZs5kNr>0fh(`69W?q0}~?) z11BQ`D+@IPBRK;DIbfcQtTkEfR83%rekDbWaVUHV`ZjgqGS8V!vg$)u^NH2xr;FY;I5eH zjf`FBMT`y1^=&8#Eba82%p8sN30(gAA8d5YbS%H8Q2s6`GPW`LU4_KR{Ldv1%I}2cHp8%MKE$kteFL(~ zSs<80t4;`0MIz=Yf^1X#6f8ukNO>xG3S3%)2vZD~6T68S{77}WMUz8g4MnRc5$XkQ z+7AAJD0^hDx??4vhG^LZafr$@6jrT(0T(`d$mw(jgmnsB)&;>U)1aOQ6r|FZ+5b%} zG%jILn3D83tSkGo0lq>b8T@QChgn`QA@^ihK#V{kk{q!)TD#CBs|7RGwUl8VTprM^ zKq%uE1fR!j#H8TIY9C$n?HsqNWv#7Fi?+=9NM^@^@!Q_*sod_s4T9iJ6rXrS9X%!e zS{qL(tNlgkYW2Ey6)EvpLo1(n)duO@M4teeHE4?>Gn*NBU1u)*Ouf#f`VUd+EzOF9 zw)&8$*VU5tk>bsjgNX|b{ft8A6RrA&Tl>t))`c=RDEdme{kRSau}( z4uk|gC2|nw@UgNV9peZ4Z{HLz3O+O2da|_g^;h^BfAU$s*vzB<@!0W7YB%=LtTKz$ zIe5!n&f4fbXKGJML??T~N`m>k^ zMz!L0lMogJSe$3~j+U@OX8$acDW4_Iv}2a($CorCMQkBcs0YWhZmdhthA&lA6t4UF zt&UZpi44aXV&i&t35U{0japOW6q_L8}FJmak^7SN> zlK>6PI^vqfd=H)h^Jysza^X%i^v_++Mxa#0S%T&KUZ{di57_#FWp!P1vjOj_#xLZ9 zJnHSTcuXhj)bO^tn04@=@@Der<^ zAHINt^;t(GXZc8`MTv>hggb@|*CNUO`C?={3qCu6T`Lk?n!uImO~^(HUGg{ZH%sy6 z!Bk{XNoqfhyu&dh)`y{e6n?IFB$s8>Xf(|jm_g3T)SbZ+3Pv@qe6bQL8vLWf&MnA`-oj{+4&eE;9t2dfyBW*cf~0^ zA~cd@-+ACA*hb*(vQ~_OM^6K1H?2n~XnxHb9PQ5wQtdm2#AiNpxE_<+D~()V&kJ6u zj)e_^DV89M!-jyd&xfTUfPprqQ_wD=bwiAF6J6vgH`PHRG@Wgte@{rj%@z?lPm*8J zSHS=+6@eZ`Q;k}{A__036*Tzb%vXpd86=5MDaTI7Ctm-|a7-+zq^4Q{5DjmBjvkXGoXKDO`#C6iwL#YD0x00lI3r5S| zBp0y1Ye#b&VIv0rnrm)|O7lbGg3^-{D76T7mvt7)JWNT+IJg8|IMvjBG{wkr)ZJ8b zNg|m4SmI~}0)1qcDXG;Yey|xH64fAD7-Ts!CK+Lkhf~@R-X-RHrqmBNO{z@hZ!U{D z)vFi#i)!aeFx`wzQfr1;yYckC$QTtzQ#w&{%QF=NFd_x{+q@Y$?n@ke{_*|YN>e%V zoI&eKov=pCQ{rUtA>-4~&ko=lg=sLf?}=C2Bmu$Oq*JGN^>8UG;mf1ugt2|uk zctCS!mJD%g1gD@L;aJm8Y(+7Kkf{ISPLkoV>X+W5eawSsg7Ag74dF zN&N`o_k-^n>;omI_-4soMfDSDO?Jft|_0zAyI}w`xFJ=ADF6t@GIsLVK(N)*64bJ>iI-4k(ud1$7jRUcl5z=II(d1$V5HTl+s#9e!I;k zY0XpOXI9_DcJ5<-BdB;OE6M0Fb6J1sl%f``_>P6Dc4c#;Nc6S^bDGMDOL@%6la~l& zykO3=H*;#ZrM-7_u{-bEG~FJJfU-iYO8)7a_G?G+!rZRK0B&Yqx{k^X zWmLrSm{c+)dmgO=2nxAsyyjCqHaI?6~a}lh5Eye?K#Q^d1u>m<$`TZ zfIZKm1?8P}>2fydT?%Uvl z`gyHCgqExE7jKTUDg5#GvJ>G|-9`6<*a}}Q;0c1eYG}P4-#o5wXLQL~>XL_rJ2uU$ zp^NPeNv`~vzHaHJBMN<1(%4bmo!}qwh%*pK!s+khl=1qrn$Sk$tG!M%X znH^1TH#3%gdn)ZkotnZKR3TzpW1t^DOJ6(7g4mpIRF*{;yeq_ZCQcocu=u~8G;j!I zjZFJ{B+qrH8M6iuCFVvRv6rfrwvn7uhbh0SD&6i`wJR2b;}v_kuf4R;M~?7%uFv#0 zW%?oe*?V|v``_EwQ*C;TisGJcS__7hYBqQq&AC@Tjop7DPY+TOA~62U?Z<`;dI@4%2c{L7+b?u_x0s|Tuo#S!7&L)y({vNDS68v zX&&h-rk3#A**Saza|L~x75%WwvdISNQI>2(RQO7YKYc}BMvMF=L?$@j8Qm8(__R`1 z-fe=iz?-R(o|N9N;p-X&jZzH$eYHmp^#dxPl#Gb<;zxq!h|f1pH67Yhmee9EO@bE* zlfPb`dq4HCcSrG5!Qj{4O>TLQ%o8+P&xKmE7A{&`*q*qKkFSuOSjU%-$f)u$FJ&3j zv~~`O$F!{MFXILYBj_ikl*%$LY;3F&lh;~1zQMQL>j^C?jlw;!KV0fttSn!1Z<@@v z#5-iSb=HR>Flo*wUUR2lGg+-s&JXa%HA76GugsrUFfaAan=B5Xlto`}w2uGWJh&g= zaome(*I&@NvlU(F8`bbK>!y`sRK37@adA>A-z4~Idzrw4NMC@miWP?_OLN;V)wJoX zd?}_R^1Qr^vtcz~d-Q29Zs;}#AJd<0W+d>oZ&-SSTYD#Em~?sYHj~_WW1En|(5tnq zV^a>8mmRs$qS^Y?k^DJ?`*f?pczWv^@n^kYS*blKQy_zduypX$6 z=Dp@k*uF3Bk8ei*^mQ`TN?jN9_4@2vVK+rNGQX`(QQZ`-@ZlBz(w_%iZRO(Dxt|6O zjERc!yOmEqTfo=)zsgGPVRSb?x7`vEel^iMPo7;qTC#OsU;F&k`OZ5^eD|wp*{RDf zms-{C+VlIxw1Voj&kr9>s|(e2T>48-@KjLHr)!FFe$Ov|o#uW2;lC}t$8!I&@0e)f zFaA2!_GZsb%h_|B%Rh+i+F2d(V~4F-OqlkKTOxbyT1v&m*98NUKG`s+PL-1s*}7sqV9)w@1DK;;fr^9*Vs&#R2=r$8qs*tjMwDK zA)I?B-_X+?PA$KhMqz)Sdj_PPMek{JZ@Hw|n(P%F=%=Z}v?*`+Bd! z!Bz7@Ql9qimS%b#dq}O?bVi)y_Pq2v4|W(=A9FOBf4ZpJIC$I2^0W7<3~#RX^FD82 zq$@MaMf~wX&yp~?SuHzu?zQ55{UkW%{9fJ3-#@)AEqVSw(W2bL_|}{6{y|e>Dl>$R z9&?`DQP7lRyKC0PMH+|g_{(#0CCg$Sb1HP&URxQ=w0c{LHC#0tJGr zbALy*>V{?u%YXm4|KS3WsnZsCRfPsEpCl&wc;ls7lMQP;i$CgrSvU1~0MG8Cl1a&Z zky{S)Ue{K*RCHcHz~8Mvb$vctjjGnH%U;FHPnxB7EuQwa^2M?$*6-RM6GKgpnEWUz z2|XKT|3@J%|Jmwz)e^mxaF2-g56F=_8jAap+kpc2j6G%5d zA}BSDOW!juCAC5!+5k9!U>VD$ADmeQ8cP6n_QMsT4Hb+P41t0{`S~S4LC^}%Adrr< zd>{`rm;>UuC`8-18M>L7n7No68XKECTDX`v8XCK~xdI0)91V25o&3h(&H(ANHe>s`!_qQ`Fc?alX}s4-35`|H%1H}PrHW=1c*z2eT~iI*HUe9`#0fT`-CipWBi2b#t9WgX4+=0z8K`{p6M>J?nY7IYYXDPwk;nOxx-W4A~nPb+_O9 zE0N5#DsS%lMXBDKW~7R|DiBk9V8fs8yC(C>+AXrv&mPzkU8#AC`$9|VjMCMAdYOw0 zIG;V_ifML@Xu7@OQP}FEqSqg?tvTeogZ1?W&gg>n#z$ed3#Oah`y+Q}dGB)DhW0In z2bC*)q^q|w@7`kgM7Y9By4k+j_EzMo=O3EP;{L1dS=76?-ZypL_9X8kc_$iux@3h8 ziWFWkaZ$V7*uRKrg3CuoR~c6s(RiSgPglNPlO~hWrIj9>f}$ue^y1o^g3it@aPKP}>hr_O)RHFX|qYWq%m%s8=%@me>W}wxwYb| literal 0 HcmV?d00001 diff --git a/doc/developer/gpgcard-addon.rst b/doc/developer/gpgcard-addon.rst new file mode 100644 index 0000000..9d27241 --- /dev/null +++ b/doc/developer/gpgcard-addon.rst @@ -0,0 +1,344 @@ +.. + Ledger App OpenPGP. + (c) 2024 Ledger SAS. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +.. + ------------------------------------------------------------------------ + LaTex substitution Definition + ------------------------------------------------------------------------ + + + +License +======= + + | Ledger App OpenPGP. + | (c) 2024 Ledger SAS. + | + | Licensed under the Apache License, Version 2.0 (the "License"); + | you may not use this file except in compliance with the License. + | You may obtain a copy of the License at + | + | http://www.apache.org/licenses/LICENSE-2.0 + | + | Unless required by applicable law or agreed to in writing, software + | distributed under the License is distributed on an "AS IS" BASIS, + | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + | See the License for the specific language governing permissions and + | limitations under the License. + + +Introduction +============ + +OpenPGP Card Application add-ons summary +---------------------------------------- + +Key management: +~~~~~~~~~~~~~~~ + +OpenPGP Application manage 4 keys to Perform Security Operation (PSO) plus 2 for secure channel. + +The 4 keys are defined as follow: + +- One asymmetric signature private key (RSA or EC), named 'sig' +- One asymmetric decryption private key (RSA or EC), named 'dec' +- One asymmetric authentication private key (RSA or EC), named 'aut' +- One symmetric decryption private key (AES), named 'sym0' + +The 3 first asymmetric keys can be either randomly generated on-card or +explicitly imported from outside. + +The 4th is imported from outside. + +It's never possible to retrieve private key from the card. + +This add-on specification propose a solution to derive those keys from the +master seed managed by the Ledger Token. +This allows owner to restore a broken token without the needs to keep track of keys +outside the card. + +Moreover this add-on specification propose to manage multiple set of the 4 previously described keys. + +Keys Slots +~~~~~~~~~~ + +To modify the keys slot, just select the corresponding menu from the screen. + +.. image:: slots.png + +Random number generation +~~~~~~~~~~~~~~~~~~~~~~~~ + +OpenPGP Application provides, as optional feature, to generate random bytes. + +This add-on specification propose new type of random generation: + +- random prime number generation +- seeded random number +- seeded prime number generation + +Key Backup +~~~~~~~~~~ + +A full key backup mechanism is provided. + + +Ledger OpenPGP Application +========================== + +How +--- + +Deterministic key derivation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The deterministic key derivation process relies on the **BIP32** scheme. +The master install path of the App is set to ``/0x80'GPG'``, aka ``/80475047``. + +Deterministic key derivation maybe activated in: + + | ``Settings -> Seed Mode -> Set on`` + +This activation remains effective until *set off* is selected. + +The key management remains the same if seed mode is *on* or *off*. So there is no performance impact when using seeded keys. + +Seeded keys are generated as follow: + +**Step 1**: + +For a given keys slot n, starting from 1, a seed is first derived with the following path + + | ``Sn = BIP32_derive (/0x80475047/n)`` + +**Step 2**: + +Then specific seeds are derived with the *SHA3-XOF* function for each of the 4 key: + + | ``Sk[i] = SHA3-XOF(SHA256(Sn \| \| int16(i)), length)`` + +Where: + +- Sn is the dedicated slot seed from step 1. +- key_name is one of 'sig ','dec ', 'aut ', 'sym0', each 4 characters. +- i is the index, starting from 1, of the desired seed (see below) + +**Step 3**: + +*RSA key generation* + +Generate two seed Sp, Sq in step2 with: + +- i € {1,2} +- length equals to half key size + +Generate two prime numbers p, q: + +- p = next_prime(Sp) +- q = next_prime(Sq) + +Generate RSA key pair as usual: + +- choose e +- n = p*q +- d = inv(e) mod (p-1)(q-1) + +*ECC key generation* + +Generate one seed Sd in step2 with: + +- i = 1 +- length equals to curve size + +Generate ECC key pair: + +- d = Sd +- W = d.G + +*AES key generation* + +Generate one seed Sd in step2 with: + +- i = 1 +- length equals to 16 + +Generate AES key: + +- k = Sk + +Deterministic random number +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The deterministic random number generation relies on the **BIP32** scheme. +The master install path of the App is set to ``/0x80'GPG'``, aka ``/80475047``. + +**Random prime number generation**: + +For a given length *L*: + +- generate random number r of *L* bytes. +- generate rp = next_prime(r) +- return rp + +**Seeded random number**: + +For a given length *L* and seed *S*: + +- generate Sr = BIP32_derive(/0x80475047/0x0F0F0F0F) +- generate r = SHA3-XOF(SHA256(Sr \| 'rnd' \| S), L) +- return r + +**Seeded prime number generation**: + +For a given length *L* and seed *S*: + +- generate r as for "Seeded random number" +- generate rp = next_prime(r) +- return rp + +Key Backup & Restore +~~~~~~~~~~~~~~~~~~~~ + +In order to backup/restore private key the commands `put_data` and `get_data` accept the tags: + +- `B6` (signature key) +- `B8` (encryption key) +- `A4` (authentication). + +`put_data` command accept the exact output of `get_data`. The `get_data` command +return both the public and private key. + +For security and confidentiality, private key is returned encrypted in AES. +The key used is derived according to previously described AES key derivation +with name 'key'. + + +The data payload is formatted as follow: + + +-------+--------------------------+ + | size | Description | + +=======+==========================+ + | 4 | OS Target ID | + +-------+--------------------------+ + | 4 | API Level | + +-------+--------------------------+ + | 4 | compliance Level | + +-------+--------------------------+ + | 4 | public key size | + +-------+--------------------------+ + | var | public key | + +-------+--------------------------+ + | 4 | private key size | + +-------+--------------------------+ + | var | encrypted private key | + +-------+--------------------------+ + +APDU Modification +----------------- + +Key Slot management +~~~~~~~~~~~~~~~~~~~~ + +Key slots are managed by data object *01F1* and *01F2* witch are +manageable by PUT/GET DATA command as for others DO and organized as follow. + +On application reset, the *01F2* content is set to *Default Slot* value +of *01F1*. + +*01F1:* + + +-------+----------------------------------+-------+ + | bytes | Description | R/W | + +=======+==================================+=======+ + | 1 | Number of slot | R | + +-------+----------------------------------+-------+ + | 2 | Default slot | R/W | + +-------+----------------------------------+-------+ + | 3 | Allowed slot selection method | R/W | + +-------+----------------------------------+-------+ + +Byte 3 is endoced as follow: + + +----+----+----+----+----+----+----+----+-------------------------+ + | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | Meaning | + +----+----+----+----+----+----+----+----+-------------------------+ + | \- | \- | \- | \- | \- | \- | \- | x | selection by APDU | + +----+----+----+----+----+----+----+----+-------------------------+ + | \- | \- | \- | \- | \- | \- | x | \- | selection by screen | + +----+----+----+----+----+----+----+----+-------------------------+ + +*01F2:* + + +--------+-----------------+-------+ + | bytes | Description | R/W | + +========+=================+=======+ + | 1 | Current slot | R/W | + +--------+-----------------+-------+ + +*01F0:* + + +--------+-----------------+-------+ + | bytes | Description | R/W | + +========+=================+=======+ + | 1-3 | 01F1 content | R | + +--------+-----------------+-------+ + | 4 | 01F2 content | R | + +--------+-----------------+-------+ + +*Access Conditions:* + + +------+-----------+------------+ + | DO | Read | Write | + +======+===========+============+ + | 01F0 | Always | Never | + +------+-----------+------------+ + | 01F1 | Always | Verify PW3 | + +------+-----------+------------+ + | 01F2 | Always | Verify PW2 | + +------+-----------+------------+ + +Deterministic key derivation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +P2 parameter of GENERATE ASYMMETRIC KEY PAIR is set to (hex value): + +- 00 for true random key generation +- 01 for seeded random key + +Deterministic random number +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +P1 parameter of GET CHALLENGE is a bit-field encoded as follow: + + +----+----+----+----+----+----+----+----+-------------------------+ + | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | Meaning | + +----+----+----+----+----+----+----+----+-------------------------+ + | \- | \- | \- | \- | \- | \- | \- | x | seeded random | + +----+----+----+----+----+----+----+----+-------------------------+ + | \- | \- | \- | \- | \- | \- | x | \- | prime random | + +----+----+----+----+----+----+----+----+-------------------------+ + +When *seeded mode* is set, data field contains the seed and P2 contains +the length of random bytes to generate. + + +Other minor add-on +------------------ + +GnuPG use both fingerprints and serial number to identify key on card. +So, the `put_data` command is able to modify the AID file with '4F' tag. +In that case the data field shall be 4 bytes length and shall contain +the new serial number. '4F' is protected by PW3 (admin) PIN. diff --git a/doc/developer/gpgcard3.0-addon.rst b/doc/developer/gpgcard3.0-addon.rst deleted file mode 100644 index 71f0ac3..0000000 --- a/doc/developer/gpgcard3.0-addon.rst +++ /dev/null @@ -1,326 +0,0 @@ -License -======= - -Author: Cedric Mesnil - -License: - - - | Copyright 2017 Cedric Mesnil , Ledger SAS - | - | Licensed under the Apache License, Version 2.0 (the "License"); - | you may not use this file except in compliance with the License. - | You may obtain a copy of the License at - | - | http://www.apache.org/licenses/LICENSE-2.0 - | - | Unless required by applicable law or agreed to in writing, software - | distributed under the License is distributed on an "AS IS" BASIS, - | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - | See the License for the specific language governing permissions and - | limitations under the License. - - - -Introduction -============ - -OpenPGP Card Application v3.0 add-ons summary ---------------------------------------------- - -Key management: -~~~~~~~~~~~~~~~ - -OpenPGP Application manage four keys for cryptographic operation (PSO) plus two -for secure channel. - -The first four keys are defined as follow: - - One asymmetric signature private key (RSA or EC), named 'sig' - - One asymmetric decryption private key (RSA or EC), named 'dec' - - One asymmetric authentication private key (RSA or EC), named 'aut' - - One symmetric decryption private key (AES), named 'sym0' - -The 3 first asymmetric keys can be either randomly generated on-card or -explicitly put from outside. - -The fourth is put from outside. - -It's never possible to retrieve private key from the card. - -This add-on specification propose a solution to derive those keys from the -master seed managed by the Ledger Token. -This allows owner to restore a broken token without the needs to keep track of keys -outside the card. - -Moreover this add-on specification propose to manage multiple set of the -four previously described keys. - -Random number generation -~~~~~~~~~~~~~~~~~~~~~~~~ - -OpenPGP Application provides, as optional feature, to generate random bytes. - -This add-on specification propose new type of random generation: -- random prime number generation -- seeded random number -- seeded prime number generation - - -Key Backup -~~~~~~~~~~ - -A full keybackup mechanism is provided. - - -GPG-ledger -========== - -Definitions ------------ - - - The application is named GPG-ledger - - A keys set is named 'keys slot' - -How ---- - -Deterministic key derivation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The deterministic key derivation process relies on the BIP32 scheme. -The master install path of GPG-ledger is set to /0x80'GPG', aka /80475047 -Deterministic key derivation maybe activated in: - Settings->Seed Mode->Set on - -This activation remains effective until *set off* is selected or the application -ends. - -The key management remains the same if seed mode is on or off, i.e. key are stored in memory key containers. So there is no performance impact when using seeded keys. - -Seeded keys are generated as follow: - -**Step1**: - -For a given keys slot n, starting from 1, a seed is first derived with the following path - -Sn = BIP32_derive (/0x80475047/n) - -**Step2**: - -Then specific seeds are derived with the SHA3-XOF function for each of the four key : - - Sk[i] = SHA3-XOF(SHA256(Sn \| \| int16(i)), length) - -Sn is the dedicated slot seed from step 1. -key_name is one of 'sig ','dec ', 'aut ', 'sym0', each four characters. -i is the index, starting from 1, of the desired seed (see below) - - -**Step 3**: - -*RSA key are generated as follow* : - -Generate two seed Sp, Sq in step2 with : - - i € {1,2} - - length equals to half key size - -Generate two prime numbers p, q : - - p = next_prime(Sp) - - q = next_prime(Sq) - -Generate RSA key pair as usual. - - choose e - - n = p*q - - d = inv(e) mod (p-1)(q-1) - -*ECC key generation* : - -Generate one seed Sd in step2 with : - - i = 1 - - length equals to curve size - -Generate ECC key pair : - - d = Sd - - W = d.G - - -*AES key generation* : - -Generate one seed Sd in step2 with : - - i = 1 - - length equals to 16 - -Generate AES key : - - k = Sk - -Deterministic random number -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The deterministic random number generation relies on the BIP32 scheme. -The master install path of GPG-ledger is set to /0x80'GPG', aka /80475047 - -**Random prime number generation** : - - For a given length *L*: - - - generate random number r of *L* bytes. - - generate rp = next_prime(r) - - return rp - -**Seeded random number** : - -For a given length *L* and seed *S*: - - - generate Sr = BIP32_derive(/0x80475047/0x0F0F0F0F) - - generate r = SHA3-XOF(SHA256(Sr \| 'rnd' \| S), L) - - return r - -**Seeded prime number generation** : - -For a given length *L* and seed *S*: - - - generate r as for "Seeded random number" - - generate rp = next_prime(r) - - return rp - - - -Key Backup & Restore -~~~~~~~~~~~~~~~~~~~~ - -In order to backup/restore private key the commands `put_data` and -`get_data` accept the tags: - - `B6` (signature key) - - `B8`(encryption key) - - `A4` (authentication). - -`put_data` command accept the exact output of `get_data`. The `get_data` command -return both the public and private key. - -For security and confidentiality, private key is returned encrypted in AES. -The key used is derived according to previously described AES key derivation -with name 'key'. - - -The data payload is formatted as follow: - - +-------+--------------------------------------------------+ - | size | Description | - +=======+==================================================+ - | 4 | OS Target ID | - +-------+--------------------------------------------------+ - | 4 | API Level | - +-------+--------------------------------------------------+ - | 4 | compliance Level | - +-------+--------------------------------------------------+ - | 4 | public key size | - +-------+--------------------------------------------------+ - | var | public key | - +-------+--------------------------------------------------+ - | 4 | private key size | - +-------+--------------------------------------------------+ - | var | encrypted private key | - +-------+--------------------------------------------------+ - - -APDU Modification ------------------ - -Key Slot management -~~~~~~~~~~~~~~~~~~~~ - -Key slots are managed by data object *01F1* and *01F2* witch are -manageable by PUT/GET DATA command as for others DO and organized as follow. - -On application reset, the *01F2* content is set to *Default Slot* value -of *01F1*. - -*01F1:* - - +------+--------------------------------------------------+--------+ - |bytes | description | R/W | - +======+==================================================+========+ - | 1 | Number of slot | R | - +------+--------------------------------------------------+--------+ - | 2 | Default slot | R/W | - +------+--------------------------------------------------+--------+ - | 3 | Allowed slot selection method | R/W | - +------+--------------------------------------------------+--------+ - -Byte 3 is endoced as follow: - - +----+----+----+----+----+----+----+----+-------------------------+ - | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | Meaning | - +----+----+----+----+----+----+----+----+-------------------------+ - | \- | \- | \- | \- | \- | \- | \- | x | selection by APDU | - +----+----+----+----+----+----+----+----+-------------------------+ - | \- | \- | \- | \- | \- | \- | x | \- | selection by screen | - +----+----+----+----+----+----+----+----+-------------------------+ - - -*01F2:* - - +------+--------------------------------------------------+--------+ - |bytes | Description | R/W | - +======+==================================================+========+ - | 1 | Current slot | R/W | - +------+--------------------------------------------------+--------+ - -*01F0:* - - +------+--------------------------------------------------+--------+ - |bytes | Description | R/W | - +======+==================================================+========+ - | 1-3 | 01F1 content | R | - +------+--------------------------------------------------+--------+ - | 4 | 01F2 content | R | - +------+--------------------------------------------------+--------+ - - -*Access Conditions:* - - +-------+------------+-------------+ - | DO | Read | Write | - +=======+============+=============+ - | 01F0 | Always | Never | - +-------+------------+-------------+ - | 01F1 | Always | Verify PW3 | - +-------+------------+-------------+ - | 01F2 | Always | Verify PW2 | - +-------+------------+-------------+ - - - -Deterministic key derivation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -P2 parameter of GENERATE ASYMMETRIC KEY PAIR is set to (hex value): - - 00 for true random key generation - - 01 for seeded random key - - -Deterministic random number -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -P1 parameter of GET CHALLENGE is a bit-field encoded as follow: - - +----+-----+----+----+----+----+----+----+-------------------------+ - | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | Meaning | - +----+-----+----+----+----+----+----+----+-------------------------+ - | \- | \- | \- | \- | \- | \- | \- | x | prime random | - +----+-----+----+----+----+----+----+----+-------------------------+ - | \- | \- | \- | \- | \- | \- | x | \- | seeded random | - +----+-----+----+----+----+----+----+----+-------------------------+ - - -When bit b2 is set, data field contains the seed and P2 contains -the length of random bytes to generate. - - -Other minor add-on ------------------- - -GnuPG use both fingerprints and serial number to identify key on card. -So, the `put_data` command is able to modify the AID file with '4F' tag. -In that case the data field shall be four bytes length and shall contain -the new serial number. '4F' is protected by PW3 (admin) PIN. diff --git a/doc/developer/quick-test.md b/doc/developer/quick-test.md new file mode 100644 index 0000000..1e3d892 --- /dev/null +++ b/doc/developer/quick-test.md @@ -0,0 +1,361 @@ +# Quick Test guide + +This page helps the developer to quickly test basic features of the OpenPGP Application. + +Please note this guideline is targeting Linux (Ubuntu) only machine, but once installed, +all commands are valid on any other OS. + +## Step 1: Install your device + +Do a fresh installation of OpenPGP Application on the device. + +## Step 2: Setup conf + +### Tools and scripts + +Ensure `pgp` is available on your host machine. + +Install the needed mandatory tools: + +```shell +sudo apt install libpcsclite-dev scdaemon pcscd -y +``` + +Optionally, the following diagnostic tool can also be installed: + +```shell +sudo apt install pcsc-tools -y +``` + +You can check the tools are operational with the commands (see *help* for other options): + +```shell +$ pcsc_scan -c + +Thu Jan 18 09:45:19 2024 + Reader 0: Ledger Nano S Plus [Nano S Plus] (0001) 00 00 + Event number: 0 + Card state: Card inserted, + ATR: 3B 00 + Reader 1: Alcor Micro AU9540 01 00 + Event number: 0 + Card state: Card removed, + +$ p11-kit list-modules +p11-kit-trust: p11-kit-trust.so + library-description: PKCS#11 Kit Trust Module + library-manufacturer: PKCS#11 Kit + library-version: 0.24 + token: System Trust + manufacturer: PKCS#11 Kit + model: p11-kit-trust + serial-number: 1 + hardware-version: 0.24 + flags: + write-protected + token-initialized +opensc-pkcs11: opensc-pkcs11.so + library-description: OpenSC smartcard framework + library-manufacturer: OpenSC Project + library-version: 0.22 + token: OpenPGP card (User PIN) + manufacturer: OpenPGP project + model: PKCS#15 emulated + serial-number: 2c97c3e750db + hardware-version: 3.3 + firmware-version: 3.3 + flags: + rng + login-required + user-pin-initialized + protected-authentication-path + token-initialized + token: OpenPGP card (User PIN (sig)) + manufacturer: OpenPGP project + model: PKCS#15 emulated + serial-number: 2c97c3e750db + hardware-version: 3.3 + firmware-version: 3.3 + flags: + rng + login-required + user-pin-initialized + protected-authentication-path + token-initialized + +Check the installation of CCID driver and more particularly its device config: + +Edit the file `/etc/libccid_Info.plist`, and check if the Ledger devices are correctly defined. + +Please take care, the different lists are ordered in the same way. Do not insert elements anywhere! + +> Note: To add a new Ledger device, check [doc/user/app-openpgp.rst](../user/app-openpgp.rst) + +### Manual Tests + +Jump into the directory `manual-tests`. There is a helper script to perform some of the following described operations. + +```shell +cd manual-tests/ +$ ./manual.sh -h + +Usage: ./manual.sh + +Options: + + -c : Requested command + -v : Verbose mode + -h : Displays this help +``` + +The `init` command allows to prepare a local `gnupg` home directory, with the default minimal config file for *scdaemon*. +For further investigations, you can also add in the file `manual-tests/gnupg/scdaemon.conf` the following lines: + +```shell +debug-level expert +debug 11 +log-file /tmp/scdaemon.log +``` + +## Step 3: Verify the card status and the pin code + +Launch the Application on the device. + +Now, on the PC, inside a terminal: + +```shell +$ killall scdaemon gpg-agent +$ gpg --homedir $(pwd)/gnupg --card-edit +gpg: keybox 'xxxx/manual-tests/gnupg/pubring.kbx' created + +Reader ...........: Ledger Nano S Plus [Nano S Plus] (0001) 01 00 +Application ID ...: D2760001240103032C97B7DA92860000 +Version ..........: 3.3 +Manufacturer .....: unknown +Serial number ....: B7DA9286 +Name of cardholder: [not set] +Language prefs ...: [not set] +Salutation .......: +URL of public key : [not set] +Login data .......: [not set] +Signature PIN ....: not forced +Key attributes ...: rsa2048 rsa2048 rsa2048 +Max. PIN lengths .: 12 12 12 +PIN retry counter : 3 0 3 +Signature counter : 0 +Signature key ....: [none] +Encryption key....: [none] +Authentication key: [none] +General key info..: [none] +``` + +This gives the status of the current card. We can see on the 1st line, the detected Card Reader (i.e. the Ledger device). +In the Application ID information, we can see, concatenated: + +- `D27600012401`: The *Registered application provider identifier* (ISO 7816-5) +- `01`: The *Proprietary application identifier extension* (OpenPGP) +- `0303`: The current specification version *3.3* +- `2C97`: The Ledger Manufacturer Id +- `B7DA9286`: the Card Serial + +And currently, no keys are present on the Card. +Now, we can verify the Card pin code using the `verify` command. +You will be prompt to validate with the buttons, or enter the pin code, depending on the Application settings. + +```shell +gpg/card> verify + +Reader ...........: Ledger Nano S Plus [Nano S Plus] (0001) 01 00 +Application ID ...: D2760001240103032C97B7DA92860000 +Version ..........: 3.3 +Manufacturer .....: unknown +Serial number ....: B7DA9286 +Name of cardholder: [not set] +Language prefs ...: [not set] +Salutation .......: +URL of public key : [not set] +Login data .......: [not set] +Signature PIN ....: not forced +Key attributes ...: rsa2048 rsa2048 rsa2048 +Max. PIN lengths .: 12 12 12 +PIN retry counter : 3 0 3 +Signature counter : 0 +Signature key ....: [none] +Encryption key....: [none] +Authentication key: [none] +General key info..: [none] +``` + +> Note: you can exit by using the command `quit` or using `CTRL-D`. + +## Step 4: Change to screen pin style + +Then on the device, go to: + +```text + settings -> PIN mode, and select ‘On Screen’ + settings -> PIN mode, and select ‘Set as default’ +``` + +unplug and replug the nanos, relaunch the Application, and check: + +```text + settings -> PIN mode, you should have ‘On Screen # +’ (DASH and PLUS) +``` + +## Step 5: Create RSA keys + +Back in the terminal window, in `manual-tests` directory. + +> Note: During this phase PIN has to be validate on the device. + +```shell +$ killall scdaemon gpg-agent +$ gpg --homedir $(pwd)/gnupg --card-edit +gpg: keybox 'xxxx/manual-tests/gnupg/pubring.kbx' created + +Reader ...........: Ledger Nano S Plus [Nano S Plus] (0001) 01 00 +Application ID ...: D2760001240103032C97B7DA92860000 +Version ..........: 3.3 +Manufacturer .....: unknown +Serial number ....: B7DA9286 +Name of cardholder: [not set] +Language prefs ...: [not set] +Salutation .......: +URL of public key : [not set] +Login data .......: [not set] +Signature PIN ....: not forced +Key attributes ...: rsa2048 rsa2048 rsa2048 +Max. PIN lengths .: 12 12 12 +PIN retry counter : 3 0 3 +Signature counter : 0 +Signature key ....: [none] +Encryption key....: [none] +Authentication key: [none] +General key info..: [none] +``` + +Now, switch to **Admin** mode, and generate the keys (this is an interactive operation). + +```shell +gpg/card> admin +Admin commands are allowed + +gpg/card> generate +Make off-card backup of encryption key? (Y/n) n + +Please note that the factory settings of the PINs are + PIN = '123456' Admin PIN = '12345678' +You should change them using the command --change-pin + +What keysize do you want for the Signature key? (2048) 2048 +What keysize do you want for the Encryption key? (2048) 2048 +What keysize do you want for the Authentication key? (2048) 2048 +Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years +Key is valid for? (0) 0 +Key does not expire at all +Is this correct? (y/N) y + +GnuPG needs to construct a user ID to identify your key. + +Real name: testkey +Email address: +Comment: +You selected this USER-ID: + "testkey" + +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O +gpg: xxxx/manual-tests/gnupg/trustdb.gpg: trustdb created +gpg: key 5ED17DF289C757A2 marked as ultimately trusted +gpg: directory 'xxxx/manual-tests/gnupg/openpgp-revocs.d' created +gpg: revocation certificate stored as 'xxxx/manual-tests/gnupg/openpgp-revocs.d/7FDC3D2FCD3558CB06631EAB5ED17DF289C757A2.rev' +public and secret key created and signed. + +gpg/card> quit +pub rsa2048 2017-10-03 [SC] + 7FDC3D2FCD3558CB06631EAB5ED17DF289C757A2 +uid testkey +sub rsa2048 2017-10-03 [A] +sub rsa2047 2017-10-03 [E] +``` + +## Step 6: Encrypt/Decrypt + +Simple *Encrypt* and *Decrypt* test to use and check the generated keys. + +Start to create a dummy file to be encrypted and checked. + +```shell +$ killall scdaemon gpg-agent +$ echo CLEAR > foo.txt +``` + +### Encrypt + +Use this command to encrypt. Please note we specify the key to be used. + +```shell +$ gpg --homedir $(pwd)/gnupg --encrypt --recipient testkey foo.txt +gpg: checking the trustdb +gpg: marginals needed: 3 completes needed: 1 trust model: pgp +gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u +``` + +Just kill the processes to force pin to be asked... + +```shell +$ killall gpg-agent scdaemon +``` + +### Decrypt + +Use this command to encrypt. Here, no need to specify the key... + +```shell +$ gpg --homedir $(pwd)/gnupg --decrypt foo.txt.gpg > foo_dec.txt +gpg: encrypted with 2047-bit RSA key, ID 602FE5EB7BFA4B00, created 2017-10-03 +"testkey" +$ cat foo_dec.txt +CLEAR +``` + +## Step 7: Sign/Verify + +Simple *Sign* and *Verify* test to use and check signature with the generated keys. + +Start to create a dummy file to be signed and verified. + +```shell +$ killall scdaemon gpg-agent +$ echo CLEAR > foo.txt +``` + +### Sign + +Use this command to sign. The generated file is the encrypted signature. + +```shell +$ gpg --homedir $(pwd)/gnupg --sign foo.txt +``` + +Just kill the processes to force pin to be asked... + +```shell +$ killall gpg-agent scdaemon +``` + +### Verify + +Use this command to verify the signature + +```shell +$ gpg --homedir $(pwd)/gnupg --verify foo.txt.gpg +gpg: Signature made jeu. 18 janv. 2024 09:59:33 CET +gpg: using RSA key FD2D7E0C99825F8515EDB544156DEEF5959D4DC6 +gpg: Good signature from "testkey" [ultimate] +``` diff --git a/doc/developer/quick-test.txt b/doc/developer/quick-test.txt deleted file mode 100644 index 4a7f189..0000000 --- a/doc/developer/quick-test.txt +++ /dev/null @@ -1,206 +0,0 @@ -Step1: ... ------ -Jump into any temp dir - - -Step2: install nanos ------ -Do a fresh install of gpg application 1.1.0 from google app manager - - -Step3: setup conf ------ -Install needed tools if needed (some are optional) - $ sudo apt install scdaemon opensc-pkcs11 pcscd sssd libpam-sss gnutls-bin opensc pcsc-tools - -Check the tools are operational - $ p11-kit list-modules - $ p11tool --list-tokens - $ pkcs15-tool --list-certificates - -Check installation of CCID driver and more particularly its device config: - Edit the file /etc/libccid_Info.plist, and check the Ledger devices. - Please take care, the lists are ordered in the same way. Do not insert elements anywhere! - To add a new Ledger device, check file in doc/developer/user/blue-app-openpgp-card.rst - -Create a 'manual-test/gnupg' - $ mkdir -p manual-test/gnupg - -Create a 'manual-test/gnupg/scdaemon.conf' file with content: - reader-port "Ledger Token [Nano S] (0001) 01 00" - allow-admin - card-timeout 1 - debug-level expert - debug 11 - log-file /tmp/scdaemon.log - -Jump into manual-test dir - -Step4: change to host pin style ------ -Launch gpg NanoS application and: - $ killall scdaemon gpg-agent - $ gpg2 --homedir `pwd`/gnupg --card-edit - gpg: WARNING: unsafe permissions on homedir '/home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg' - gpg: keybox '/home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg/pubring.kbx' created - - Reader ...........: Ledger Token [Nano S] (0001) 01 00 - Application ID ...: D2760001240103002C97DDD38BA90000 - Version ..........: 3.0 - Manufacturer .....: unknown - Serial number ....: DDD38BA9 - Name of cardholder: [not set] - Language prefs ...: [not set] - Sex ..............: unspecified - URL of public key : [not set] - Login data .......: [not set] - Signature PIN ....: not forced - Key attributes ...: rsa2048 rsa2048 rsa2048 - Max. PIN lengths .: 12 12 12 - PIN retry counter : 3 0 3 - Signature counter : 0 - Signature key ....: [none] - Encryption key....: [none] - Authentication key: [none] - General key info..: [none] - - gpg/card> verify - - Reader ...........: Ledger Token [Nano S] (0001) 01 00 - Application ID ...: D2760001240103002C97DDD38BA90000 - Version ..........: 3.0 - Manufacturer .....: unknown - Serial number ....: DDD38BA9 - Name of cardholder: [not set] - Language prefs ...: [not set] - Sex ..............: unspecified - URL of public key : [not set] - Login data .......: [not set] - Signature PIN ....: not forced - Key attributes ...: rsa2048 rsa2048 rsa2048 - Max. PIN lengths .: 12 12 12 - PIN retry counter : 3 0 3 - Signature counter : 0 - Signature key ....: [none] - Encryption key....: [none] - Authentication key: [none] - General key info..: [none] - - gpg/card> - -Then on nanos, goto settings->PIN mode, and select 'Host' -Then on nanos, goto settings->PIN mode, and select 'Set as default' - -unplug and replug the nanos - -relaunch the openpgp application - -Goto settings->PIN mode, and check you have "Host # +" (DASH and PLUS) - - -Step5: create 2048bits RSA keys ------ - - -In 'manual-test' directory, ask key generation. Nota that during this phase PIN has to be validate on Nanos - - $ killall scdaemon gpg-agent - $ gpg2 --homedir `pwd`/gnupg --card-edit - gpg: WARNING: unsafe permissions on homedir '/home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg' - - Reader ...........: Ledger Token [Nano S] (0001) 01 00 - Application ID ...: D2760001240103002C97DDD38BA90000 - Version ..........: 3.0 - Manufacturer .....: unknown - Serial number ....: DDD38BA9 - Name of cardholder: [not set] - Language prefs ...: [not set] - Sex ..............: unspecified - URL of public key : [not set] - Login data .......: [not set] - Signature PIN ....: not forced - Key attributes ...: rsa2048 rsa2048 rsa2048 - Max. PIN lengths .: 12 12 12 - PIN retry counter : 3 0 3 - Signature counter : 0 - Signature key ....: [none] - Encryption key....: [none] - Authentication key: [none] - General key info..: [none] - - gpg/card> admin - Admin commands are allowed - - gpg/card> generate - Make off-card backup of encryption key? (Y/n) n - - Please note that the factory settings of the PINs are - PIN = '123456' Admin PIN = '12345678' - You should change them using the command --change-pin - - What keysize do you want for the Signature key? (2048) 2048 - What keysize do you want for the Encryption key? (2048) 2048 - What keysize do you want for the Authentication key? (2048) 2048 - Please specify how long the key should be valid. - 0 = key does not expire - = key expires in n days - w = key expires in n weeks - m = key expires in n months - y = key expires in n years - Key is valid for? (0) 0 - Key does not expire at all - Is this correct? (y/N) y - - GnuPG needs to construct a user ID to identify your key. - - Real name: testkey - Email address: - Comment: - You selected this USER-ID: - "testkey" - - Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O - gpg: /home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg/trustdb.gpg: trustdb created - gpg: key 5ED17DF289C757A2 marked as ultimately trusted - gpg: directory '/home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg/openpgp-revocs.d' created - gpg: revocation certificate stored as '/home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg/openpgp-revocs.d/7FDC3D2FCD3558CB06631EAB5ED17DF289C757A2.rev' - public and secret key created and signed. - - - gpg/card> quit - pub rsa2048 2017-10-03 [SC] - 7FDC3D2FCD3558CB06631EAB5ED17DF289C757A2 - uid testkey - sub rsa2048 2017-10-03 [A] - sub rsa2047 2017-10-03 [E] - - - -Step6: encrypt/decrypt ------ -encrypt - - $ killall scdaemon gpg-agent - $ echo CLEAR > foo.txt - $ gpg2 --homedir `pwd`/gnupg -e -r testkey foo.txt - gpg: WARNING: unsafe permissions on homedir '/home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg' - gpg: checking the trustdb - gpg: marginals needed: 3 completes needed: 1 trust model: pgp - gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u - -Force pin to asked - - $ killall gpg-agent scdaemon - -decrypt - - $ gpg2 --homedir `pwd`/gnupg foo.txt.gpg - gpg: WARNING: unsafe permissions on homedir '/home/cme/Projects/Git/ledgerblue/blue-app-openpgp-card/manual-test/gnupg' - gpg: encrypted with 2047-bit RSA key, ID 602FE5EB7BFA4B00, created 2017-10-03 - "testkey" - File 'foo.txt' exists. Overwrite? (y/N) y - -Step7: pin on screen ------- - -Restart from Step1, but skip step4 diff --git a/doc/developer/slots.png b/doc/developer/slots.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2a9a030283d2a684ddda0bb1f96d031bad5b35 GIT binary patch literal 1007 zcmeAS@N?(olHy`uVBq!ia0y~yU=#ter*Nd2`6cg}_uBy#X@V3v7o{eaWaj57gkM0l+Dr6<*mFX!M85o%;7+P8xm|K~c3Mq@5FfcItc)B=-RLpsM_pa~l1ctVYK^qU4 zGym>C!XwGJZh}|H zVPQSN!8JipL_t}@!7ZTS%tvr=ojc~lXe4%O?whZ3 zPG9?c?(goU@$WUdAD{mE)kn5`%JGjcbVL-A7arO7uEcx#fh)2l?`*DCUcWcZ8)ZPh;K41O%`rWLT-?Pu%dcD7tb7M~{Q;N=% z6L;p8zq|jo)He9t)_{E>-mS?S0~&f-H(k7C{qjz+W^}IY`?%}IOXK9S*WZ8iQx+JK zm6FLdI+h=bcD||A<W}x?*3m^+3V|Hf1Oi%aZPMba*ykAuxl@BhUWndk2eN9=)Af=8SHS@c^Bf| zTPK74u;g1^c=`J^-)?;SRlgbJxFRF(`?>Y6e?CwLny@jzZ&{R(_x-*1n;yo4`9IdL zyl=NwtTVOP56r)D_15`_Z4q*_K^_*_H?!LG`LFZE-AV6?OLQg`gS~smymFVdQ&MBb@0OyC2E&u=k literal 0 HcmV?d00001 diff --git a/doc/developer/template.latex b/doc/developer/template.latex new file mode 100644 index 0000000..5749c63 --- /dev/null +++ b/doc/developer/template.latex @@ -0,0 +1,516 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor} +$endif$ +$if(dir)$ +$if(latex-dir-rtl)$ +\PassOptionsToPackage{RTLdocument}{bidi} +$endif$ +$endif$ +$if(CJKmainfont)$ +\PassOptionsToPackage{space}{xeCJK} +$endif$ +% +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(lang)$ + $babel-lang$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$if(beamer)$ + ignorenonframetext, +$if(handout)$ + handout, +$endif$ +$if(aspectratio)$ + aspectratio=$aspectratio$, +$endif$ +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ + \centering + \begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par + \end{beamercolorbox} +} +\setbeamertemplate{section page}{ + \centering + \begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par + \end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ + \centering + \begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par + \end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifxetex + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifluatex + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifluatex + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + filecolor=$if(filecolor)$$filecolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + hidelinks, +$endif$ + pdfcreator={LaTeX via pandoc}} +\urlstyle{same} % disable monospaced font for URLs +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +$if(geometry)$ +$if(beamer)$ +\geometry{$for(geometry)$$geometry$$sep$,$endfor$} +$else$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$if(beamer)$ +\usepackage{caption} +% Make caption package work with longtable +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% Avoid problems with \sout in headers with hyperref +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +\ifxetex + % Load polyglossia as late as possible: uses bidi with RTL languages (e.g. Hebrew, Arabic) + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\else + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\fi +$endif$ +$if(dir)$ +\ifxetex + % Load bidi as late as possible as it modifies e.g. graphicx + \usepackage{bidi} +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(csl-refs)$ +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newenvironment{cslreferences}% + {$if(csl-hanging-indent)$\setlength{\parindent}{0pt}% + \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces$endif$}% + {\par} +$endif$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ +\author{$for(author)$$author$$sep$ \and $endfor$} +\date{$date$} +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + +\begin{document} + +\begin{titlepage} + \centering + {\scshape\Huge OpenPGP Card Application \par} + {\scshape \huge Add-on \par} + \vspace{1cm} + + {\scshape\LARGE Ledger SAS \par} + \vspace{2cm} + + \includegraphics{../LogoLedger.png} + + \vspace{1cm} + {\Large\itshape\url {https://github.com/LedgerHQ/app-openpgp}\par} + + \vfill + {\large \today\par} +\end{titlepage} + +$if(has-frontmatter)$ +\frontmatter +$endif$ +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$else$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks] +$if(toc-title)$ + \frametitle{$toc-title$} +$endif$ + \tableofcontents[hideallsubsections] +\end{frame} +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(has-chapters)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue +$endif$ + \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue + \printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/doc/generate.sh b/doc/generate.sh new file mode 100755 index 0000000..7f8716d --- /dev/null +++ b/doc/generate.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +NAMES=() +NAMES+=(user/app-openpgp) +NAMES+=(developer/gpgcard-addon) + +OPTIONS=() +OPTIONS+=("--standalone") +OPTIONS+=("--from=rst") +OPTIONS+=("--to=latex") +OPTIONS+=("--variable=papersize:A4") +OPTIONS+=("--variable=geometry:margin=1in") +OPTIONS+=("--variable=fontsize:10pt") +OPTIONS+=("--toc") +OPTIONS+=("--number-sections") +OPTIONS+=("--template=template.latex") + +for name in "${NAMES[@]}"; do + rm -f "${name}.pdf" + dir=$(dirname "${name}") + file=$(basename "${name}") + + (cd "${dir}"; pandoc ${OPTIONS[@]} --output="${file}.pdf" "${file}.rst") +done diff --git a/doc/specification/OpenPGP-smart-card-application.pdf b/doc/specification/OpenPGP-smart-card-application.pdf new file mode 100644 index 0000000000000000000000000000000000000000..841c172ae6333932bdf4c086bcdb7c22bf7ca647 GIT binary patch literal 1092398 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

1Q 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%0A{A=29-T$6xM!N3e8rrjb@}Q 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

hs3HY~!<|obGs+3OybhdxTMlq?H;;%eUti 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%0DN!)3NGBHJceG8eI0_G=%32sz-=DnA=G;q_ z_2vAew8uEfk8W6U;T^cwjTfi2CH>vzGbF$AsRu!^vjy8zRu3G$aUzcddtkL6G+62! z2pIA71$WxH{QGn&;nU%v>2t|~718v^&Nb2fYqQnC&`%Q-kZ*U^nOoCns-~zj3DXm7 zgOOn@zOSWn+P8@&DVv~fq%RFtAaNTSINOjxJ(8Br=cvn1dGz@R5-retA(tdP0ATi&ZWI0%lbyg0PbWY^(Fr~dQ;TC)<`QXDM3~s%t{ACdidi0 zv}j|2H`y?uWbT4@gUzaHf1g-ue9t-UCSIN8`)wPz_t}yC`Gu8M@`U zHw16eVW`7?^lizU8F9nPuU9eWB-c)Lz&4zjJr+;zb#l%pQ|1kMJez5w<(7Mqo{odr zW17o8pqJ9byuQ}@zNwzDoECjh^?5W!CW5oGt1qFXNUH(8Zgwq)&~Bi?A`BPR9FqEg z`*}SrcJE%(Lhkw8NgdZpodVj+#7|`Rm9EiS$kX`CLEsHW9=Xk}bA_*+9}%v!_4+y! zC66J!xaz3_8)ctgPH;UL5HEXvC2ANaKtDuUG4FeDSG&qF05`O5snITV1jL6Xe5Y&Y z8}huR51ttn*3*SrY>75z?08v7!rw9titL2! zfX=c6Pexkary7$j}j9S-CVvWU=E`BkwWc;Z-EleIxXWB zMbO|lC7_E4I6FmLDV@T6s3hTowx?!B4Lf#N?+k@dwF4!2O@!!*L}nY~C%i$%3jT4a zgv!h)`qn4CPfEi*2n6c%ra{K#L2pW_-UEXS%9UK@@5Xws0Iw$#EAo!!q5nulHt*1v z*oupre%X{vi6X9hFLph+rv0)Mx-#8Y^Qpc0pZ4hPOmvhaA!ofUhe$WSun3pOX3www z)1bIwl%yPqrU@=LUD6u>#49#*i+P*1!p16uC(?!y;;R*swhL0HCgj!(GR9A@f!v3O z%_aj_p=f5eXTE0Nsv2$oM~osXJYaeJ-d zjCJk%oDVEpAw`+WRJwLW*`V{>G@tR$&G(L0jZ2w zjN*Rz^`dz)*?ym0K440NJOT?-6P2E`ACI*JA(0?q(VCom@&0kcz^%Y1N>Y*ygy2B9 zXSQiCJKHdKoJ59rmO;Z=`=hNR@*sL7uYSpM!mmvxF%}{B=3j?c+GrZo1fueC0_A`{ z6iZag3tiHgfd7>jL|$&$*eZ-5uL0_U*oT6aU0a1rES%9m1n;}k#zaOHiYDn;DzNVz zlY*dF)*gt-!X=Be9_znHcOG0;Ph=T)n9*oY5JNb%ypv-uqJb&_CT}pQFR=0j1J%G# zQEBHH12zj>-b5kc`+MBaU&dh*RUT?2UmcH%v?xmDFjgc)uh-uS%M4qdC^p66wx10x za)pT}l`mXTW*)Ze(hQskmZ+WH42pNXe9HutZH!M6EgHv(hb6w(6~JfjAQ1e)J+@G_UZ7t$yM3 zv6dfV#B=rHy7s34mJy@6_f?FuZpiObgd&BtJmH;3wWi_(MkXLnv%4(iDeU!Yp&A-C z!_5U02Jr!e@(PM)t^5qOxxcXf1WYVY1G{pO#I$cQNg*Vb8d20^6CBhj<1M!2?asmr ze{1n1Q~7AuVAGZsRl6Eqh#J71bXyHmagi%!BM$rzD0T^OaKCbI#tsEP{=hN!RH4*M z9%M2*n-mYz_Qs`=NtYm`=(q9rK8{iSw3Tt)$XIGx!mr2fx*0!o>+0W$({q}2J560u}ViY zA%Brq#0tA|UjnhQPF@qVluEtLp*0p7f!0DCZRSnaSsae@stl||Mw9>&T$wpVYcnqF z9j^S>T_iKZbZXiDCphl@@LXVi5fNut`@Xo_u4z9a?dhBp6JK-x4ExJbRd2?}&CvyquT8|S z%H0n$_{L8t>?@r~aLAc@Tg*W@R#s_{%T{L412YqIejQV@*VBZoePQg?#R^M2zYCw#GY zOl7!^7e6cDa*Je?E_-tGp9aJ369R;eIGGZ{vc9$>?p03jmOhJ)6|Zg&r^BJ;+4 zLyQYhTDsfp((^Vm;Jzv9!!&H%cuKh-`F_a|yn^F-Qvdo^-}4?P=7Sc+RHO39=MN28 z_AM1%F&i~c%&~Q$acHF4@RgLh03S2oH=Ec6$~~dsO2I{o8si=G<7dnmsJH^Ai0CKt z$B?E;KeUk(>*2iBYikivnTc5Yq8OieM#AP(0v3@Z!Q%0_^Jr*cIJ3srSPjZ4k{4}+ zaqy0Jcz~(8oVhq11?aWg%41fb@VTY%M#jFdE`w2_1|6 zDu&)4^|y@(+as|&o$v-gd0bL;pxEk)&!fUut|5$(#U5dau4K|Tv|jJy(?027$MOr;b%v*qZpob#r-j%b>LLkfez1pruYeB;Q%DmuMI-7R3Tus2?iOID-3GI6DN~uvJ zj6;!`hd{wE<$X{}QcpszAw!+fVYlpd2=h#(k?|9?zGAI~!{73Od9FqLI*q)%w5quA z>dGBdo*@)IeVD#vaFm1@+4V5Ar7o<|7_SI><7(}-%W>7noNHpy37+k4feP}NtF;>F zyS_vIXr_e}$*vQjD?Q82gq71ns2jepMO-aQMki*B?5;(kAy=Q=0yKH^*qINq=0N$c zVyvJh@+sHb9@y7kY2pXMXYTGv&C)tNUW&f|YBEAj7*#v$O>zdG!Ga+fU7{MoNV0sL zyWl%(`%ML#OevgS+ji)%t*3hcw6@6JhO^c$m?ztmqk3H@M|s#Cu;cyf<5#$LIkw66 z5vF4qz94zaq-}+F447ZWv&3|!ms2hy_5-RA>*GLiZ~Ev{QV)!_dWR2{f8hrFk+}-< zFt(C1i-5nt7WU|23Ij2q2;J)D`n(kSgHD!Tpf>iG&8ASY8hjche*N1HVL@ei{uJPD z8wV8D)a3~ap$oPl=e^CQt@n=F^;Hm z@C@)Qn}R(KKX0fC9VCB3lzpI+bFjurpjv(9^3FB&$RDA`l2 zmsB*{sC{j}^Z;}JI?o7&iE6^7$~e1 zB=43OGVojm`E1QqHpu7c?H{(bcFmXPWe3I2rjiLVj~J8lJYAGwHUmL(@MgTGBWB}HUKUvHq4ZrWo7 z!45Mt2>f!Zo01qYZbYGdM1*$UEPDUU{3)&Rb(9cJ{3_HSacPAkhUDZ3hdA`yR%O_E zaw(l3u}5?cE8?=gtN1T#uFaY$S^Cl{j8~4*)PIH58j$_+YJnrxU-hq|D;w|>8g(1E z`W+Yv`k;k@8J~O7QCe|2TGyTD9mR{A>7L(}*%JxfLwH2~Hv%omoOj)R9|7sJXhryO zP-E(gn6y%uJ8=uKSU=2yuHFpH1>vMD94{1H^}`{}>X(=zrIgOz*JbZIjudCymy{!C zTs?1(&6`L(&9p`5Slvg0vFrc|Op1#5=5RLnvbgHrx1yiW;w`DwTViihx=#fQA;hB4 z!4!uztR(2w;;;{gfLM7j6zx0{Wy(coCS}C&ZmAgaN;W#I+H_f)Le%pI64t)Mr-gqP zRV4A;a^a|O-{y@~IND30!7bE$;?mK3F!%Yit$5*w7B3Ep<$D+LGeg)R6rO_dXi1?x zT?qg7eN~0>q0_aLB~OzD?^k4dBz2NoEuT(SdaNZ7ie;cmQAybZCq6h=Ma{lz9tq_E zveGP0e~PpSGkVCdZ)2y=E0`a%Z5Wt}8~@>7XBp-ixP?R5UMbHrsjD}ux;Ssq>RVx= zIr|Y44*qu8OV~OrLgtYvy z34-(VfvurUkL2!8W5oVNd{B8l^X^g^ieh$^nNiQ^g}q0avzl%7NSTkBbF9nt4~#x0 zGf~@8gb9+b3Mt!6Sx0ZZ+X&-76jlh(@0t|{xuyxFXM8xt#o2tm=O27w#Y7C7fT--;`;QOwnRrv-3rIdq| zYHp?h$T!bP1`N-Ia4AcNUx!1NIj_M*Ph?Piuzp{6m?1g9;o})L9B}YfQ0g#R)3ngo zRr+G$srTutBZDG?{oLrCJXGjDTX^R)+?fvo@V!vK!;)}cIxG-Mxax^AMaj>1?$t<( zBfdzfMyx<3G>`;91dU7OVlp*oDc8gpwqv< zBV^NjMVhb{;jZ0c&Z3D}tt(hP7x!Z9hl593xG*P&*H}VK!&xBVvlrFM`%VV4!CbkK zS$lYZ(A9LQQFn74z77|>oZgwpF^AWyo&!>(gG`BLG8oQbL1 zwd?S%<^BDat8L2t1%5`0Gu%x;XNAPToN}zZSnFpr_N@-38uOe$N>#zkiQuy^tzu_t zIMRwv($1VQgpJ>`B_UaOikW=g8K#%3N{rt1vZImI_Iq>={YR2J>3QycPKSd_!nQnk zjAixCcDrjQ_tA4liAJ${50$DGPZ>q*Q$}g}1ObIFi-T-Ae7ocM zqpF8($wt;X=NjVG!#x?>qR}%~A~xH*7ZP#pMa}#45o-ImBw<5VK8w=~mep3bI4j@_ z+0U2BtD*R;W>I?OLT(#tsaT?MS(~8DIIUjCRwh?Kc7ne1evurR-gi_Hrgb^JEHMc! zuG&J*1_-__T$RDWWux=YLpK#xkh2wD6piP0?qx|&dBo!|Mq6avHw_2IbA~&Us&tVo zj(aZjjR_1w5;yu|GpUxG_S^EcYm3JC6=*o%6{WMQK@7n$AiGJfByCc4G*7~P`M$y3 z623PY_YF(z)Z5((F11%DnOIlDL(vAv=hWYEF>GZOU7N^!&4uooQ=?^`5 z0=FdtD~f4G+x)LS$FZ0^=ACfftSC!m!%O@Ny8YKUvc;cwBM77;9(F&Tva%M`ek{nl zy*2PY4>=pejYG9`!Zzy7TH5hG2{70jU%DxWzg zitE`rjd*P@iL*z6T7}xQ2$R3fRL59((BabxpL+Ui!*mEn2Or(rR^8t&AgMbaTAFbU zW!~a6q~r6mkx$8{l$A3@J(z~A7i$glef5^kIs7@SY=+7uSs4}dnjWm>rJD$eR%BIr z`HyF03v#fW&m<1*70p_M)I3@nO5T56cw1^C`CL7cIu{ly%w!Sox$vd)70pnyLP#ly zb!Q#~L6!2ZQB=tY(dOOZo%{F|Pm4`FX#BhvA%mTv6Y86b&v+!_e`UDqv@))qztmIZ z{*5ucT&Q}AY>6}zO+RHjTC@3u*_7ymi3nSITVy1;_r+-p8X-xg^ADB7f>;b%OvL|t zIiCPfHeFHqB-;1^n!7CeV48CFT1nO#i~8Fs4W;?wT-Gw9@Q&td8}1uv7Y7}t0j3|s z5KUlxfTvkbJ><$ z$Pm}DxW%}igNnO3s9rVX++e@k-I*g8iI30`_2xF!M;3=bFc1n2(P*9g(^olwzOjnm zn1M`@XKt4JWo+8>de#W64P$xz;p=Y8QK+@iY)C1PCld0%qH6fqpmvh2tU`KZ_3*k+ zB9hvn$A95bVz~IZ4@*7DLfx=evzj-|cX?-$&ulF3jt60DA3ZO-SKu;E;B@Z@RW?Um z0oiFs3f^kIUCxh8T=#5o<2qPR5(L=X)UFiUYX4vd_FI-c2zc5FYVIO<0R(Zir8%Y;`eCm5?pt_ zXhdRCxH|Ti@myK4TwX|-jkoFqp{;IR<+kV!ANjZtzZS-$AAwNo(Iq?Rls;&E#ba$( zS!y=n|J_a(m%ikZ`K#hE(+I_-o`Aa{(Y>LO(y9@#w; z&HDM02SvubRGCVppVQQ6$G0B5;OkoVntjd|u)xIqc*f2<<+N~ZFYC%c0jx5}tZLq@ zpng^MaU$A_$EZ#@XyT3xNSM}a7iqzz>(>cxEH7RxXHNFV&*9^?cgWWp!p5bKK(=~^ zt&Zs>zWHQpNM~_OqQ%+6qGYO~n3`w5IJc?G^m_Y8hQ3FjcW=#vf#t0ro;NQ!&vs9b zn2N1AUmOE}{e|UOKf@5|VSKc_uBHAUzw#1OK!$GfO z&xa2GR3mxQ+zKEnH3jNVE1d%#?0^c_Qf~HZz}^DBazuW}5>!hI-vqU%FPE})@|!57 z57yG=jw1pSE@EshavYnJd3~XWRK|fdBEbIsKk=tzjX>h7kjPDHYGdN)=}JxlfflxdS$@{s%R zu)A3<*ogMT*|j<=~^_M)RX8id2+c|i0QuQ`AhHGy=r_$lJcuEZzNpcRhtO=;1qSf!rt%B z3HO(dd#A|Pm=cV`dS48eXr;}3xaoS>^(tAw%I^uqQdaVsoBff?rRO52?9aBbp8xFr zob8f;_0{Cp;Rz)7b+)q=)k>kHrc)-g6n@%|8RV|#nM`(mhf}CWES-LE<{yH90a=|% z@$eXQIFe07={v97@(dL-?@y|#^3#SDl0hlYl_$S^;HtXl+?0rZht8F;PnE7-H~Mx7 za)bJ@kb~frk2Lzq(K>LY#M2i<@)qriWAa*@^_7CJf0lWFTm9Ws(5AoQ{kvT6E-AcG zVz1;or;(^QB==2I!5}&k(x8IoUNdV3^ga6Rac}k zb_vnF@9+^KHj125HR9^MK83=czV|Q?a4Yhsm4}{E$eNs~KzC8D+h=Z-wyaljOU_@? zHf>2w%lJoWyPT=6$XgCe`Xh#gPV^!5CG$+Ze!cM0&x@1a{;A`=VRTz?O-Njd`b+_- zMtY==*_6A|iOhYa0qv__L|vz?kA@}m6}>pGSv%9{bJsMV+BroB+PKR%6m zDee?7w?2U+JfhU6kns+9O7brUnD{cr=Ids`I$2f%1G^n#yOv zBvEu>{&=9WHe~X&iYi=$z2)GW_2t2ZB#|}3xybMfqf0l;D6lP`l>6BbERQnx^~T?l zdj%y>#J{Snr>eM4k`pXez>g@pgjPYC>npU`l(Gv(1yF|sl>cH(*JY~)1z|0C8i+o_!>c?uOay>Usw>|6z3UV^5vW_56Y%MElOVT#?X0Yn>PVtcPCHXn3pQ?JFi7A zkSc%PXylY}#1Be;*^N(H8#g2s^Aqq@^TMz@`I=~}vE31W-cZ_ z2a{h4G^79D{li32Mkz#dXgDutIM1-uV;=!?c!K)Tx+Jjvh2fv5r2f{&ac*B8hdh2ZMaDuA zBaJzQbVi&r4}xqx_9A}nvIw*1~^+%j_}zEMK! z=(%e>y&!#6z%Hrlt|nfVhPQPJJNK#R!?eYbt3OK|-pj{f)qD$W_% z_hk8YDttScATaqk!Vk(e^CL^epInH;j}qUN3yjT! z3lGfS@b5Gz=!^W45YNZTxi4!Z;1`$2(Fm4WLcwS>WF?8c0J;~w3 zFLI@4q&LzClm2CimM*n<#hIJ=Gr1)Gw1+d}Jwh#MkOS$q7X(}v_W$7Sy`!4m-hRPY z02Kr)ND~AE0qIRZibslc6$R-cU8Dwxlu+a-Aku3HO=&7kA%Judq=qgaH6W0Hp-D-A zK$smozxUw0bJx0aXU&>f_n(7jefQo^`#fdu?2=X=wKgE$O?cKSzRe*C6~AjX#x}7I@35;Up1i3judW3mwNMzrnMSh~^2diA= zQ!374Exo4wYH`RAE1$+#QK-!EVx9h(C+H6e@>sYS9@Rl@nfr=u zl(H@lQc2)!6&LNM5E=;C7(?{p2>{9-UUAs7R*6UAFnHAbsTAk({s!q{Wd0g_e0r1r z)X|vxXb;Jx?7m8HuKsU4TZm$njJ4Xb?3>- zPif!Aspk$Gbr!E#KTGdlDPG0HY5yhkLxQ;COJ6NlQJolcf{yp{F|Ls0W&5J({zYU} zX9A|~x{pU=EDu!1jC-{ayn3}dhJ1tz76bFms;PeCnd{K;?N1% z6B8WAa~j51AwA;11u1c_74A1u(v%-%$<3?P$6id|*PFOHR6`=?#s~Enm~B=TYa$PV zG?mqXd0{>FOG;XbMn?v`-ZKx4=1!@6ea{QRLc+PtK=h@1>N_BQgg~RVAcBpVs>}2bPy1#QDKghxU_Dw1Xz>kH}c%}%;k1c z`U>_T-m}OP^9O!!eIClz*=Yl-?RjFJWZOVz994P5&!^vG^NM3)ShCVE_prQU$LLz_ z+9Zw)w=BZ8=<)1ahvkVe*ezj4ZSJNlBh~xjKvXNWeY|u0S@MOT$GT|_q^TB~xDk|e zN&hGc<6yD!G6SGztI75qu2Nnoc#RA^4tI{eu>Y8}M#wH}F9T_`yOnl{C53;qJ9Fso zkxC!u5RFBedYJ3q{hnHiyW5|AsqF0MUK}=2d4q7x?vqH29pAoeSX}@U1pk# zGyF1N55M`$-^C890D{IvizbQ2~nQEmSQDW&IM^@E|i2oa;EJg z=fA&%aN42zAdvXTEZJNu!NY;6y_!cLx8)+S$&rP}Ant1aiyc8(hP~PK{J#@`KxjXK zoAgIYZ-0;usFhA)xzC0B;_*ZkR2Rk$SLa8{99`6*YuL{DxY$LNB-nQLx3SSzPx#&? zvWMQ;?ltw&815`X+%E}f7wj5cKgPAUk;hq$^uNv9w{>2mc0G3I{z%Sdr5tQ2)o%ve zmqgB(QMG$98(_o#gD?GcUj-NBEo-4Ms*04@hp6AJ>6PsgN05vqp~PZ^ z`SToW_=t3}c6~bG4Xmo>{Ow0rVI=%3^0K@BQm?5?S8v+aI$QV}*o-+NL_-ht=s8+b z>ePGBScz*fYR#~gYq@@+MUi2W1G#Q8Q;#(*+PP_`OlI9W&ny4~)@SU|v~u=Y^z4TQ zOb=E)6_aamkboLu3tHz!vAE3*Nry#~Y3}&sN*9j8>Nmv=ug}e1?DUkGA7$Q{dsyK@ z7Bs=fR@u(^Zx$%7Yq@%D`WIyo+ z$+Pp6lNYhOPQa@LMcRS=49i7rlp7|T1M?D&gHd4=&l<?}D7itH zate)gXfyMV;ph1Cm>y>+f5^jB2By_(XA0W;yeBMXVSh$-gEc>kZe1-W@y>>#;;tx( zbdS7@4m*RYdfi1b)Z)ZLBI<}%A?~hUSCoscah?$@cmSz1MGh6zSvcdpebP zV1|y5(6B4OnAXmVQz1%pTO^PD;;#H+cWKpd$>1nNC^MnC0G-^_fd0Dt>Z|n6ArM?+u|^9vpVByFRZkdyo;2DrCli289k36mE*xNRgC!+ zl4eD%+>S*z`a|s|cBgq#`3^j9t$Z^hKTdYz(y}Df#$2*^&R}LQds~RGJS|ctJ7fut zMrb+hox@g0?Rrb_kt2S2{dEYPHsA648sf4Ag z2x(QCoQ9wR4OmLWrw`F!9GpF+i?!RvbPRjuZy@5wcqVyi@jHy9L3|y0T-It5vxV_i zZJPO}hFqPeU}?@Z)tP&Yaw)9qM34pC>tno!%HdiEF-C-vINn+rpf_jDfX}b*7uI_ay%(SlO02 zV$*-7_;SXToppsaRFqm_O;r~=#?nl?HB@&c&Zx~$r6d>Btch13GJ@5$?XD?8lT=KU z9EYCMc7F&M@MYbFZuBDP=y+r}hCCk=`*uxcD<*Bpk?xxU%L-niD%C=YM`-m$2gs z8d)XerQVZVIsfi)hf8&HWyg?g!jybmkCPr&IBwOk0ihx#$``DpwTb(gCBgjQHTh=N z0sv1Xx81wl63;1)&g%{%wua{~n7VQn>O{yUEhwf0lfaDN@T$L?XDFuJC7eR~G==oTmM4xm75=l5O6ONOa;5RtV0NFj zix4C)vfC2*g6kSmo?UlMK12eRX1O;(YHj)cd^s^Awvxu+ZJOI?R1TiagX6)^(@fZS z+3~5XoUjfn=I0kXX&mnnq}YA#n;G|Zg%~~ISR{$Vhs##LFXSishNqI?L!ts&Ti~2NPj(zW!mW^JTL%`gaz`WwnMXIn%x%sw0a% z&N%Ic2D}~?DXd?tcNyze=C-?L`r26&yA)uW)T$(6{c@3nyp6l-Lh9B^=1`Hx!97W& zBD%Y;={v3v?Jp`SuP=VBYH73E&8rY}VoSw2FYrWHA{z~Cq9U&RCv+a-t&T5>ObgP) zwOCunipkb;$8jNw?qIBXIkV>k^Pgcf7XpvD=*H{II zlEXv2fU{|pG@G^RzNytZ?hou%{BgxYTfxZ|{wu3)c10;aoxKApx0lpJmlsmqanjRD z_eN?OCKNjnSJZJ23>9icmtr|ix#+uh4OHL}FY?#)v14Yqc@?Nde<-fuT^+i%RH5SQ zb!!PdRTovrZ3R$5X{<8wF(e4zzGhQeOlY^up&2mx-szFEP;-|ybQn{%C}3Z{yZJS( z)9uBaMRQtgrAt(GE>`95otxw;{pVG6^iG&h3*f#KS*`4~e%Xg(dmGjhsVp#)e7>=* z9w>=Pv=P0VVWWu^*0L^g#_KU%NSq)Z+x&djC92|R9Q~7;@W2=F#^B*9xnlf$_k&K+ z2iE!PS>Cv{vDpOWS(&(HVh&-%;MLQMsXsf$Na@vdByjt1EzhXJkXnyi$_cQGGOEC zQuEBO|evR1rM&*yrYH zg+Ey_vvrEGgM2gd%7CS;L|t%n`~6gB%XPiZilyC|(mnxiT3i?Ql@7g~Dvw=7hQKlO z%YUootVdpVuGJo{9xR;KExgViV1^&?y16!Yxm!2c2S#X|Hh9fFCa5S8Jm&f@Ul539 zOD|jh$Mc7jyX7DeiRvIqgRor~nYVo9e41rXU5F1`M&%xMPkxHd zOK7_Y9p_-vggDX!0ZQBcH+r?l%>PjIyB zO5F;t-wdZ5C!fGzl9;+Plmfs}`7*n+Hqkt0GOY8b+PyYJ_Etq=E92^qDD!6X4|3N@ z_BwWh`%8{_Z>~&%C$|Rj4KH8DuvwS~;L>0-*T~5FE#zu@p-DxmOh?1+f*6=CEE|_b zpxdyoP2zdLnl;<}mDu_tpQ~n$35WPQyd)BdvMEO((R><7&X_tO8hmZ7g6!jtfLY9H zyV7pI5+Yu}uOk&}lc$%FIIY;mM2F+@&6K%CriVDj5R6>jWNlGFIAvhV6A2zBB|PjX z;TA`Ys>=#PW18gGh)>yOzgpb3;x+25x1n8%?o6LrFDiqsTCt#Os?{xUhs0L&bO|#` zc!p!OzN^9bjIcszNO3fEaz_DOkjw2IRll|B6MD zn3_BTk-4K?4+*^%ou@W)UseAe92(8NN+v7b961DeV2H`wsLLu%bg4dkJQ4{MEty#g=4 zKhXDj!@{)a(YnJWXFMN%6&PjMl7}p`(>dsgv(Q5ze`~zt87@+?S5SN|CTsZqchlP? zTV~)*HAMKrAwcz18=XT^mXbPH!N+okh0T=z3LYc@aKHwCw?5|c#V!FUc^HVysU3o{ zsPYI?I|B)ny_G1WZo-Z#8fvkkE+ocC27KIauV{iWwPxT9pn-5uq)84_us4g`AG6?E zGMw$jXB>C;Z^D@u`sl%R9bK6lwY9ZoG=;=AYf;iQx*!WfGSl!8Ko0fl(jvGWmgJXrk+n z*dL{^a6yNr&`}`Gy2mHu2X$#wO1K3q zwAvEw1%W&P3}pLj0S2rXY;guFPlXtQa9pHoph3x3N`vyj%#HpQ#*3(l7CKuOQKEKE z*`*az>x{@9c4Y&KuI*C+sLj^z19Mr5`nnHL`unoP6U!xtPc1<;7fI7~4EX5M~p3}M*4fsZ|n^ZS(& zl4SGc;^7RaURd}70)R)9X8xlnFz)Tk^AdK7_O*H&1AUtDYp0$Hm)L~@c?8@ceT3|> zL#7bOwWWz#lO~|nLWS1_DqD0Ep~wI|+D#Opq}o|f6Cn)?Hb$^x*O`Vp{vy*qJW63w zb4bR%wnZf5M8+HFNs95p;civJV}Pe)J(m_` z=~@p%I48!dVV5th(i9deSm=u-*BZ2ie1^u<8USVb$z`Y69)jFHT6=PW8D*~H)A5kN z$iqw-gAt5zTP|B+%`WONgoU^=byN1?fS7$PL+~)Gq%(y-RuwY+KI{WiHJ0y1-ll-A zRFh+0gotns${@`#^+yURxa8C$WO{a5;{oJ=fFCwa0?Fl{%q%N&Qw-Jm5;)$OxOQM{ z4f9;Ofe+odu^R8V@P#=*;vU7b0@(m0i3Gw=R@8)Dkb3az!*YQ?z$?-UZa6@TVjg=Lyj-0Z40aKo3qz}*$CO)jAHE1z~9wmh{Zf18nFj>Ol17b3AU z({l^P4Ls2`M1op}p9w69(s2dQ?0dlHG2kJw!IDxyVf^Q*b9{K^`9ehj8d}d%+$^;h(zFGF*Ob@E>Shd;djlf8LW<7 z|I&&H8lXgz=$Fi>qKXC(U6uU>p~n+^6Q+>MT)vxH%*8< z*K+?`u>(ZBhrb8;NW@U_4;$3CUTi+~^eDgwG}`$HMVuHpn!*mj_0AuZA(+kg2~dW(mmOpSjQ_9)AP~5Z z`>D3;d99~{hfhauftdB;GdD;U$zRslJ}EFjdNj_^*!5KHxEKwq7+gR{D%$*(b{o*C z?vr1q;Ka4{(6bwO=tEKY?Rei9g;$qW=5CVdRUQEvpLyB&s0+LQZdjPp?+1f7zsLmH z<Wox+Tf18< zY!MV4d_N`!usa&X;E?zHXkhO8N#i^V$+MlBGcaDkpu&dm1CVn}sl1;exz@@B3=g zvn_A|P0ztJtZ#Yjy5G$5TRLEhOvSEDPlp+1R2?IAX=95j0U>(yqT(uSAN9A-`u0?L znSzhP{btsp@^r!_B7v8{(X#ri+Z4ib-$B@qYR}xzo~v{N-6y$70v8T5&}_+{_yY8J zC57G?gTdJK_@sN#u>=nT@!+0-yWk!6ElMd8e~Sj3au2?N9~S3pW=7M0RV9o8>h!Cy znK0mUw;9<{{=f#*g?5n*3$8#ncK>vKNa_3+O(A~Me*V5DzB6+p6#z+ExFqTMrIimc z^;TvS?$BGogR>Yq<8BT>dYa3(60pX)C2!CGSZj?_0%=i+x{xUdL>IT1S{5)gh>_ux z*fY}%FueD$$HxfhiZG^i5P0LRo@^05?w z3cBcwhejtsV3ga}hHo$+38Z~T@teU%)P-8|=*$hdFcwHV1^J1YS7}^z}I$VT&+Ivgt z(&gpl{&cswH^}B^ zDR$zKozW0!hDdb(az=LnQ3sAk^N# z&owlNkh-DRsymvn-vu$*+jWEy$6pzbM16a; zWgOP4rn%&etzLZA`thMZOmo->JXEfF#;_`Fl^7fx9LJ}Z!V|x7k<)h&T)X$_*DYL= zKPyn6Byem1N(p=R60w?{)sB>M{H}u-@=)-wR^H`6j~t6nu9kV-053h4R!V49=z{{l zOY@6@VX5;1#@1x#kq5EF8`#w#y#PzV;)68QU*Yg1P`PE%1rJ(o%H(b3eM%!D8x~d> zq|^Tb#<-~kku}S@0leu+%+1MJJ%7bB7ILiKCx99JJE>r?#1G0NMTSYhy&jsme^P>C zU!iW5mQR7gc>6r~54j=J^Fo?K^{T$RuV{6)iz8a3@9EwyaaZx~Q(U{C-o}^z?1{KB8TN$s5`QBLz zjvEIL=g7BX@5wn_$#$E=bEnC9ws%Q=YNdaLr3+%f@$%`W9;3VcmytG^+;mp&Z~Z&5 zL?@4tqUz%^Zy^t2Q8;if*^7WOtut@k^r0YBF$CSfhhD0svU>%^-C51I*ac3Se@RGf zl96@;+*{~e*-Fpz=*8!~W|tkcr$ccw&u40R!Arvdq61=jnEsl>H=`3NtyDmmuX!Un8%4~PgWp{8yB3zQoa69ZQUmdss4nX`rmI$tli`gxrH~xA>t+dV8&#)GJin0%UC%gNbqoUkKp`S<{F0dhlS3=1!pablH%(iEoiuTSG&GuAter zDi6J~K#9!aw;AWiI2b)ql{7L`SB}?o5%5k*`@&B|ovm)9gS?x&i8-90>O^@+nci5* zm#~2C&GbYZHnYzb=W@cZVN%sNN=)H4GmVa^0?Nt)%k_KYqQWKYr)?d1Z&MqvK2Y0F z1W5@y|`=pE{B;-&w*J9hm#KfE$DGfGZ(dnhn{Tnkr{+gr zcYmxCTf4~v-V*I zc=-CxT6b~nskb_@C^Lp!N0Ae67VfDjzS3g-e6ED%^6*)Wi4LwdELeph5Q&$GezOUN z9+#JV1a0AMz7{SjdLGg5k34vVD#~h!ld~_5e)&X8q<&|$2ssO`0?pftc5Vi1N?^7? z-s#>m_2C4nv6)6=z#W6Jk}5A*g#!6`ph<~qwZw^P*QqZ6ZMm~{GA%L?r8TsK{Nk$; z3w@VtQ}^|69_G^2vhV$O@fJg!oTd$*a%aYi`rp2*+BsHYL17>kB^?7~xh^U3ja_5? ze9%YVSGvwc1E*zQFbb3iU;!_b9N!>=*t~6yJY6gsLdCv@I@CqZn9*P9 zWw(SRkL$O@YCp~mH`TzNR3>MW`1k|Yk8GsA;+dwQp^4=jtAmr~Vq{sEN4VmhzwUm? z9kP?k!=v%NDSdG;M1axD#>FGgI72f1rao}^Nr0jYb z=;?XD5^IEv$0SlVrieS;UZTG!a{w1a#m5-RwHoQv=yW>9``kyGk0i+ps!tHX-#v~$ zYrWK0{x)TtFEz9G39{|k*$5T>TKRHquI?+37#j)uUpUUw#k%4rh7ARgS*#qzY`QJC%ca+gXmddad_X598^k`2Wus*!24~ zEw7%h7bN;0LG6RaafD#sGkD#g5BmZM1fDYHz9E-I^mw#yF8>%YCGCbPyZCHDhBD$*c_S^FPq*rL)3w) z)^Os2M-XvgWH)-ul=y489yUDDV&$VBp>o={r{JXgep}sd?BMsE7m~D9wCibQgI;Zt zx5Z#Xqa3f=G}QvA?&tuu$5uv#tBJ#$o{(1UJ2@8!5oq|nbf{mFN%f0j!ghZQ!{#9_6)1MFn(PdF6Ow8hV6=5D#iIx6Q|FZFSLCpNV|ljo>dGhjdec6kTv z-PBLx`tH!sm=@rKv1VsCUQC~Y(KhBQUVmQqBxl(Zk;1%K9d;3w&+#kC(EJzjS6$(q zx)F19UGbo75lL{7(8q^lB{oMOe!DXw7T3B<7SBrmEi+$fb^fD@})WESB14+<=Yj25qFESQE5ZBWv0CevY*MK6?}P%+p21D!Yj zz^f}eE}UvRHP>R?J0W0*-W=(4$IVhEUANTLeq116)BfxR@wr(w2fSkTtnP15BF>Kg zI!Rhb!yh&JKlL;3(C90>56gX*SHI&Se*k=^Gb-hm=buxuC)?PQC=cKspCV1&AMihyUy1cG zp>1Qkac#EC(7r=ZCj2Ck-u7~T{j;~cnhtmR%MtPlvUetI+r@@k?4jq@;(mN~dc$qd z6Cbr4UrCHOit^Rm*7Z$(&yKfUBEKx9`L&gn=!(7gU?Yfs;adY#m``=$^v?njczyX# z@f$ef8uRBBN;XA#9?oa{6VE-!3$kLH9&{dLyy2Oh!EuODNW3!qXQO)gSa?kXdNhrBEcgjb+f8iY1VH&y= z;{UhXQt+Loi;|9w7hA`;SqYR)(x?}^E1Pf9HTrDIJ*S6CO{$8wVBhQxa7--$gRTxw zB#}lEyVPedCiQc)weaUo z5O7NF15uk)U+P~?&_B+Q4cj@{`PK_zvPNr9E234XV3JpSp-ysIi3@=qk0}=t5Ke8@ zhcP=zu48O-VA8?dRUBevvkV-Iv_ecj`S(-ra!2(vD*^1lMvQ!VVOHTioPaJ|#i|Yu zt*hd0r5%6@*mu2a$(xHD_g)u^(0h7J&w6};{~+IQT6p)c+IvPW_amWE%p!63u@i>6 zEq`N}@yNZ+`}KH{Q+t`8(^xFwrSM{Yu zk(>yCvgna|?{#@9D}j)?JLh{M>bT~@MaB|Ja{KL)U>}S2Nw6bbYw?V2Mjyc_W9Nq+ z-{`;T0Hi*fyfxOdySFfNTBXG2A}^np#`65bZ@A48RH=)!T zc?&~a(qeCpy5Z!c>XV_X?PI5PK$P5!$kWJAOApSdj9T(f9)Azb6YWlSuEE^h2g?Kk zw*2iwNb!is;0KP26>my5&yc5|%;4o%XRfmn?t-E+qGBgP#R4l#Djp`M<=vs12<@vp zB6qq~^DZdLDAfT-2v$XvqYPF9IH!3%AEom=d}3P;uH2jyZ=;O)fVxxPhTagbk6Z_|#%}Vt~q{DqgM|4t$U> zG%WH3|IM#@uj#Xy{8OiL)vwPnPgAm+=YN6%rfDhU9Um|2dw9ga6PJ=QnF)t~z~swi z;@3DK^L&=oD^3xn7+hES&?^0;FTV*kv)P2K_UOY{9MtwI)?lCuJ{+cO5c^Xw^zoZ` zMkyyGvr^Z1bZzsxz@iL{(e!0~u&^za&ekW{c%qyCQGG%S&aQ6DdMU&#YPU?5X?j6s z6v|rvla%XfpL2nHE)|v{U(5y{Vmy-n-RN_}N8>atxkqX3)cr=GVQ!$-0GulZ_m{bf z6X(aH>T)&eb7o01QXtNFjl;b_k)dRMtAW3Aa!x)Mru!PYhAgvG@EtJqD@=b_geL!5yW%5yjQiU@Sc;=smymUd2+|51l%Rji zZ15J}4}00I_*g5rM|MsmAHDkl_pyFe)6T9f)!nVi=~sT;{tos`?)q528ke{aE)C)m zHIDRL5({j%QPr$Vmq&&QJ^B~f)Y(dPXBBL{H#Yymnmc+(r&o1c6OkMBi(LwNa;K|N z(58A;AXp95nqw!c;iE`snOuqGGV;sRkCWAdjWF|g!!O+uorRVnHXUr=o_6S+QsD*F zps@jR*l^Nj?1VAg%^=K{sb)A+h%1yI#I~lT{)gv2+R#7hryM;2#c*e7=R*DiR&P&! zcdEj=Ph4r}9qghA_2f<)NIppkhB&tp_4}qHL&65@#qIz-rmBbQ~2Q%kdGeXUS(k(X*g< zQth+}mQ&j78K-+F$oaOT+Kj38JpaFAKpGMqQig22;<$GUVq4)Qan@#$<|p-b$^ zqQx=%1K(;b<-{Kid!+i)M{g9cf^?LFwsXIFjpa@|OVZYky>A4kdpM|Pxopok41DZs z8>7s>fkL$q-7^ndCEvtL>0)(fn1M=E(L88h7r~PA?_$}>7Ds^s6qiHbrNe9rq*QCu=C}$vtkpE`}&%cIX zqm5LHFKKQY+h2=#8;Vdd_AKxKC!u~D?=DtCmXR&uicJLI-Wzz)?b8xrsGkq!!4aX~ zv;2RR0=Qp&^?y$xGG|D8LpbT1bzALrXi^k;bZ>-Mjv=LGB)!{RsLxo~d4o&ey0>XU zUfJ9=8MD%OE@>DaH7;@9=8aUfUDW_di6E>9t7` zYVtx`=Cxc5g!y6zy+fC)9Y*V-fhh`EWAR<+ibbEf;^U z4NSy?s{myBop~9b+m+Up=U1Xy-Tl@vydk!vKyw4^MCD|O3OtXS4V>60_tw(~8=|GB z_pXkrBX#VUmd0Tisf<-$w-Ux}#ZM=l9ae8FGH*K)!1FC<6MfBPi`_u?xU3<<42>2bh|=2 zd{_3QaPc!7+h(hnUM+=+)S*vK{pMI_;got{irvi#O!Cm)!emXIus3QgX3u>y39A3VOk0UriVy;%<5dZDoTAoVrc z(1%BysK#Xpj;h9uuwi7EYe4ND;F?+k)6IA*_1l6MC3VPLEvDnsJB~3vD^i9T8-Yt1 z!-Hp+vA2F|2UH;#{YdtQI=4>bz>kpJ0|U<7bl|XZeU@cYZPT9HSJC;zSGZ|TWO}^- zosd-Lq!wU_BgTt(3LlqczdoM5SgL`=ucNfzpN}^!cO2_A#ugnfI)ur?IG!35CpfImlg#^h5D5$r&a>Q7L8={;3x||rIek(?bCMA&!9{8juAsWA0yJ( zufuDhwBOP#-y^wVJG>&~Q`*Na({P}lZM0XXy}%2SpKq>MgLR3i`au@pLbBa6MNXvH zlhu2RT~A>CJZEK#*PmK1MKrM?s&)IBBhm>e@;Apvf8*_4Sh=i5(Y!bAf*9#hRpt4b zwR<&i53gLMac$b7mhCQm#*{z?;b)k(-dKALtQYdv$BD7L(*coh)_#N&w%1{Um@!3> z>^y_iqoxy2oTu4(P5RLaqey{Lv+2lOaadb{%*0nWKAw{>;TAj<(e=kd)J?tQN<7_8 zQe(a8E{&-;0E~Njo7pGYFbjur3ai8$A=j`T-@ncOq=d(0s9 zNOamw9?pTv)h>HfFfT~!FBTgynckJ%)2o_H%UXHj)5kqEP8FG2p{+k+=%16U^8E=9 z!IRN9yl-GCN$G^P-w-{xIV=8WZs?4=`E+@%II&`al-2obg|Hd517JUw=nxee6$Ykj zQA;}s6E8VF{jhKZSqG#c`Lab>$%WCasIUDtb$#41l`?0*oN3WRo)Greo{<=SiTi?MC(y56~ow*Q=4&?{uziwA0+YP z#5Yk?+cM)^lq{14`o+*z{b=ZGnrg3=!??%dF>5RpPR8wHQnVBE8w5(E}!k$!-w2;jbH}$JM9K+tU?IL;?F9J`<`!f436!FSsbjay@ML1h{ zp5UV#hLPyXiqp_Bp}k(P9-50wAvIOc&gyMX$~IS4Q0BF3op!j!;@R_i^r$ZNcRweW zI-kf~>PAhH&HS1lVvC|)BS?ozz&hCIbpA!~R)fKm#mL~;@cQu1qr<>|u&#Dj>w;n6 zG#uQ^vWo$VNi1!a0jzCbAf|~EImWm0JO4(*x39t03gntAK{i21QjZeOvl15Xw)~iH zH=c*LjB*pTdo~4cy+`h!Wt#Wye$=?qxxeptL&`5pNTb%-h_e5NS%;fgiJ!E zBV$efHR9f{$@k8P{8!KlyXvynOTTknUR^mn;RU>U^5fGgcf+a(bZtyBH?)4I_UtP4 zR`Kqm_vqb*EcND&)M7IJG%Z-M{JFZuZ1iZHqcw3*n^y5ndCj_7;(~y6wGF-E`P#KR zH%uH=vY`mI;qH0xo1^m`G4|_gkRLn!1gB;Y`|e>c>YI?Wrj3_kd6D-Na?5M5^90{B z;C%DAg{0I-ZK%Q(9D;4ATm`Z?Rv~U{Z4;BFNN&qy`~@u?7jxM37#S z*1mh0P~z}CEV(yJ^7_hkSm)AW_(Do>h={l2PbZ5`K4`{;-%;#SIlK+%rWxqw-`HE^ zPzKH431(hO%=_ZUO|h5b;p$&You967%p{A?Kp*HK=nsog<7DRm~+LY*Z@^ z;;cuiT);{F`HHn%s`0lwAv*%45nrF&38GKuACF#xKJyzca#MFiRP%o8_M3IUyeK4FTjPF~8zh7M=-w4;c#g3hqU~ediL{!( z#&w@>2!w(<6;$)4qjk!Sb!N*CuA5;670w`hxlga%`xJ4XzRP+^%%$9F2n}yCJau0U z0MKvkT|&if?dJfGYV16{taZ1K%&H%)Fne$pRYlUqeB`%+Wa zi6ht{dL`*w8=fn28G#QwyzH&J9LLHXM4)@EniFusF_=7$H>H9g!rS%o)vcEfi8to& z+0&{66@#)Hs5sNo;@5B1`d*-GBW@*E2COA?w|?7RdZQOx*`YEc=ug1t6_Kk?hpPe> z3)c9<-kX`2(~rR`-k4Q;b$&}sYJ8h9&L;y_h0koi*eSMPk|_WeQEYYZBna{ONn~#+ zH0F@3E_RI$HLP*C&2d6A?E9?&Lfv@DgT4XQE?Tkd4CX`R(%?0(M4`%>nm)ulr~$38 z@7uu-Rbavaa~fr`|897lQO~dm>{q=+nZE>sIq|>qm#3v*0z>(o@_)|>%>PC+I#x() zBe)cL$oVu4O|pu@8@C)fin&y+LpVb?m8 z$pZEtB+##cvnC@FeR%RNNjzlBLLVafbpt;nf$8T^^m|HJFhX>f*&W?X-s$#<`Ilap zM}ow%C*%4HAijz?}T+UvlCj?44UZ0lV89 zrFPxot>@k%QL5ni7t>N*JR!oM{LDX=!r zi(JpU;aRXQmv~tDt9y}=dYN1%yX;UwmN9z?7prxbUDd4smj6%^!chi4G7PJCI_i=mlW<( zml__VP#2GJN|XDSf1S2cTlRsUfrB$frIC+4TmK$>*WtQJJ+BuG)&@MUQvK(Hvg2w2 zWf17pi^A`@|O!ffDN2T4h=qzHb_mnGbRrqfmL|0lc_X4ixm0j({gXYk`^{+;iR+bin4p z0YM?|`9^u3`6X4`)DI7V_R}g{21zCdW&MsdEY+=Aq7$cLi8tw#Q~1~xrc!XZ;vgrP z?)hgu=f96Y4?T3~JDR2xpqNn}`q=Y(PC&kmQJH2!2a9p}ZE3VE6qSgN1 zc6@6MCmR!5W_|x4S8T?m!XdBI08!&az2o$S1}%UnSN=hwll}Bideww?1~jOJxw$KG zDW0jfnqIEH(^vm5B}39y-|bt`rjJpBHu@$-U6w*y-wwbaP;u)U#lSr!evc_|aBR!g zW&bZbLXKMBr5G3@zCTU@SKL7kM6ZOTcmfvx8TdTnkAW}9?hhQu_IS{Z>vVqW>x1K} zw7;g<3^H?@GW-K``h$w%G^dxsU$8#G35LIy-?(Z}d{8ENqgq?`VC_S12OKE_)0)&C z9Qf4-=T13l#NpfcL5eLI%Y6>o@`BxXis$xXzTq&{hbqs1`d9qXzx?0+KrM+V=Y#!| zAA$b3?hK2HL4`o=0+Z6nvtbYVULIur;hXc0gY%sIo*Ci{oE(DtAZILnba0egj|x*f zeK3a)Pp(VuAm2BOA~Nxc5Vo{C#vMm;L?#o1dwypD&e5rqQ?X%ooGH+XznB8Q2rl=LtM4kx4B=(e&AvJpm~t_Su9plM0!QPYPL^PpVF=ksI>p|z)#V*=lBDP z`W%~BV3d~zUDBtTG%2BIQZ)ba9}T{M27H*3ii(QQOoy&?#Y*AVvoC{YA%8YorHrGn zR#{J_90vXg9z(hhoQXGl;Gi>=UDYquZGi|I`7kLPG3HZz4{iPNpzc4sv3We`P$mcX z=}|w!;cywN`1SvyRS{?f#8*xpEI?NGF;T>_IcWdSKNI&o5@Kmwy407WRhm8vAcXy( zeNfA-4dVND=0txhKyEZ!0e%#X$1ZWv~VW2Q$zY2!uj;2 z|4Jr-JDnhi>(RPq2n1gEr&UVvLBBs|322FTR&oT=X0rTlaToDNi}**mDV}n}MjTm3 zGI{^g;@!b9;%y@LCHjz$*tedBDR{FZ@?_Y5<#fnP3H467+KOn>y+cjNED9Qi`F#bq4+H#r9W)p=*%a9&biKw#IZtSoL>&D=EJf3+7c=)G^A z3zqv_HG0HW=GA%!|I3VKQu%%ieic`zx=_ypiWgD%){mcWt0>H1X6MR z#beJ4Lihh5^Wc4o=UCo}hc8LQWxjVtEoRCW`2K8R68pOamxCJEdtpxD^#Y&9!9naB z)_*st;*r9CqCLjV^G61bNCurKY|4PF1v_Nt+$A_0cM>EC7F>h7Z5#p#1h)j=xVyVUAh^4`y9DPf@_gU-K5x~( z&b@W(R-HP#3K>{yrn_gRd!}c)fB%-yND%`-uM)l}qcUKi39((?l>fU2tE>Rq05l!h z_v3HVQ2GC6D+yQ^08MAT$$n<*_0o@j*X=v{Pu1f8RJ|5f^6$QXzYa7A@LVPRmuE?0 zoquZ;{m?=Uy5nttZj`XXXS%<0HT;{fHl7lbMIfsBPd==ynKnQptaz6Fzhw#vx98pm zb|k}I1t45v_2(}8&QbDTRq$q*K%11^#imR3Qk}a&T%Un@fE9H2_y1x-xN!9S~FoEg-?Sy!! z`EPdFWd+)zLwlx+z&?*nO>Rf^up@~&e`kzA#epXZxZHoUTxJCg1f#AREb9g^I z@A~(o2Zdt)uLfTH{kikvzYIUSqVZpa6R!#w^@7QCCF6g~p$(7YA34})R@#(7(>2Ki zr2dORc|7I6Dq)M@@6R1PjsKF9j{IOle;k`5FmN<>$%I$uhyez2e7?%YL>eI-j|3RIb42b17G{MkWDjs>Kf404RZ&|FdHRjiF8# z#Y}IWv}dz|97+C4g->9ALdf&_q&tj+t?8tL;^~y)`GvHf-uqL<&Eyq$UOu<&Sl(q< zp>QCz7bP0GJ{Wp?(L+4b9UytU5)DG-V#TFSM~=C4=RKRHru>(K{lI1W`PPT|)Q1C8 zpH)I{F_Ej3n&t!*G^BZ&+M>oGcfi3BQQ0QRAU zlb2pVs?O!@_pq;m>;@a`s-Kx?J?TILGCCyKKSn0Ji(`FQK@yqa{)0ovrmO9-#F0|e zg2N=#Nw>9glMS^?hX-MoXl$z#dR%`e6}k*9cZw%W)&NZc%%2xdn%ipY`rM!PWV1vQ zFw`hi~pDzkLP7o`ej)iFJH>^ePT! zUsE)?1R}jknz7?8rVA&ZV?X997gnzh=UwLUX@yvW5#c~qUflcg)eRwpY~GLOsZSep zBDVSHutdId38423Y*-4fGw&xKdns|5LCc&>S0GlTO_s@boxzd_P1dd>SOGb+O6j!#|&7#4!g%zU9&# zFEHwbF{zhy6`c-f!FkoKracF@J<|h|W3u?%c~1+&584CmG~4S`zTyeM0*gRO*KB@y zSLM0q zU<2s7s9bCWESJ(~>f;I%s#+L|+CFt!6QkcZYHr-For0#xAdvq>&>@gsq?KryEu$7) z9}@@~yXhco!Coc+VzGi{RMq6v_7ykltO42++DW!(sD_@@+JIm9*Wp3PF%rE%5Z!gc zu%}6`chp5JICTvklz9kz<_N51$M>qomCG=0kO^6tI9)q|Xc&>!D?w?LWp*WHL=e%% zlE?AQur-C#YR9)~Q&LgY@bGZqKlQ`FyY}e?hP*ZlGu&>^Lwq{LGK;R>O+WkTBv3@# z12J=gfb;lrB>(Npz?a*+vp@D zP2Z0J1MoKS+vwDwSMr#YNm+2 zn65rI{dz~*yPxrwb{h>+{`S;(YE#UU#3vA*!NPYFl3I|eRc&~TaZ1>gCF)TZj`WWbxsH6QIlC64#Ja>OpjXc-)yyi6b zKXs>y&-R|v0zk9r_iJE4ZNVF6*N=C{{j0WJiv<%ZFp(oW<3Yc4+&hu|v$yJ1TWlUN z&S|!qDqfDez<_9@je3BANdd_C8ZX6?6cinEZ`rlmg?o20^V5n5h`rlc0M)6sxH|(V z_JeRVOFSUZ??CGH(w18bV_S`-`m1}`ycm9{>)A$cd(94zsX)iWyZr0Wc9%VIJ;Knd zQwK-gyDb<+eppaWqtDah<6{fyOC*_;KJau3pvR(*Zo^1;vr0*ZmRm2f*-j>^ z&PT+y;xm>qneiV<=ZO{`-~P5b1??-E72o<-W+y*7P7R zhkxR?UtnDRu2pMeuD%gOmqO3G&CNR?0tACSXTnJn|I)A9`nccPa9^jZ1wI?Tk_FU?})0)7O^Lad_c(OmNZ_C*G?e^@q1U^KP|8Xw? zMgRZ!w}6s9_J8&tKoR{vI~JhiEA}7X9Z+Qd{-3P~P(=KXa|0-~z50){5h(uOG}^mZ z?`S%{o*kzvz{ghyr2kowT=M#(^YD9hHT`KC35)!~>)ZN5z2jrgXT*zAAi1fD9|9tX zEA9KmHjwPp!K^aE-(lwAq!a7#&kl(|gfFk{(u5L}-!aGW)`9dG%!S6k)u*>fw0NVQ zP$y)2W}7fi7H4ZNRdgW+_&GtZ>Vc4)->YCjoL$ZxFpyT=`l<8QWtgR>qSXYBK(ku1RR3yMqz zuAv*%dbJ2eHtqBK9Db3-N{-+ zn?>87H`JdF3=bZzXL^p@6p}+9rfVsbZXV#u`K9Mme9!|>hHgvJ)-7M-V22#}iwq&2h~!GGqmB)g?&JdM7{-<0@nFERZt z&|F~{`r`O3Y^d7%Nwmlm|6X}hpk35Q-}(8<#XnMMAMm=%8y<0+UG&s$z@D4^&Y#m` zdgQ(&s&of&(E))@Hj^LGQ$nUV%(f^Sa|VW>dx>T5fZReKy;_yyq_GmOLQF1z5bR?x zHhB4Hz-8mXq3}0wMWPV!u!DMm44MK<#g&5L4|L;hb_M&_lo5|6esew}$9tq`SRh}P z?F$)93oqU_$X-)H$!=51;8fwp6^aXxeU-Fsb8zeN9>?7Ek+*fTX>9!;Ss1?g(*i!N zS=w|x6hv1m3p!xuBRo}54-{|)`IZfgQz%PIam;)&Ax{ng>7k|#^OM;FB0{-=QcAs{<9g#6S|891F& z0ghcj(IL+f4mb0U+Y?bu>WI`{QH01P&zpJVGxs(eWAb_ZO-IE&^+jsC>;qUbW+b44NW6qV$L7+k= z-Up8Lp=8Gi7Z|tJ_$CJKRxc+hVLQB~qv(1WwX$BZdZtCS|4q*2S*_!hZcifud~h3< z3(>&11*`+P1rm@k3mAP{i(dvB&N=K%@){itQ97h<}Vlfk4b`+ZU$nWK)fE0u(DH z)jMFUD0jObO}gQ8{`f0MSY2LmkB+hDZzI(IQbsbc;Ovy-Xd@!HF-U#q1zdFL)Hlgz zJLTow3;ZkhpN_Xi(Q89VJ@WVvI^a6h-WlD~?qQ#HeuP|YCz7GiP+xje(fquF?(XSd z#p>{7KqvfeD}mePr9ezP66VfU+VU*T_g!{)n;KqD>=Jz}keS*RFyWfsW>}}@#8Q>! z9G>YtVKcC$@K3oN%?TE8Zw}RGAFP}IgNeoWj8pSJz|{O3kfvCpzkrGtd-0B`33Fz&v9X5<`4QtF1Po$5+s87SJS4H8KQQJ4y zhx@DB6yZLjB=+}LJqBK6MdzhCa(BzqwmlT7XY`Y&mv?N0_KgK01k*81^w8MH-O|!j zOp4OZxVIyMP-pc>r|Fo6@4fwzw9F5sjo)8(A@n*lq>!e_EDJwG3)>mIZ0Td-x83#a z{&Xk=63EN**L@JKj{M{iH5PKdmL0t(p!efTC9Ug)?0@s*yi&=h6caX`5}GBsivET_r&dOcyM963OkCgfP_~Pa(|J z+l9@98c}h*nAk$8dc31Eml@wx`$jFJAYO{ud2FuQK;4mtgW`LAegP_W1kd4zs@ahA zAKUrCuM7A;EB|hcAcYU2;~+t+>>i5kRo*c>dtl)Y^c%vR+gf|05^!SHXK3`cE(5i? zY3=|G5h0P1v0YOD$5M!XjdPXCZSHsh{?kcD($~OQ9XqtXC}oEgE&BZRxHZc(OysAj z9}G=I4zRC8f0GE-#X0A)el~ByP}lut1&^QDC+bw_1PW7*o-)(^TKv{g+5bE3;wN*% zk}^j9yJKys0qt0P=FWP1GSz?&y#2GPAD*6AnBS%?m@Ia)YZpn>uXfXzMzdZS<&~MI zcYO4EFS&#}h_2%Zlg~qByB+Jfai%XkE729o`8kE4IwjqR=skC8TtoV0@$oKWw584# z;cPX&^cy;JkY7z+9vO{KJ*_j@G(u}K^m;eb7&JOA6i==ug)*f<(!f+?v(FTFVm&dMu-1t_9 z|FLuIa)KDzJWw0&$15c`RZ#m>&>voz@42bM@K~AU$~2B-$jH{x1>KcSFX9>nUoc2Y zj-IUYiXft#ODm{bBe|@MqjO66U6zwap$4;EdHi}4oH?mj1r2#&Ycm)spl^*^*u%j7 zv51%MLnXy_ferWo>(tWhd&OXAHOI?5)Ewy;-1Tg$s>O)60pjSLW}qFr#Nq=|^(!;a z3TG*4SUojkPWFqNaydDY7a1Itn{|ydYMtw*ZaMfl38Q0OxAONRaee+j(NkHbi*$Nn zViM~2acJsOw!*%;HGbyO1}ntmFCdN^b1yF9Hx7-IFTM~d^F~pp22UC%+iY{iwK1yZ z4x&tTdJ+@Yd++qK3?(H>;x53<9)gpz{mgZgX}Y2Elq%I6PD<5Bk#X9E1~z&ctdQRi zNrYU`e7|)6>H5*=)KBKs`1&-BIGE~Lr6RS;9eFO_=Rx`3v6^k1DiEOhb^cHuTDPRV z2l}kr@LyyA(0C(!RY6<7y=P{d2=9TjNzt*R!UYsn>vzDYkwNW?kad$s9wPd zPL<~mOO4MpWo%NEVk}bNUN|7>V56f3CKK+AnoRW6{7y0ptak`fpNSNCtuL; zVy+#(zagk?OFxKhy;1h&_F0}yCt|P+iX}2P&nkZC~z$M zmfaP%-WoQ@neaavm}jH$Y+yLJIl2C0U%3A_7URD#7r8n9zpyXAG~X4j^WZIQtGnvR zO0)Izz)O(QjT|Au>ij6l!J?P%AIR}(jUI|}x+qItsF!%jPOc#!5OFN%I2#0cB5!dT zxZlrxq;B|dIzHp|@NjaDwYYr!%~|hBkU2u4bTHQ-a_i>0_|9&djBs&1LT~8cO-QBj zc~t5*u2S(?^~&4*_1w-w`|Efd;=q_9+%0PDDxvNR0RvB{}6GbOa2{Ve|n#+aO!I$J_u0Hz%l;IRS={KDnE7XUFWX&|@^@gzY zNwqj%%RFdnjo_izF?Nb5Ofzc)lGokY}=y^r`{A-J|5lA1iW62ML&4bqr+|C@>rY`0u84> z(yAk>wMnI4=rYkuZR{^!q0H1HtlQxfAun$%GJ`(9r!Sb)`F&U@5!pjBqxUL}wDb|z zR5d6~V|(KEPu@AV=8PD^FU?FjTbvnj~Fh6If0kr9LoE&{c9<*iww4M*PS-eigo?ogmE;GS{)G9_lhGRzDu% zbkp0GES{<}e>(3a>nL6@OW76*7ET4NV8 zFEAeuy0%x+f7@yr`MS;4cD=!=V9zv|$)*1-uT+oHI8xD~Fgw4W+32mTGdaQC%KS8q zfX)jN3jttz%M|lMZbA9$D~v?OzLy0#lJ4vN@9IT@0^nunAt41Ie{*Gyz2 zk5SPkLNNZYfE=%^|5mp6R$B9?@wa1?#&h!rFQ7CY<1AP8G(DOuVg($U{B5xL9$$2R z0_bzCY{m|A=9potRD7lT0uuIxmh~3}>+^zpLeYL`9kt1Z3QEie+Z=_PXMn z?74Fi?l;BS>Sthz+^GE^Xl%0Y#A?ki~6UnMIwWp>sMFiESy*A1RT z78jVgfDAs$yV}G^=amqqvQ~81W&&uv?=)X-arb$*iaj`?*9Xop^&Z8oWZERa=3(lV zITuvB@VRb_^Oj~O>W>^y_w@$Y#Fpl>>}I70Demb=B_xJgn$@z_)1zWJ!G+dSF0C6# zRpkkO<=Ui2Czcr2#<2S-svr&XI%qdb$cV>H>^4Vc#8ii_XsF9cEizv@8eLow+7Zv&w zHMxg9zu&P4c?bv-6uWR@_J4@z?c#lRzno|uk|utU#68`+YC&__abUx1?_JtPX1Sqo zhjw?ag#x?)u%d`8wDqADNBiv=t)2g%cHYvM-UaCu-68ad#zrXFcI{2kU{n zc+!~`J-DvQKYC!tgJ{)@gJ$WaoC&5j+3zN`I6T*p!G^4mPivqTk8WBf}*#HA4<5f~r0*TV~Pb#>FD!h=095aZ$Yj3?QQ^scw!bL#6L znJ>q7)UIE;aHVH!GSTQm8_^OnOMd5vKwbyC$ zkXxDc2xlmsDEU9x;=cy=uPx^LFI)UC{Nw+RxTf6P{|DCe4ey)(J6KchzYxm*Kf;zZb?Z=f$|@<$>JJ(apc!uvH$099dWHNr6L23lY5{NW z$toP%w-^r}o1oT~mMwchSntb)Rh=iIKV&Wt&u%g8$fq>|!Pi?KftCZr=EKz0=& zHkBjna%Pp&<*}30SKfXyJN~*3UPWkjL%4_3iNyywnM!emhxmFC)qcGQH>%*%ShNqJ zN2|G9bB$V}>@jC)Mmg!jLgJDrM^g$(wxyCRG_i2p`BsALp+S0Ql$$5yTHw*cag0Su zvcQ$gdS`TmaM*H<5B{JFtJxFDfrM}x?(tNEG%oCw62y{bVqqljnjZE${7=QqK~nmn zQ-J(2Uk*`J#M1jERyVG@<0b5nXw+3we0hfc3H)A;AMq^)B$NXuD7A~B6x*>_FGMqXh zNpYZB_LaVip?Ytg6ztfSH?wccyKfu2xk4gK^;+E<93c?G8?B#T9N~zo4np5TgsOiJ z5bqxok2Aa5E2Ov@<*L5qd&d{yo?mEA?kqO-$!9v=WHiL`tcwI(+~?{oQGFC1%XIkZJkqSwt6%R$|^XphApjL;x@752h zEX((0`As~3!kwdmKEfox_dQXuxW1vG!_-Nplhgj|qDpdS4&30kIV2ABx5(6piLk$B zkN?n%chY5Ucftm=UMI6awLXVgUlWfvF<)>eDEV5S*)3||Owq2e0ay0Ay=J_mP}=qK zBaq9-5b9s<=VtGEjg}|useR?HS+$fu_k6E6QwSvE4`{uCKWR@^y!NHqC%YE4WY^=K zsaX-Io1>q_okvvle@IC1!Y#nsn{#K<)cA){N73P69^pMS)O*pN=@Pz+_1E#7KS5t+ zoS8r8t_b{w*M1-7FKVE_t69eW{?`bJ_MYE%=U+zMh^_cP)O_fWxt!{V9l`^$jB-21UYT<|iYPmToR3(B#(_q1$-od00BLArm1>Vejcu zP2M|=VN8oVMeFKKpi9x|9HVjX@9m++s$}fjB3@)zXS~wlNh;D6F#lks3mI6i`mWTr zpb+&~2w;ymMts1UC%oJsx69OhZ!y~IM)-jQ4>}R9rZ$5&b=!?B0ps{uch^a(+#gX=> zFXxDthpX5%stFE+_o$hWoTm~y&GZ}C!uyiH%|?2tg{$wUG_KNGf}kab%bdbKrm0MB zqi~=HVz+yp1ZrAZ{OUNOH%~H3NI;@^wM9d*>f8~+DtxWe z%64{AIh7t0(Da5zRQb4#I)n(7_Ogp;Df7}C;AJ|>(0(AN}u0b?RPAbIr&D8xSVck#s^g-lVrCU=NCW1>(7LJ9<8)2 zM`O!R$qKMU-a}6CA2%^+tD;|h{K1k8`c`oYwSyQ5(uT)rs!8~K7s%H7mR-1VC)HSB z&;?_5R@6UZUYiFd-Tj^Om|#ojF#cih$lBD}{AzS&_vokH$M?Z;tgL&Z!6`6rN}0H9 zefW}C?=9xcqtx@>Hl0o5bu~IYtE*Z%~H3H;%?9)^*|!9%u&U z9QO>dC5M}pfXqC@x>>Q!jwf@N6P-SOXATw?*1LKHT0u4&GXBgN zVtUKL6GEuoGQW$OvI=tTR&*4ac+`R_l4Nj4Y&SnU zf%3h`Y^0s`Say71kNwL;!+6qU$bPt1?5CuIAQOr7~$#MG*c!uGg2)F#eH z+&AqWFC)m3{UKt!Aq%5QU<|$45ep9@p3iuMXtV@wrIdEx+rhFBq3K_CVi+=k&68Y* z!<}6=CtSRZC+&!7Nu3TPan~qe=|`VnndLe~w*+~S)l+H$X$tEO?%-q#?#6ELlVm(B zYF)Lq*xl|!_a*8UQ(aZ{Yv+pri!_GvE@8q1NWXxTHx>!r0X2X%QDYD*>by=gK_$6Gi`h~A&^t)OY&tJH0PcMts;M;)LL~&yozx6-PqwngVG^w zuQrm6fxevGGqH>Tu9E1wgdK11%5R9&WSNg*3c;P{9CIzfTR#QB!h=yHdy1dP1Oxqr z{5(cjiS`t2GX;Wm7x_(&T?gYl#P1y6eO6~J0XJu+mK;r39jDEY&r9s<_^#Z{BI{v* z(FF%dXvu3Jh)#4DUV})}2gR1F=U2D0kt_3Xn4_k3XUL%0JVBIhJXrIp4;l zliu7pY~;K>;~A>!K{o;YLQ~Q?BUN-xp@uZPx-ttU?>T_RcaeI0{m`(^qql@|_`1-t z65=i+qO)l3L%v+DZ#e$3f_XuY?Ls!Q{TSM91()fBHdDxf#P9%j#9mGa(6sz=1j-|( zW@ou;mpfrMS96o0VVy5LXmBy^wX2rDn7f72ybiWOTY01=T^rEAl@w@7ZvYmj5Mk-2 z=5a7ZCdAWJV{!GTwXWE+Y~YmAM9NT_u+xt&cnX?V7~K7b!p6u-Zyc1$-qqjCl2_br zC@6hYA{#CRcd4enb;#6kSBw)X%@w9gjg#K@V+cx*u6Em@3%UiTcBdh9nMlr_jtZF< zMh?X8sa_5NSv8Qvp_aR2pQrh|re;o2LAG+Vi|@)09;dXt-P-9xS8qc0+xK(Um(wuCaLKYoHfq!z4kCn^td-$wg2GLLVSK_xO^oMz=}Y0J+NYuT6w zj*SVeo9F94U%b4=qpFeRT*v=}7x(*;fttC{Do~u|u)HI8;h%b0v ztk&T0aEu-9*|E4dA`7$gV5Wc36mhJ@aYM8^BXZ@5g%X#IH6Q2ZO&bx`db`1JoZPFZh!3e-ln?sV$~qvyrV{u9Io6R?e$i<+(+Q&t9M)G^~vJ)FM@{6<>3+pzw)?W!X! zb5zF*E1IEFA1_c>or2)u>WEr9zHzBMP{LNGKr!G@H6s6KF(*NxRv-dO`Zju6!V=4y2N6N4W~8d>r0bu6!+R{dvcsRA^@nt5bbSI=M6ZkxP$Q*!j)K9QyyqAijHq2lFr z|A#_X3iad4MvUtDC34PYkKUJ&Zc%AmPHBTp$PS@!F6WEK8Mw57D_pn8ah}vKS<5E? zsi*rj*Ou0JN$MacjrgL$UFUGREx*<2+JjXOa_Mf32%eKBwpHQ+rsiN zSQwdRB+Ua?GBG&rO7iO6c}L8lp;q$%wIO+b_ccGvvSWH@h)Qs_3pgyRKw&!y7Xe`r z_o#c58@siB5|k{{EbFcHhk~(MxEf(r|e`RQrLQKn7p(FvigQ-vV+iSE~%uv+}3zG`U#nYUtZ>d7j zDLe!&n9cP*HfDY((^goSg8W{>&5eAYGwaY`8IQR&R99&yoqDu>m@R$XuDsnwhsR>u2{ zS8FP5=(yz*VbP=I0A*IaO8?6}MR_wnq7%uNCfu2Z1Q5q+=uj-`d&kKS8&fZkdjS6h zL^XVZEGdZ?;J>dDT$ z%k|vW?e4fnD6aBpS~eJeFhK57t27a`{cHkn*vVZvy&z1fFAr zGdZtir9#$N2yK4{t9RGh$T6#pFUg=yBeB(KacL=o({qTa!!WH}LTwIiAxrMvuExTu z^dC)Y1y-5rGbi%*9p|oZq-ZusIkV{uJO)QA>bi&A6;f)FYgrh6q!bnwN)@29`k{WB zw1B1VT_XPaN@C8=D`@Ct2Lsp3w~u;Hx9U|H0KCJyJ(6PL=^2gc-pWaa5N#OVWpM)! z4>vcB;r{H!RYk@$mRK9VmuS6Pgb^XSZ=9^WA1>7`WvAaLy%9+-ue68>wB&f3ONl}X zpIYhxfwvP8p@r-JqX2VN}UhLy$@ocs(x_q7>rjGkHaI6G+0p7bm4=^<*>nb zzgE@oE7|#q5Ro(cap_l0e}kZ+;0KXp6W_D4wAEpobjyR^8$re-4V4oM_(~9ANY!Gr z5aMeN1UFC53l}PDtcnf=^!iJ!`9X&-Dhg9%{z)-w9O+`{;s`A+C!BkDErtEJ{0eQcpc zlt1h1(s|nX(=J;P_&i#F2AQj!JrARFI_Ugq@w&;X5&yiwfSq)y;`;`!(E7e!HBFmG zH)Og~Kf)j6sZ}tGv;Ql&hl?rx5$T6+qGED4fnE*5Z0Hel1?Fki5w;CuANR_QbI)g% z(unz^(1Ikj%zD)YIhYKg87D^#q#vJ6DyevU&5?ppZwonSz8qN+u;YX=fKp+3|62okFS|9U30d3r`Ty5#CQ!Xw(bBZ86~_QF;Mv1H9KPN z5N}SKO#KomO=&9$JClKV)5^-aTD>C73#Byh7L;eYy|neQ59=c11pdkg5p|}4(MW?Q zR-LoidW390OhWG!D^IDfLnmLbpaV0HB44R!gM``T`?v4ol!kQAQ^LLa!AROjGLL^+ zpA^a*2c=ra%##hpb~x7GGlUUWQExSdbA?T-zU;3kZ_21W^rRgu*}t^!@PF_aoBHl4 zK+HDIOc+jMJ|aU@Wkbu%p{xFxx&P{{z!mQzxoGFoesU)75AHc|b~iPkxy6uicn(AG8r> zjdh_)GpqQ`!V^2?G4GUwp)bM4kFppIb=smTs*y-hfp#@d^f9JVKg;>F1`9c7O@Q9P zDurv{yi%u29SVg?$&Z%E-B}1-_UsXx#$bV_GClN&*W}RT?*YUcr?T7 zT|pyLhM1m_v|)|W#wxcTy_K_hE_3LU(^j29^2lstK zNg6J+_Lx^Yy`{za(Iui2;MqpS&RB=&#S`H~$DK6Hn5cFo=$kjmi@o}s;aA_t7|hbuXetl z#F^v_7(D?Cma!gvj$#cl#G8|}ZeCt2lR~=2(l8oPN8echGQ-Xa5C@!xhfeaA zuZDg-TR81k`&2@|_ zEGn}^v4W?aBC*(xlT;eQ$zX8hsOZ;$lhWzKpKWn!ssXeWbyNh~bd;2ov}hAp>sveQ ztkng^l+*l%Cl?hF8CdL_(Z zdK+I$-R1F=|4bcDkx>)-Jq!tsE;TeIHH@(KwRws!^{L*F{hL3;A}1UuO0Gv`Qs0}1 zFY&H0oeCa*zS0^a8=?gEx1ZUcz4%7cRBcONcC?*T3WWjDTY*b=EG@vzE0n?liFNd) zy95!nL-5ok6P(aD!}z5p{q$CtxQ`vic5K`j$1EpnfF}V((d0#agM>#W6z6X{V#Ke6- z-it9*iv}270q2a`3)Ue$#pgj=b8D=LBEexb+x2VwRy2U8r+MO&yK}BH{Af2sFzL4< z&(Dnv*F=7^3)io2EE+oL!gxUvl&MZ8^8L5Yfx-T7L{m*kT)7htt(ZGxMI0mDu@sWNn9B3L}95{pe zd1OB@T=P5IkeF3a^Vqy5{&eG@F(JFqVeyo5{=%Jm@a6vPtl(lfIYK|yMgT3=P%Y_J zVE60u&JIC2YHV85OL_jtqb!qox6RwxPmaYcjYBTO6q|G4B?P1c=mc{%*s4V_Kp`hC z;@#G~V%IFsS|C9Y?y{yjh0ka+#7J|@t1C2di>yE!GUwmiDY$!SF?WwKywr~6hF$-a zLfBPHI8#rwnjc{@DF|we!P*KAv)TNJzPe<8+DW=?MCBXK5C5`{8HF@#neb7HF2%G z%BpdUy9cb&dbIInPkCc%Rx(h9QV1Am^rdPF8Ph#DNZvV<5*~rg_7}rCiw5xT?k^2B zYXC3*i|E&j=@>uVcTR{RNxlz#EcB(yH%P+WRkZk_UPwE-Un!M;Xn@)PE?n?aox_%P zj3?U$8Uq{ni7Q-T%0W)~e9$dUv~CsNRTL``2wou0fZJu* zv5q;)+9Eyc3lYIaK^N#Myr7LjV%W?A3nE z5jt=%h}5X>z2h6XCT4XaDQ9YfMFk9Z{*9l7;O0s<5ue9_P5fk(16G7=@mX|MEyUj( z;cKslY94Ms?kLJ5e@ieRa4<|CBOv__EKVmTY5nQ^#MC#Yp0%ZfE^sv6f$w=#a1OKh zTAMfV5heWN#w87EIPn`9h<@ta1hW6}C`KKz;jz0^8>{Gx<_S!^%ur}~I)s0iTIwx< zB%o3pe;2}tXw`L{e1Ge>5!jEV3r$`O)s8&@3JHJ7n`{wxE_;6%m3-X=cJuWs!- zEYvgQ5j$7!%v`1XO4KoS-fn~b(R0}H@E7+lvGA`AXLzMx*9_nka+Se^@-L(KTDV%Z zI|u;kW=|qXVq51H{t8`C;w%cDn^%xuW`O(@SqYEf^c>~nie8CeMzjAgX*}m$+ zI5>lFPGRzFy(c2UU-;Ufso$o}qpdFI$j|UfNqTq4&m$*7{I4A-$d`oRBFI2JU>t=?wtvXo#mr=?3LMEXIcA3*U1JJ!K1Ps?#WWaQ4Y|9yxy>HB zWb)MA++Oa_r2iuT=T7_e?9gh+oOlV(KLa)gcTo~h@{QMW9LI6$q8UHH1K z4pmoHDP>(#^qtTLZzBD}nH>HUwxg{rlOlVZfFs^wF>(o!sh@zRk5X$O4D>i~AkDVE(S>^YBwwGURLbY1$ad z0Zc{=ze)H%?+`K625dc?omHUFSJ#2b#-Nh-+agc)?=ZETxsFrj4=*pBPpjX(DCt!# z@252)`pbT%=wea(y!5*ss-#yLIKL}{J?$6msaR$PmN=;oYST^@oa=JKFkDGqH2F=F z{=6B39;P=Dzr(ouSS>alRctu6)1TSYzZXtu{zW0Rc$@+MgP@3#l9E9#LUTTF$3z{% zSD36kvZy+S4*w-a#EENB0GgB3)*V{SV68xy)8-H_mY3KWyUb^!zU6MMTaOa!3&fJL zI5zS9CC(_nYkn(1aCQuCaB#~?Z(+&a)VFeXT{jPI|ELy8m%^PPS!Ly{w)J5U?O1xg z3r*T!eB$QIyNo)uX{X#>*rvu0xvsF8((%nkOvOY6-<69Nom-^0Oy2$-knoJBH3_{j z<7i*5EEKOxKNydY)viLL#+*Cl7*?G=k0bX}&KuVV9XQyuaH~TW6eJdyR+!Ww1M}US zZtY8TMPtyg^rl2mBzA_(dZbT+JoVoW zN`%w8L+AA~s9rv16G-E$W0>gC;kdoHkmT?~=Rkj4t05}UJ3JG@U%%O~U7`~E@P~jP zTl%k1NJna@;9}h8XNW_iaf9)^D-K-3Zu}u~5C?IO8Yf0~WTcdjfNl&sv!Knx32L&g zaXU3WTtWO1k~chKO-~3c`4SQ&Vw=m6w~&NHS@LQ+IiJ+GgU&33N1&hYj6}Te^^tp| zituF-1HWt?%zwJM(qilmVdun^vi0;Y7sC>N6Tw(B2ECv!-Ks3A4J)i19b(g(-f=r8 zK$MR5d0y2Sn;c-1)1`BZ^icYK=`4f0?%(w@81Z*KLt-+^2Je2*W$F01#B;%ODvhf_ zfK3+uBJ9E7@g)MFMia`#BI|aO>PH2~5yj81uV+XuUJ1+5yWSA?{aq7k2H!04*kB|$ z#lo`MfXlj+Ex_!%ir(D~bFY}HAXWbISnc52cySdB|rdwHB^O!AmpN58Myfyv!y|0!`M;ChNR)De1#McMozAeSVy%hSD+3j=+=p zGI`gE6#XUc*HMuNYN@(- z?&?*(-YX5baG!_A?!x3ka=6*zF>1Fnt#_N2HiY>?!p>{a&Yy7l8b2qzvM$k2%vyct z*ut&3xtY`G0`K9+kKv^y+$%p^JbP&3=L?$3mCi<44A`JGr<r+c#^~R50Wa%!bhSUHx#v zLEWDfAyy_wFWryi;b68pwd#!p!sAP9L^R-YeJ)q@(4yD;JL`>1pzBR1Kdt(BHY!)L z+j~Ut03FM7U$9L@u=!~{&RPl3NqMXkI965Oom1GGKqm!d`f9k;Z8RewMP1wc+nHfP z*sD7GO@@_?%-JpSgB}#+tJ`RLC zcg~Emm7W|7K3sh*CxvxhZ!!btJ1OsVh&0WLc=QD|RXXMt4gwxys0Jo8wO{T)v8N1A z)nccCf4Z16HE>^wx**wwPfj&@Iv*yWV~@O`W{rS5%LBFKrohd<-3yazD(x#oMfBiq z!|2~&T>Lo%lrHkqE3-~@46vWA6eJ_wXkTZa(uk!nEPB5QFfq()`vJ7IldSFKdq1BN zxNDH-XOj?+M?4PeJOXQsf2ocoSje4j0cT}x?S9L}#L zm=5T^Era(FM&Z~e?EpE?a8yOWn%xO$&92aG@9YF=F8E@DpQlVVqhQxvVlwTX07-ux z>$yn|vt|4AURGyESi8szJ-Q#Tcm8$um~Z3L@hcUu(zLev6Cp9s&Snj;8)GZz_+}S@ znWUVN|LbWewA50&6@87Vzh(;&m)H!zV%orjPaXroSb!pU#(NF9>%~vvE9-chU(JU#R|Ihpc-`FHds6T4PTVKW0S!6A zBJf8_%^#=h`v}QrG3y!MV&L8nNK4zvGSY(-Y#khg$@^gjvxDpZ>hsN6)%lqwro@`? zM+K&{t!j-;9ybYJ&I(WP0RJzIz`|o!PB|Ro6AZ+zddj#BI7jV|0&en|q-D?hnbK~L zGPV`E;Hui!#374HiEt}xBghU>&~9`{4rm5(wv`BEX)18Fi{gRB{fOwB&clkh**Z|` zE|URU-G=u*Gh)F0)*Xt7$jjt!j|CrAd{Zw0SFcpYv7#AW^kQ*Wgw?2^y-DxaFTemp zHRq&05gpzFniydoO)DqcEK<9Oh#}jt0b-OIT29z>j}OM__vKa zP6DitfBkZG(Hs`%$g&(o#{mA&v%U{lME>^jbSeczv9b=vj;IvT=l5F`qbtTEf?G>j zHHVGE^*gc6r7+8V>JrYCh8KsmejJS6p034GTvgcK9CE{q-)n2%K275>h6GQ zAiSn7?Wk)3Lzk`l`!Bdct()A8=FGg4$CW7E&1O_!-CO0)I<&cJZyZDiw$xYJL`Lee zDLWJ%rxw4zYd9t)pZ(pklVppR>rU3ztesxMoya;cVUa2wr_uh2w0Swixw(4h`f;l+ zG-^e9l9Zh2ZCM5l_Jo50^<$)@XYz2aKD%X0l?t%XA<3zh(aHAdh}bDj zMf&ecoUc=oa=m_+=ADqgcO2YBaClE9^<927O?zZtAQoUn1fXz&7|V)oOxQ-VnvU<< z`^2-ke<}BcCBA7{DXk%eqA}J&NpHsYP&}MHWX9jjfKA&b$wRaVBjy!91<@=s_=w%8 zL!SXt1M-_#(exfDJDQkVcyMsA8^mXWix9Cl#0(J5?y!C7#IFG<1sMvJwv4RiM*PNW zRcc1PvbT&&frCm0$$4FqCa?MpszVk4{;>geit8>F^x^4jU1;kUVDp|WXu$^<+rSNf zsa(6aT$Ml+eR7x-)+m?mrBpChmraX-Zf#9kE%A#5m&Xva1%oW6xY945pWHuk6-X}x zIp1OM*TkRSUSB6tfO;6US$S>mOIw!)oB@^@KDsI)R=df|+-`fZV+#i-1+r^*uS6nr z3)c9s@bL3**0q}All8-qSl#QW^9wlJfJmFSGOX}m51iXCIfhUK;|d8l9b(&|IR54y z^|;0<7e>~45KUfLmSvs)>P|agFY~j_u9fo?7uOV#xKp}2udK5TlHZI|+S+dUfp1ecc01@6j| zCVptgqQo+(^tbt(QihG@*!K4Ja3-f00(55qQ)B%Ah{oFLYRe_eneS&rgYF=UCR6-^ zfZfd|{3HA|z=^0_y#-U#$=e6pGWRJ1AL3NY)9 z!ICcC=>>h<_LG%ns8%Y7S4iO^Dph&^XVh8zd8Qb2w@Ds%NQtYvJ2CfNfMK7*bJSRN zMg-N~1QG#|feWrxPz6l~2*#32UWGs9!cYWx0mc}%P-FM7F)s;AJCa7oY)Vjjr z9tYa$i)-u5~Ar0AiZdp8f5X+XIS@k|Pi!A(0B+P`=U8U9RN8n`L-^TZD@$WFRe$fHe zNL~3>60LZYjJQYl@g+9zmv4|hgY3@7TE4XyfP&A=D3Q5G5a>%@E|kN#_h{Y0KE%eh zpC@;ZFfvWytBK#4pGdHSnY&13ZkEEq$v>OlNI!$ChQBqf6137!TC@k!b!yATHQw#I z??=b0#hlS_MrRpTa%3V_hZtTHt`;jhe{iR;PNE$S_`rJnI-vm2^#dLsAK>G(C)&Y_ zrVGrs^7`t0bf>ZcEmR#e_pUMvzJL1W(PBzg9VZ$PTN(=p9v-bnG@g7Bw+F(~17pY~ANPOR9^*^f*|SI2MY=cPM@RZB_1VT~y1nac zIdpb*et6>3Hwvi}ur%fQK@$t&oLk%MMvLKVKE$%3#e;-UC%e3_RC!_pl?JnsX{{c$ z2tML(@NnAXyK<0aMKK$)IO&q0Oacy=j00@p(V|62sK3s6v1eH`{o}8nrg(Kuj=}cz z7Cju?YYomWf?9Y*sqOkLJyJ+)%q0TT{=ZWr19sonnQ&g!*+TW>uI0FPZ|7=k?L|$G z(=t5-N=y?ZC0}@C>LUwtf>`;BW@a6)uLIvm*L*@=68T-|khC;h+>e5r+6=3hqJej= zjZ0K04Pw53WS&_zk|CObohAxcvH+neS7hq_D)%O>{7t|bMrkK_LxHFTbVI>8WtA|O ziMC=bteH|M@{-W+yc5!*CQI(T4UR(ci|HaoUCH7uo*tZ4u>1V^0Y?o6=aI$#$ZQ9& z3x8uHS0_#8c#4HB7VUS25S3gKE1rM?F+_<){w@$GgOkn$TBx+Wz5OQm00s%TndGLN zRw$3h!_6_^9=g19S(E)_~U7T&7QSxuU;R+~LatTaE zwzmtK=M=j|2oxtb0J%L1AUolQN4E(~)6>%vnK>CI+QdR8)&pdfizW++#Rm{PU@i?9 z%eZz02SeUANi==;mrw&}fLu&+a`Mp7Q0jqDpP+dEnvD?qUr9L%`H-USib2Lp04E*n z`qip7kp4oV5a9t9)W(sa#%E^GX^Bi?j#VVGWyf(mz%xEf^qJl{&&$d~W4g+UhXc51 z1`1-ZVP|VQ!6A_NDJ}||gMfNH{OsoD=J8R33tcHM4g+9L(_`uKZhT~qQ$;eBA75^k ztk1szI?tZ7U$^+}+Jez-4;!BzZUJYOHVO0_(q+WcUXuX+>?0_S#wItpJinVp^YD6k zej11-JO>uFdAz^J5k15H3OClJjn}1&6g4-e?A5RBA%ff`r~yo9gV{=Iwfnq;5H=me z*%-$Lxt&-HXwP^GxyPaQ#Fk1r0gd1mg!htk#2N6efNVC$II;)Z%CE`w11M=1505r} zfd}v}f&M&Q4bDeVQ^S=?_Euz;2mpriGdmhzHjSCLfc~mRwLx<8CABQ#z7t5Sxs-A~ zOTGzD6}#gcWuK@q|005Fdb%~1^!SOsU^nQsE)u3ZIj>tk5TxEQ`|-FBh~5XGfp#7X|(W}mIP z^&S+CE6Xzy><^d*P!M3jE@+b%z#pHdh)s~kejY`DfeB{)6eU?ZG=or3A;u}-kDITt zjSto-D6xdE5{aaQ)E1mSYTcFPHt9oBc3Ad5;kNXi%{VJ``d|&hBLrdQ$E<&ZKL?z` zaoH<}VTK!kl-8$atpej4pyl{?zoExA{0xn~lHWt_K+Q9nT0!i6A% z8wz%pIKLhS>~fu!)Rej`4*WMq1OM%r!T*4mCwPIpO%dby$Ag%!MEgTidv72)3TPTzk2?vi5d) zUYeS4;cg8i+H+r>lt44e%&3aYVNkFap*YjWjo^7Epn}K>}I#DD0(h= z-frpXZq~YQZn!xB$=jx6nF)%12IjqJnV0PG7pPM@{u#Xr@KcS-WTFKrT6XF_f9e^B z3WpnN!o_Z+rsYBJOJ~0dEU9wy3a7G0rrt%zI0AiZz_wT``*j8N9#`^|f^;{3s*nau zI8l7-cYW^*P8GK8wVe(n^8yd-intK_@(Yj}c{{#64~%(x-ar1j8rYuVlUKrcsaMrW zwgfxtaftR!b8dPzozu#_aXhCz$?OeYLCCqxNmOK(Zt9XqK8|J0a5ZOlYYj#IF4-LG zrKst%JD-*Sb080iLHDg6@;nDbv4qd}zNGsq$Y*{$yxDk^L8>_&DZhcnOvz=cN$uhI zd=nuD0p-aS(sS9m0$v?bayk9%iC~ZGTLJ6%!|Yne&Hda>?+qGMiI&%m7TT!gQQ&~o zh~eZAVHI)XF80@c14^DkhonlUMmsd8j!Jzc4&2ylg!Z-?!(AIJt+`X%AXbf1ZpWb z5M-0eL-8Nk7qalPO!jCqVV@I+gqGtm$#aHyv z@2bQ4a1hPzWK#vOsDDOkl}_&5m|V*-RatTwaCb3 zdpJ)+ek422fqXGEyTz??Z0kr|=j=0QrR`P>x_q~C=fZnJ{t>IkH3VXgNeLj71z=7F}3bVP`oYU~OL>WW`>l#UH|bD3ObrO1!T zyPNexI8VEvrv#Bii_03!qrLITT)(iInz zvZ=#kFUEl5dWBG4R0#OuwC-A79{qdUm zNNt8YkMKk*Dvze8yJ)`~&dPgyJ7!HFl;C6- zi}|VGja`44J*Sdrrvf&oi|n(js)xL+?Mp_^5|~I9?NdMiE%Iq>dX-J?hoY2-kuZH- z(&R(7c!HfyCRJCF7PHB&P*qLomJeGfROjWV8mN<+P88fP-9M5bar!kYsASH3wy{uL4ygQ{5Vmk= z%%m}M99y6OHBRqpDhcN$$hu~-$L_#wqET!s0{U(*^nF?(=n!wOK`HM6Zj=>EqlSkW zKmCEyXWCmzRb-GDSUwyKD|5HtRwK29$}9Sc$(*Xg+FBXF=}hdd!b~QeU4g0^>h1Zo zJ^N0 zkTV`hTE7RH>fV6D>e_8!8Co<(UIj;81Zx!@!>BocrrbRjP}_+8@O3Q&%W@mZ&OmJM zFHNv7K`}rDcFCl|=;Fmt(GyZoQN4gtIf#|*z4{agR+gU>7pn#k&c*|Gc^t=fCy#=k zOuNzeXs{MQFBWtY^GSflnEObY20$b&OaOYdict0rIV>frL=mPuPAyDX-0f99jY=p* zcq#f4=k8VD_2;^;^09bJ%1B01JOHz_Pz{g|k2+cCD^*R%qxH##Ap+_5uVlaK@V)zQ zWNWtV*Z>NZ3Q#D0Uoy5=g*qL_U#@)9iwtRzsge*bbg81;sggYh>QOFqK+yOr=qD{w zq%g6snC?i;l@TWWM}#+Uqg+AVr@5-YWos6|sH=_<&-DMMiSx@v|5{b`%n?r#G)8=d zb1vPJaOI>}^|$g;48JCgqUt+s#~AMqel;IX-4g{sc~el3r}YDmEmU6F1Z|%M^=bgv zx+msTUPHh2A+1_S9$}c7>~7i|;@D%4^>YE+B^3jL>*(^_bW;nz8P%pgDGe{EkLlw5@#iIaErgj&C3_< zg~4W!|5ZAi(Z0r%!msUW$IIC7^y=iFUnrM8mznDOsE3TR+H}5s)DaM-u$b*QmAC0 zY1H5`gGqZTcCLC$0_>Hu>);&-+}Nev$7-$yv?}83S9?VqPVa=p6f^=$b94LhT4L&L zAa)7{|FdPxpk1#_6XqJU&q;0he;BOo`48@EbFV~%PhwPhMOuqL(i8x)eRnrqz3E4W zQCMDEFZ_9FK^P==H#9KDSW36SE`?g%-r|@}4@sdnMZH#nbHaYmi+VSFXs;TSf_#Ih z_I^lucNcXm>e9f_!P(I9x)}nf_AW(wmlRbdh=ijs0x0=>|?N-z}=U zBQ!eYXA($lU;6Y+geTi~;=$$KtRj{n!jZSYQ3i0x4rx#`lQ}v|iy>kxIAUUi&KPtI z*Y!EJx{Hg3jl#N$hv@vj7XI{Be zMMVF5RJFkBXoXApE{V)HtNDC&N783ruXfI2v*FVZA~ zJUGn;MUX=y=euo0l7Ftz&m-Fevo1RsW477=T#cuJ3Z#BBTD0^qgfMn&!ffTvZ1JoK z2y;p+TA~}u{C*6~47gn==Hj@q7C=?ko2nJ6(fmhK!;k7N2SAAzCep1$$q%g>$G$gV z4_1@ezlMRP12+Dct2AC zY|KKbLbGUx9RONdz98K=o6r!bE(L!`t7^q{Uj4aluVhOvjrI(Z)QJU7EH9mYo{|ra zLxS(!-uLQHbv~FOd2+TUnjTmU@gASx1JZT!p}?|>1sn)@;GD(zu)y_L8G1oT*afl| z2nhN^-(mLo`XXTE0qG(VA$3O+fUCTN^Yu{yw!aiw_JM8`U(wCvW^B8{bUzq>tLGn&=~?&l0^IlKtjCs)^y(Ars+@zF zUzH+wrVgs-UaHinb(odN6@*{B95}fPDnScNyfcRuR;Q5_%h{-}fIBL|JxKiRw8&ie zp4)nchNAgC0$#ewU~5w+Xh0P18KkekULWbHf?Wr(Lq_%hC>|BjILkrK61i*9k5FIj z9cm!N0GMGDL+`Cqu~l5)ez*D>|9vg+kK@I`QGQz^cRJf2H(BP}1c~My303Fg8@>Hq zu_{`0Xg~Wx!{Z%Oek*%(k2s5LrnDUomcMYe(BAdvBB9}liDJ%-^9|zl! zs6R{)LP*FArd&8HL-qjy_K5-li>@zt!hHj9G$~G;` zaJ- z9QN=R8QsOnv1MT@1g-5lpZ>H~n>qiuGacut>!( zq>x6K9Qs7#1cZCh=oo`^x6+^z43~oudwgvCsHSxybicE&;|^s*6ZQag+zra`LjY~1 z%?BIy`XT}WiQa5&5w!3ABDc}mue@EgKLe2=*qFFZw{AO;)NXX<&Es}-Xoz}V^4P4^ z;tHSe56=`otpj5(hSq2eZy%Ux6`W~c=X{z@F79R;W~dWVUP)SwhvKUl)P{&^npkn& z?dV0^euT6JTq1G;`u^_9{I1RFJazf8Le;mbKa8_&Ia%(ctYjUwp>NLUvPiAZ(@tsl zcAJmJE(;Gn%Y}|_=F2yG>J#?@Ju8M=si+4n<2ydH^Ngv-SXo=b2ek9hW*POJF|C`l z9i3%14`YR8OqMCJlPD^TV=-ldFuBP98HHoC^f8&hjzOyz$p49JjyxtvL_j) zLy&#_zAtbE^RlFQ+z!);FW}b$#7b`qCT5-1aC?%$Ho8q$2Pf~M+;om>{O(~!0|K17E9T0;q%vfGP=ZPR4mBkyQz;#kqE zYzn9;rtKH4pvQGU#Z%XaF=wpO=oXNMxFOCOf>;qw!oVa}8x~AvfQj?{+nDng3iugNO6Z^kjb8v(B-O{x>t)7811rNL z;pWrVnsM$RZ5&+izN17`*%VTh`iU2627%CjGlv}KffR2P>E0%NzeLXCOoc!6ohR5H z5Wy-V!S1=;I5zE#3dWd0GC5+fjtE$g*|I3_{wD;=sUmBXbCzO64q=$6)B{&LI|;4y zBtOIu0)b4zapB{M)v)#Y3`FiH*f9=lgpTfbnTW1+7KSM>-are!`~~v9*2*10!c=vxJbf6LK*M+r$S6jpj@$VW&`)fb7hTolmlTK{G+tHmA&>J zhq|ae=3Tj>wY0F%;+U4AD7%AQ<~su%ckQh2Mv!KK0 zzI*sOH7LmRJDZZ4LoA@G;=`8|;B5#?~pt^2NX4V?}*sO{)h zC~%f9P1JbOUV)1>TE|38UQ!qm)hLdFxTa8BzA@O7Q#U*I=>}ig`1@p{fi2Wn*^Iv} zw&)*x>KSHv@f_b=$m127`tVY0z8_K~Q_D0ok-T4KrRa>Cd-o`yCLo5p)TLYe*qUio zvI&`<`5oz!qwzfg>^6m3p{ZRV$x8O|yBeJm-;83Pk3U$x@S2-6k8m zyIcyo?QE-(E_NnO5n*2LHRFXz(R;1w$-dM~XJ!@dEDM592NEz8^b^N-`hKa16icm9 z`E2E zS?qeR4*oND1kHuD><4yhc~dd=tv^ z=03zBQFdtfEt)!y-%92;Mqunk`f?e{`rEoS(8*`Ul@jQGILi5}XRY_H>YlWu@vfZc zaBU}#iVzqTi$3O?^S-B>PYtjAGR%D`GU08YO|N;iEAkxI@wlo?kugGCqi4Wx^bsS_ zT06sVeJ%ass($DJl#%co+oeP8(yCDx2>T7?WmEFve(%C@UOZj7L1$L>J?9}}_AH|8 zbmv!8E_MIf>5?r>t%_^loo`Lu&QtKtRCN8J-WQZ6RW}tmKd`XawLArf)N{47^o7(Z zH)6N3zYMzfa1BaLS;HJM8eI2(60shbYu>v7Ret1P>5jeN!Cbn#(7CLL1_!E>d#C>8 zXmr|mN+qpZ~ zsm#Y^al9RJyivowDZ&Dk7os33lHq}h*@#Vu$PKTn?DrrWX3)*#=5jYq;LWriCV56e z4VQyQZ78G9yQFOk=eA5*$c*G}yxysxcSOKHTE=f#j%*S=*jPMe ztgPLb5-+!YJGH;XG_;0i9qLAeXDtUd+IpEwm6;h3A4r%Hf4EJ@r>B(anU@`y%TP((hqjtN=HVaoW9n1fE5~ zZP?Y3w6gF&mo$?adV&|TG*y0?9gdfT^B&vDaS6SjBCfE>I#6hhDA^_JcL9#K+4#m7 z2XkAK>Xn#}{=CJQ*0L(-orkZ!M^+5I&+2(P#H(T;iF$xhuKBHj%O;dGC^L09H8*oq>CQH?;6|{X%cGUv5^3x?VZ{@y&AS?GjHDGPs(ZdP zyCGQrJe^8xAs8;ChR5^1WO#m)yy-rX07y%9CyL<81&Xt2m_>`6`m!|5H0rAMxf#Az&odt% zRO7lCT4o$UC;Dzcs#jAnrbf){>?4W^6?;qgY~IP4%biXxXZ_b)aP*AGuk5-zNQ9pp zU`1wuMbAidy9m|{o6om>02d_(5_qQ(BkCjjWlY+&F~O743ER3dBy4jN*GJM+-A;)= zSEERLNxCpq&m0BiRnKsYA0vsX694Yzj5DH!#O(j!>m$126ymsFmA3_V)a=;G58GVE z@uUT#h9~!F>sV)cm_&>xWd!8lajWuVFBV{k`-w04va9hH3LYQV!tBA=ze5-+yAhY6 ziQi?APWx)e(OthPXmM#ey?Q2=(b=92?L7g-)8Fog)g4 zTW^)pbLbOfCUHS29Gz1>OuAh7VzTBC4Ek~|gh|wPku~f3RTId@f z7}SiPZ+h0t28|knK-L|sfsTwdhb_q3chMJFH2G(Aor!cWG6cdGq%|iG@=#(*=5O!_ z&h&?u8ldlOi?C>%b<&)CF}xux6k0&mo%3URK$rNSzbbjz_*hn+mge7eentP(sfC|UR5c7is2%1CTJ+h2RYBN!2einG+J2vvd&k(2sETI(_l!SxSEqc9up40YL z#l`Ev!o0?w;A5xX_jVu;JQ1eLo_<1I!zu1x__~=-n^TsI?Cp>pAOj(@b-^Oe;o$ja zY<~|35$7>OLUIPu4P3(4NvTE0e~Q5}f>iQ7=GL3{Z}voi17rf!V=<>RcQSXYd=n1rXp3$L+o^yx+$q znQ`J{6n0l!63df`Nh>a zJeIO0&W1vgA{)5ZUmMr?(fDa8(i%a-3nDpSk4Ezu-|CiUnxk0tdtxAw>Zf~35CRc{ z@2cmSO)EB8{$Fw`S9+r+aPBISYf^uq*-PcQU^c;ws@5x9$vcBqnP;geFTk?3)VG(d z(8Sc*AIJxBJlDdZM&MCeQ46aDc+(AzQsmoo^k#ym(J?|ubBy3?hG~-emMw+x9{4g7 zR!Plwf}|Xi+8)(7wNJ|$TnoA3mTxDmb-;+3^zcmC{1jcCX#)rp)&m0 zCfmVYJ*P8E9%RTOgn#+aOb}El{bg?0n==|)0gAlN>%F}3k0mto^fpdw_fJcAR{VR} z>=g_zm?QyL{tbO-Lx_apLS<64p>}#S!NQ!oJ8bbQBkSoEuKG%0ut}m;aDl1}l1SX$ zVKgH2n@m(HF}QKo5|9K;GrL`_aV5fX7VEeQa`-gN^UPHvM)TaP%V3^yTUwd#{5F${ za7kc!a!B-EHRGUo+jQU(y zE5dB=SP-?a85|oMrf2u#ku}XPdNb+=Sheg_V51HIB_C?K)+HHJza@oyu>sa@ zT$ayn@xt_ht1mrh1RZ~34Vv|Y1w~YcUY>`ku6y)BIdG+r^iPojbu*`l~ho_v%`+P`4l?#^|LLGELE&`f{3-hCiB^E`R0*P@}+ zdIN=!P*GhxS}~Kem$OXo{J}0##uHSVrF}^;u>!hpz!{F(y6@IN1Ip{r;g!EmH|Mmv+8hTp?SPx4{rC6&KP@~};yuYH-^eyhoGu+)FP%)a9wd9(&KyRs ztk+74WqlzZcm1W-&M&l`)8g^69NhD>mCr$FNffK?P$)*>yN@se$K8DE=kL2+`lq(p zdB_*OGB&~?(jCp~L)$%8ZAX0c8hbvP0*y{U-}$g1zrsrZy{ltYeb?Ig*=#L1w!A5- ziXgJHNCBrhy*eDiTQ3)s6PHueNK8oTp!L@QZ|{Zq0X_y(xwR2=Aqxy=rZIviSS=r~ z62d2G#fglcp$jw$v-IhKq`rK=jGhPfZE@#6?pX;O_G~rsNoOlQE_*rxuCc|1ArlMu zkiMo*8QN(3ZZfEU%a%|XhsvpEd)KK}IKRHbDF-UIX93u+NcyJJWX~<=+~8ChI4Mxr zqF19y8=~9%iWjY`rz3>bz`nvpH7c+hp3bs)VXZ*xDGsM^(mR)7qP-}f{vMp0d4tW-Hd4j4(48~QaeI5Z#d za3NHs;1-$=BA`%k5|((~n~E#J0?}r_&v&#HoS!|o4Gq4d(If`t6($ftD6E@y@w(4S zm+Ia0qc>s9ZmX5b>rh?5G9)814jLd?7Elv4hAHLpP+A^6)~fFNhZ&d9JgSJ@43Eyk z=v-5uj(-9gf$YNFf{w{6=VCTXf0yAH7XzHG?Fot;KIPg;MG)tPar?j;iB$~WVJfA6 zWYv%u%$!1v-4t_Zy6CtFR}wTqUK3?%CsJ5D`TU?*=qT`rVn2uPO7Ja5vExhMY6~ap zX$g*_%O_GJOU`e0y!H#p=czf8>!FQ3{%j`(43^O<1dHasL=&+lO9zII)IW)eICI`( z#Zf?3qNVbqog+Hyx3x=(ku^It;07c)$Z8SLF>BWgbHZv1lU0u3m})f_21?rRmxmWx z9|E!*i%u$5G6hA4p<{mb87j!# zNc%QIV6n1kw=^gfGd@-1)hgVjk8lQG_VH?7XpSA>fJ}c}_5$4~QuHhB9A;5Of-yy3 zlW`>76%P^}icm$1RF|vI8?S7|>k^|frDmG=i%txo-%@IyKyVj&N^2BZzT5Bak$Klc zJU{{^?aR;BU&DcW^RX+gJtVat2}FA^2j{4gi*Vz zWba(O7B9=5icH6^e1HewQ1c@Oh3n()*{vKcKlegBSJcPM{>{d!;4E*BXY|#O%|?EN z#@()#?HPu>?O%__cbh^41zddIFWa=InC_o1E($jk_VzChFN=B}c|1&=Q=|OtC=`xK zDlw@>)wJ@@U$}>Ybv@5(EqKBQt%)HP#U{KL6}c9#1WEH=-qS_S54j|*)QRb`tMN(p z)lG{T^U|NtqFFLe5{E*f?z9P8aykIEn%ns66%Pq{%)Mx+|;se#Dqrz)4$v^mK2;fhH-oEz|+e{tNJ zQtjY`GTda8Q?&hz+J0#a9;pJRC69}B-KmQrDmBr(a{bX4VIen8`tuj9gYa274kjcS z?M!-_8UJvcWWc>7cC#B7k9COejip;au(&-r*9;E<4v^w1Rn@Cz(fSA1e#9x{q9Dt3 zeTaZ1tm!-BUGgWM^DU&hF``U*j&WvS&`H@LmNyByTF@+o|w}4}F|4`7(x`O7Ig@Xr%{AIB@E=^7@B2Nx}wSdJEsCnP}B}7VngL>i% zL2Ae59e&}O`n$(5TOIRmmcDK#id@z&!_kUEe5-*J6nd^%=T|KULeGI`mY@}b#Cx)k zxL-7EJh>K#6z&6ki|B^Q&sK3etIoRAY7i5lYDZ_X3?-e^!%30_Kf5)6Fa!5bpXqIq z6xi@6M43Tl!E+gdg5?F)e+z{sP2#I5rTG*R%;-+O=>dfklA@sbz0g!g3(+y(_M3BV z&-8IMlTX>0&4CjR+ms8=0ai*$lwZ(JjfCuQT!_b+hk5p4k;}IAh^pGW2?h}TCOY-Ovn^FcG@?eTWm}nl_V_&!$?2tHd`842V zdElgsf=(1=_7{OIRIdmd;P#04ZZq)_ev(|Z;$RL(e)o>H2x7xOI9S~h3iJlQ>-VU- ztfdd@Robj>L)3H1)n1`p_d`r#J5YTg*uD?nVyRN{Ty6A&p=F5zlk$_smRrj26|(yYgY+$mA82G}d-tkU5?Qr17&1)bP!>o)vvtNY z+8=LMV}Y%>Q`xnUIO;XduH5@JxKDUM8T6pB>2StdU;2$vKdG^gTs{vKYiLk8FjRe0 z9<8i|`jRVJiLT%{F|{h-d33WYVs4qUh`y|<4l$l~k!8AerHYceymz{nH8ey#T%76u za<`2c6tF=NEaNt$U9g{l;C^>H88ig@jg=R3Fi}|~wgRf#>*CYHgYJ5F;rlJ5IHPK) z`&yn)8mAX_{O-9g%HJTKSMLeYr7RoIbaif8n%Yi=&b9MI=MVm||N3*^DU7V9t@Yw`j=h?3N8uGhfO}|Zhdv9=SR{fuMixKvlphbH15tpdtR!A{AUanZf zTvIxXjT|wC67Lf7qAxY;Qqzu8<-#(aW}u3eCv_?>q3@UPyTEd!dE;~6=TPd{<4Qmp zvBVd;|Du|H$`P$9lHydT$Hm4_KUL#0a8cuq6lD^yQs0YGgsHg4O zoPzju5)|@dfp|=O4fQAkLR7s?0*ZW%VjlVrc4AI--jw)ZpFXwN)6mE^mMH8r(mP2Z}?u=(8*NaP+s)IpAJZcg%pJi z^{ovI-~ZvDl!cR-k@+uQq%ZR?KY@@WK8k+?0tUEr1qOV9UY3A_fS@2CAR)k^0M2cp zp`l>l(BR=?Uaq#en-qBMKkhz1@s&O<-|5_YRLK5``up4U z1xWDIW!&)x*=Sn=r=l`{1@6dIdyigqCyTi^m-K&+{GZ`~R9SUJj2Z9-LCaTQ`kwCp zj?Yo~_b7n4G}*r+L86b?U87B&X*KBCk{wPUMhHC&0 zQqYpr`I{oTB~(Fh-0KgLu(_Ut0{`mY;eS2Bc;+{2O5T8wZlO==*27w{X5ia7jp=zY_k25SXui(O`s?>E+HB zf2F1i3)d@%I!r>6{v%$ARgT3Q=w}OdzKc^HTRw<0{7(-R8G+06%)~g>R8rOd{$R;J zd!~J=*=>iaFc6{h&i@I>F$z~8&*e7}#YWlRq7lV3aPs*b2Hfisx%y1+z<&K~)dJ;2Ch+FzsGe#Zuf-T1HK{|5fV{KmgMK_fg8o3U%{uuciq|NmndP1>{4xB@j&3FWaX+Nl&=u(M7J8a^~g7Q!uaRdnN8ko z=0(syA3x`?+fx|8KW5P7*eXj3sAo8yHIv=p#C39|Llxsc@(Gd`%BV_blhnjj zGHvhT{+@=(F;KAq*nce#h>(U&Q^e#EGw zm-487LRjZN79P0wGq|I#rjD`-`Yaf#50Jt|$B$6FmErin9bC}N+^uu~7ltXc$^NWPz4)I zHm_me?&xo|0f4~2_32N=+HCrlG{1jTR@0Qj9D=lT{sD0Q4hE@`{4?3?8{qNq4`hKT z#r2wg_np6+{(-TEe6l~NpdTq$zk(o~V9Xvq)nhnt=h^?Sj~Aez@QW9q&u+3xU&Nqi zUMmJwfL{Jss_t?Bn~ZXeR_7}Og4*;D0|fPW(;&qDk;bSJqZ~r&&I|R>NS(1Lc}uAg zE|F&;>3d!So}k`0bmP#vQHN5Mklm;Z8CI>y5%cThZTE>}nt^M^>y3S{BO_CawJgc? zcBL~;uCj{>ylemgnmD0%oq#vs1E|@n=KiU|(J`KUQsY1n(qGZEqxs3(6Bclc3>ug> z&1DAem#D|bPR#X15sg)U)MW^0lHl$VoB#oWOQVehcL@!RYX}}38h3Yh$#jm~d(OM(yt!|_dH;O#e^a}tTDJEt z>$O&`TI?;H_nRO0)1k9pH;A(N#i#l8uzuZ^i66d+s0hBpoD8kF=Bd6oWQ7_eCe7V) z*sQEG=T&X8N87(lD)nqM(6m@g?NKl<%JCwymx|})ABf}1;Nv^H^p4mp-0YIg_)5Y) z*OIr{j26ZJ(=7hQ;yC57=ZxmB)JWFaPuA4@DW@-tX{NiF*KQe!X;V~%xakG8_oQHp9kn;!bZT_NH=+hfvs`b?kUMyDyu(x73 z!>YF)BPs2S-Q7>jy6Hi5e;Q9^pO}wduvExe&}WVr+4sXS5%I*jWd?XMJmy@@*Du?% zsWma1mfg|jqH1LycEx^aT=18Uet$^e;E}wg-C!gnq9ZAR7az>8-^#6H==xC|!<5`0 zm`1de<~W;1f6I7l@O54xt1hB)_VZUo{N@ zoL@D`PZI}gVMyhf$j=`Bw3zo>73ysL<|+SlHF*x;d47|qFlzqr6NLE>Q<@A_Fb(>P z8vUPUc?l87$}&aB)AZu`<<;^RQr$bP`N8$=DTWWrsa zc|^-hVWv;qTCDz5gg7$1aj-6bF31X)kgD)sIZ~es;ov`K{;v0b%HDhb zNtP!ZOz`ek;s3Y&e^=oD{wwe^8pQb=4*oGb!XpHv#|Uunh_I7_?H)bGM#Or7$$~>J z^87U^8HMt@C#%f}DA$>*IWMq^fp4@a`YjN$5?cARI& zT8vi1#S8YMPO}THOB>Kej`H8N@r+ZA9mv~qjJXTXQ3(!Vd3$x=H#2nCze%T@b=#SzztS8Z>$I9U7KhzwQQ2qLjbXW2*ZdgAV9+1K_lQe6k6%qYypJg`u0o_)S}za|_ZGx0D< z`_1-%XMy<<$1N~Wp|-~t_%I~O)1|Tw?g#B`G}M=uTbKMBK+!%RBD4@&)mGNYfR@_# z->L&^7aD2?@X<|dXB6tnw09^&%k~i9k34xf;y1mRHiKde9Mk7OGdZrXS4wc`5RctH z8Yk>j8lEbp7e{lLw72PntO!Tj&Zji=^s!oSXa9h!Y9`}vdNOi0HVE<*ZZg!`LD|Q znlgd-54hy_^)DYS>7n>LFd??p{R+z4KE@m*af$~qo+kW({2N#?X`dYrLaUK@TkF_! za6}+JJl0C!9F*Qgoa2&RW`r9!0R4U#CsE>9dYi=13^***L9TlLF`!A&!vK6iT6k>` zY%-JVW4eHp9m^*mb-dpM>*f_Zhwf|(|1Bsbm(QzIgU7EizmY2`U+8%FYDhL7P@YE< zpIeR(j_I{(6Hhl&Al(L56wVmRl1=Ps*AO@i4C3f~12{KTA3R)=eZ(jJn)n)JhszLa zflHbJ0GmJ%G}>&s_oUtZPV!r}?#617)j-H4{FeNQ8G&flT*#o3<(fs*{k%?M2-#KC zZMaWo%gUmoeO>LG?g8T^?(YOyTq?1y_8@pX`(*_4D0MO(J)9EkjPYpo2SR*B1ma*B zGIEhh9*)`AZ{UDm3uubS6!FhR)3@wu!v6Fws`mOp zg0>5}GN|>0(X2%>HBYN|+>gv{XND71?Lq9|`@AVCI(Lx++ho+f zYn>|GC4P)uqIp`pT?xjDTga*35&w$uC!jq3A}FF*PoC?&!nkWTA$r; zZa1DkqHEwYEt*>^i*k9p`_TTtY&?hw9Ar&u#_;DyzbA0X&v_D^IXxoj^Y+mGf$V|A zbW8+llitrd$77!2ZG@JZh?e7Qc#C3#V{UwoH*E>1E|ude9xSdZF5M~ND~^nf<=|`J z%rcdRQaf=gTFQ?y1e(M>Q+(IHhu2PTN%Bea79(9h-&&TD| z=f7IV1$uYL?^E6O|A70{8l>dbcVp`q*kKc8oNF|Me2u8uR8st!)542O(z!BAjcxR7 z+H&;L^hw-24XtZ(w*f*ievO3f&T~ybv;;mAYqJ_JxtIg-%LF>6H|;kqB*j+DH7?Xt z2@2oO&0j@j^vTcTt67vq3%5LbQ0#AgBOKA(?H2AN9z9!?Q+?Cwv6$l;KW;Q~yO;H< z9PU4s{HLi4wfDT&`05*CbNM=W#NFXCEf!QjnMQlzaPg7{LTT0~R%C*zlScBSACL|N z_!^aRE-0zOy~h-A!+lxyCu;hT*)6?hZwfnd9(ZXu5-&q)Us?8~WM{~0ZT*N(eytB9wLB%8cG~RuYrsPZS)%ovFQ5j-?{&qk@ zy7&n#yDT5&%L;R7Pi)vmz+ab50-wP*5n3ECe=jtXzeB(5U+~K`Q*DAG0D`>=*&qz+ z+o)fVCBL^LvI@9cYX?p93oI5FB{NKh5Ymqi)Nio>@yL81EnjqsY%mp)#vZnYNluB7 z?ic~XHQ{B1SIeGbmD!3%D-A@3Rkl9YtSa{5J&ZtG(KycWB3GLrR*)Z$)K)5v&TE#k zHL_AB46x8f4Lfa3Kw!O5QqF&UkgFrF9|DwU;1z@uuGlgaipKNyvfCRt#bkG}H`#>m z>S~s!D>|{d1%=R$b48BU*s&l66Q__2}}+QwVY> zjHw64HB%F4LZq`|Y3}3>`+SJ9j^a0LalRj1Rl#J)_WADr)QX-Hf zkLU8c8L~bJUFcM@fE~Lh50GD`(K&ei)tyf*hl5@$%rBh5%92ErdP@I~LdWMorfS(n zZ;1F`DRN2(L$D@jw-IOXecZ+W(b~^;=~$M`+<^4i^nDBcJ8g9`>TNyK%r8G5k2SNX zCFo+687m}{nZ+_S^UgP_Hf=3j1l~M^E+0qSTvFl!T^;Xxf5JC#u)E*KNLjx;KXar4 zlsjMxm$7qy-+u2W2Uam~I!#JzTHj>m_2?h`4WYqVJkX`Y`4jDTwfp1FyVBgV)Bke!w|SlNKuE&(}xhCr7_Ld-p(mTgC7F<~LpS z52f|L9q^iH(7G2lv1)0Qe^~3TUs6h~*&DS_rcF<8ekvT&O3R@+`MHtzOSgQm|K*_i z0HI9b^lA%=pec$3{V-`Lj+Md+gW+VTO@<0;?u|c#LbTp@M=SI@vnaxD$2rw%N!4nz zvX z{aD&WrPpa@WeU4Va1o@c9OSH(uGanuVIOhASz=`Q(e#?>CL9tKx{EZ48rlSnwUaPG ztFGGzeF}JIu|Rfqw>6~*B*;CUa7f+ZNQ)7bS-961#&FhNi_k-;8Rk0+dgv!aeqs6@ zoRksUk8DEO?M&~IEhC&`qwbA;n>Io{l^f{=+(H~E=_1>tql@l2U`g!^8Suus9SL8$ zm@ODsai0X`7(;`=f-f8JSbDJ{@;|89N3o(Ee`iU>dRg}TSt;7G*&ZC1&%j;^S7G$( z?0YjiFk1uwZJWoaKQ!qD6P2EPU5X>yis`rC(PWj~!^w>2&*+)X(|2czptPYc(?rB) zKcOJ<3Rp-gP&!e9D9kBwJ*FZ+j?{!bvQSwpg2W*XJovwDkW+!O2*d99L=C15`6@l@rnF}b8{fKx@5^zi| zALwt)>&2SW=%0kZ^h6J}?v(@El4)E2Z)h^+?nMWPvz=TtGFiaDksWUYmDDsB&{jtC zyprHn$uN)y-^oLw0CVDb9$q!sCm#IgkKy-Xjj?X2O_KvE5zxyjXZ>v*({tDSOm-dv z&9?fKMv@pjn#*u4eNNSX!0FO$ux*dtYwkK-Vqm8QR2n?@%=*-?HyU9i;v`#|!&m#h zxgS+CH4M!_{8=b~jSUZEx{9LmdX=IL^B~|k#Rr~Avb>YTiL|hzwX#B-PdAXnR6#=# z*FhGb{A%nV<_X|2A~HIS5g~bMT?oHM)^ot^UCygco2ZMA0L1~C2zX@Agau|jrm=D? z>4Y|oZ*zxuO?ln*Q>dE-em0tDy5QK;c=}Txe8f{( zM~c;guV~0D_@1_P3A`^57Y-lbc!dO_>WQ5A)?9mbV<*YWrSyJ9T{dPfxv8c8Bl&kJ zmBg(ZZr@0l+2hcyrM)x8h;B7o+9|&5ewVQpS{=ZEhTe_>&j$OMc=-z`?ZNi6gXI49 z$8(Yf!%A$h2GVwR@YG^9T}GmJ#9?RbfUp{MXT?ERg1C;VTa2SO-*4{(FA&dv&(k-fJMX>b7)vee)qJR>c0NLUJly~& z(qbaHlO5|(4j^U~kRJ17^k}Dvb335E*zzl*c@csYhFCsJkruX$HewOd$9Lm&U%Ew} zdpq#JCWkn8S#nT}wEWuqT9aS7xT8Y;HRBZPu0oKF1fIO^bF>&2%XwIzDBieNj7Pdl zwe9wEFozg?7Rp8(gkM%9D5G0QgtvZFY(UfT!CGb15IlAs`h~lSiB`ol_(n@*;+5Z0~fJun+6-RRteN5p| ztz#GgXCJ{!Dg)Z9+}Tq47b+DRTR3e#gk-NI#dLl6xc0U3g5J+y?B39d7hB$W`88~< z{&c@TX4P{%2p+*6k4BEv4Se&R`Pz^!_T9^uW^UKPDL1t)B$H?5!co0tKwYXD1sl*b zC)nBq`Wq_EmNYl#NAy>$pOSccAsdxWgF=7dD{O!xKnj;HQ&yDzI&!t+UO14y5Kq!E zA1}oES?e|sX3N`EU_Q4KiB>3IYc9-;<>3PD9Pj(Yw`pFycT%>j*+v;fxbk`2l;5W# zM{CNE7Y|NU{jY+86+u1*`>t~OJxMhVmW2w}{Bd?q%y$+(l5{M_-%y2gLyE$X(m`Zn zU+G1k>Z*L{vZgdOS7m(9FjZ?eYh`Fn@tWNYrE_h#%q8fHf~H}-?Nn3_eX1yZ?!Yk{ zzoY_9hYBf`g2;~u1ePZi&dP-iYb_B}OTMRRKf2r`Y4k5%chm)PX66!2H(I$2IsZ}yCJvZ(G4 z+9Fo=&i@ifX@;5OdRh)$Yv8aVCI$WW1l`bll`N$CIda{-eCY9qi%ZI%!9yQzxFk5O zzbxu+cv|P`9@jnk>yj)U{sZn-)DITzrN)GV#d;qj{*3efy1>Id7iD$8Bvn3o&7$I% zB@&Zax%^9f7nUL@4Bx!oYRCNs-(IAgMw!$^LfvQ`H|_ak9%>l&#q_HkBu<{Jq?~9=9qR%l& zS(P1*UaJ_2IDUxDs$71=;-5M4OaCxoVfcw>xo*9fBmv&hz*QCAXg~%oi6(>lRvnn zqT>kg2uM$mpFMi~_%YJY1kXnZm{_E&k6*Bhs>H^Tu^Bo7N3dU$vv7!rsrqLjK39I{ zRM|edY~+kX5pX0P`1RQMLwq*p8#Q%U;2iv0X=rG*XFsGSqGoVdhD#yWVwd zGWywux3V|Yw?MU8M}TC7b4c^9-!9wvWUpGlii_bvdV>-@pN3tqj|q$j3@a(X8+(*$ zPh(G`u6hm}qxnL7uK=;n!tJNAM1%N#bH)l$Ba-9V%LHsaE=?b9+3Xup@sTQ9OHmp5 zcEg`t!k=bmPoPo%EJ|@uFVSew@G30iYe8^*yL1lT*#eljpfq7rZ}ck^c*x)ndDXVs zxc@ol2i)W}4FRr2>?_7WXoB)UyfB4zp#(WqISQRCGkd)$RnNNYlBe1=c|3{6nbhSY z+#s8Fm1f?-`W9rlB520<&!ka=pmx$xAqbJK)=2Au`R=Z1Ib7f;y2ZdSXdTE-C+Q2` z{kZmPY(c6bAa7HRvw|jUrez36_fy3D%<=mw)NiROnxC;}UD0j#y%bPX66fOjgX;BF zAGsSk)|{NGZ?M#b@HCt+4KP)TF?XEx&vO6O8NZNUyySeioZ4aj!B zCKX34m=1!b`uu>qmINaf>}g9im69)LVjj{zy-fJ%)%R6!-H`a?OSH$I7-}GdGOUXa zoG$k{S~$vG{`ZpSe=GY(hC($|8Kma}h&4RCq_5pSP1SRN2P7@ci|-RK;(o5w^{D;< z*FVI59IalG#I$jn{^0ig?Mo{Z>nMu*oV5e{*119<@Fovu4whD)=nMweP?w-Q2Xg%s zy&~7=TJ!WWOOo%!@S^9l@gNuEVv{3plLIAQ^>T(v2ej=iz0C{7ga5y6><%=5sYU4z zOe$9|U>}Q7eBC6cZ4Dod?CJ=;K_xRJGPq8cj0%cxs^L~Z`T-|Dk>4DA{5&vZh%dhdL%S-yz{r}6hh#wzOV9k`#d zuEg~rNz}5_wj4DBPjA^Omk-|4*V-IYhE`W^3~Qif$csy$cR-}roA6~iYy_kkIp+nf z077^LzOM>{5-&5&?G#>!kl$5V0`j|bV>Y_)L@^kmdxhNaPTAlH(YbAoQ?9y;p-hNw zd|gAlqb%gARm|-((KB5B;QQi^&Lr>X&*rPdWh%XH!=*CL5E~(F{HbY-d zkl4CY%AqxK&S2GXv=$6)JI3)}p-1?piS(%y15=xr?2CZJJNK|ZlO=n)3-+1pR{o0j z=PES#1g(Ylm#8%x;hgoBxeL{!_5e%nGLBRzNMToj>O3FlIVRKm9~e7v%ZK;bBCbG) zPMi(`1bvigab1#AQF=n9on|!lw`Rb~G$+#iDRfbW=`|GsivpZMgJL z=z4MAR!#V=KeS|72E(GDoTgvNs3JRFG*7kw!T4?zPfhT*Yo1H&vvq$V8K_fczBY19h}s zzjN_=PXd1X<^PtAs$P1jZI*jnYc^W%y5Dm5TFA$>GGm{e;e%sFp6P<>dZQn3{6_q< z`xx)Xf582`j=p@s6FR=A=ay?jmC?P0WQgNM-!7?5c?;*{HP9KG^wP-5CT$`1q3NT=9wgj|Qd}LL#VAbjRt_ow? z5kG2tgx500NVj652$%S#amDR=Ab05zgt@&Tq&VPI)X?(LC}J*(G;R#zYk)|#|36V% z^Y6tR%08KTdym$85CrF&t)(aaN{~+6@7xNxu5LvM_T9=7*2if7w`%Y)BSVv%95dE` zhNyi&@5H(U>T8qRTNBfsg;DSpXeOy@1E8eH|_ETlr!-F zci1?%1~Tl=(Mo8d27{9(31SjjB_}>=X21Jb2@O&CMvfw3Q&Y~*Ma@ppt1lQR#WxYF zzJbd}t21N_aZhO{s#0cve&VO?L3Pv&S`pcy>cCb6y+;m4OQ+-_ETD8j_hXrXjbp*X z#;_GJ+{pJRc2s0*5%X0S@Wbrbj{3_+H8BX~!8j*|F!Lowk&XrIUd|2_JQz6T4m19| zrtqRG+SQCUWe+Yjf($JRfw`q1tu>ENIj;)%d5D~Dr0#`(z$L)*Xsh+`MyCwgtM)(Z z783hD+1Ir~EJRQ5VwTOr&=gsdC>L*X=;kR^{lcog%~3~uF*Yr;Mr`=-X{GT}rkzF~ zOab_i46fTETO?bj_LYJswRK9fuGtL*_U5hL7tNBwk8;*G>>`s=2jDF-;xX4sB)T&P zPS?<LUb z)puLE_m2WSDg7&40|#Ak1JI`)CNcwSgdrBM_oMd#Px*~+HUDj*8iktzyfbf$_WTbx z2p=z-1q#upA(EL4U7&b>=KCbKin9ulKv?F%!y5kFXKJ{2j|(n}h^I)a7&rS;qmdz8 z62SUd=L3?nA~p*)Y5b?{V3-XRB$fa^3E1Io=c)eNBcs{+7ZOt zf`UkRYu?{TjPuK3Yo}85F7TNNLv%w(dpl}2)BLuToSod^JxZGD?~6ui@Pb+t-sB(N z7nRyPhyDKhNoJ~_yLDfbJtnHWFA+tu@v|Bho&8@U7NTZ8;n=Y(6vlZ!Nt>og=TsPR zEj)^wWl>GQN%Z!dVeQ2guM4W<8bHy-^w~|I zpPQ83U~Yo7I8KrS63nfdC3;`;VDR%U=2`Ja)$GtE^B7^IWvK&G4==Ckw^pp*%4*d5 zq>2ZuO?;m&rK=wIQ76kRF{ZY4{5Iw^sDM+TnozCc!m2}|mZk;smJi>1GJA76K4hmS zM-7zPQ<|eI&T5o5*h#YSQmBTOTI2v|1a$oBe3T6Fo|pC?x#etnr|)0#CrHg`u5!HZ zDWTBu9s2njELL7BFG;D=*82e$w|SQ&yjK4Mj&kUl$*LGJU(pU9SA9p4!;!K{mf zA8-hj9(saDe-M@)xpMi-T0_^==@Od<3o7@E!#-<$!i_f=P2L6YP)(KfS9!C;LdU&_ z?1|V47oyd^B<@=dI%?@fP=bkv?aQ#-VfuQ;*)ombkW)=PhQ>q0#BjyCgo0G5lbbEE z#`r~0;cdNVYur3&0xt8on8|Iph;p8Aj zV>sYi_QA~qiYRlerc1pURZJyPN}j)U=X9OWDP-V^z;JXg=L72VzN!%tyBd5vA-xeW zMR@ZKy;JOE6YP$4>}RK3NsaGfL*$A<(}rO(f(7*-#`DcgB1^-hg!s;ORAmzDg9goP zxCG$DDHGkjNggesfw3nFn8cP9LXV}jbu1Efx>wKpCaZb$9W|`w6(52)O)#vt;acEXQ)o%aW8vab%Zwu;eSEKECR)_?M+BuQt3jJFjLQ9xoZ?9npe@RuSk zD&N_@$S-F=&9d$RAE+0T8hAsFEKW}7{}(wDQ-RBYjM4ocz2m_EE)Tq4bJ?7Os< z`4X*I2wYL<)XVse`CA8;QxJ_5sG0XBikML*6NT5dh83dQBnv)>lH2++rmm1Pk ze)~Rt*z@ZMdyqxS*J}A?0F^`83m(nTH2OD#IN9dNFor$>xBJ)+IGYEVVPfMIjOcac zD%6-R{Qfu9$mzRDate-yM%R(87VOwq!DvMy}-GKA*ga7!pFp-Kjc zzSJ6-)MC>-uEI;#I)5qO#$%dRY_fr#y1-P{%bWB>Z90yhi6m+MF6Xv2^XBu55~(o! z*I%Wpy!2QR`RdhG4sLl<8ka zR4-|&Z+bBe)ZQPQ@Agf8)oj6n93@nIEc2$cUZ#Kh3~(j;PhzRkvs=ZJzvus6NhAWJ zcqG}Y?~r$_QscJ9Cr{FmzUj>Gqi4G8y58dZ!I9Jp#sYhg&5+}fcV1^H@jlB!I=Y>C z&kO-;4Md^OY8MfzFgG>|`+i|zGLXd0Gt0T7j3lH6GjNq_Kj7xI(GojLcxMH|&I_s~ z1pJc(_e=p3gp4Lpp(D_&TGw-iY%L)GmnvGx;na)3Y!EePO=(ZxOY|TDXJ-zX0k4!^ zO8z3rYu}`FFlHYyW&mua-kwb!NTO~Za0whvCY@`HLAlZ&&^xoy&ru%1_uaPIb6i!d z*FLd7D7fQNGItReaVv0J6enB0FEv3rGzQb*m0keThfO|d)k;YeiE zvW%Vl2zK@gj9x^pI^xv5C-u1$8(ZEnQ<`s1QS;0TOzfT zAg(u)pq?2l={5%c`dW>OsO)5FSDL9ST|%e_lo=^clzt_>Jh(JQ+__=4njv5LdzF~B z0O{oCfZlJF>vn-`h@ZH2tJ5DeC8zp6rZg#JL>8rJq?Jl;Z9f=nMty0bj5S4POsJ^h zueU=u(cx%8VQ{SG(Ucr67biR+9+M19Q_Bn_@58?g10*DhCq z(U|&3yor;fjYhD$a4zvgQQS2C^wUP9 zsX3c>Esb~Cg{doG9SD{$y5>hAlrc%PeJV9M>5 zZ%t=X&$2v;+?fZOv&!yt@)t=w>v8&eQ3K)!I=!zBF=b2ouDcf*TK|T9on7WxHQptl zd?HpFZ&#prKB!OUGsRJ`2hSb>#lF&~S0=$KR;o=YtsdR+aiVke3X`!|reO0)HFZU&ut zqk(>0JMAi`&eX(z5;e!*XO*h2AFCPuN6x>BQ`NpJShV`oDU3A|MVUh=C&`l-;mC-$ z0$}}CZ5(RR{YNsB8Vw(s#-b&zS&*lG*l-kQ7NNBm5A>sB+0#`3W>+cCWF{9?U?o(zsGQXfdxK@<=Pvs{y%x(u`?#?YLL(Q)1>{7geJ2c8qVMk3pB5UN z`LX!pk*L}izOC1|6Qa-9g}t(-e0C(KwXF&8C@@QPjAYf(h( znD&5XETF4(w5(bo6(ZH3`kFfZO43c=Tp5)+ zXvJF)K-E>*UT+G?&ok;9Kq%|lVx!Q&M3L%)*5L}Qh=keH{h9{ixlE6})k~SZjKcyV zT|poh+8hsNG&BY#e!He@%1_*e*87iAo>Op^)f}XYpNoz*GC1#8>89rkK4oj?w2v#= zO#jp+?(C82vDh7|m#umbJl7P#Xs_6c^-JvCk_WiSe1%pFh6Q_XQoZjJ4g4te^lQ5? zA2B4M_{fy^W{2@6FKxukP<_#6wz;0O>navFii|KWQz?h2)ltvOF;zv;)5MR)=@hgB zN_@!qkFwEO+X#u#J(_m>S`uF8py<;&a6w1{V&m(pTMCt47&{D1<)kb4NK4U^nV6jH zHGv|NX>>JthkI4j!o9{vyL!^55j=*-F#=vRpk_$nPCHX@qvuGV>eK}lPjWjT3(Tj= z#|Xz;21E;x8{^sjau_s*tnDlo>zqH}E|lwof{tg_uq?%ki(lmqoQRj(E4=7%@=g@l z1YpD%&>yvWrg3wdNwI#tqg7m|UmA#I;u>Ixr`f3%Bj46xmm^K$7)2rW5Ok+P;tl@3 zAsd-=nO|T2m=zL(*3in98ya7|?5b&{`K@QS4}7xX$?|MW^xf=cW!Go?A`{+P1xiHV zKz=9rp41CHBw)lmG=;i~oWWb-eoG=XXq@V98y^-`tkHwwa#apPqjip6d232TDx6wL z@XI-nZy>3h38D_CiR3u%d+6WH_%5p3rx$5C>7LRBcCm>VnYeS!%0N!*S;sgk4=#{s z?trj4vIgLDhJ)g0mVEYvWZvSI4n7Kr}9ig z2rzZ)^UpDTGPe=MZSY}(2(Sc=uyfgr>{EPB?_*^oa|X#6wxY*(A%R*`H8HJsFsJQI zo_9CiMBfsON5EboO$^VkO2_o}*6B^Zlb_xMB19?@0>#JG<2L4dy4-m*^NIlui zswU)ACrxv`5Kor`npYUvL~vRMiHc2gFToY@$1|B4Op};x03{f}8j;3(3u855!)1ID zFLY7Fb2(kn+p>L1@-_+*CkBlJrNMT^NOp_m9{_G`Wj$7hF{cSUObUR3hQ1sLq~f`^ z-|B}}^fr%~oUf92@8r@RCrqQC)~ zY`hG`yFln|Bq|)O#W$b<*QnZQu~vdN=gVNj*~Rv*v&oUiIkv3FwsdTfyIRetA*#In zl;>dDIJM!_@qptj?-a-3AI~+ZdE1>9@0sG}oBlr8TpY6Z29B z+vAqFO(e(yZke1dd$>=;;!$nldvvg;_oi%7?H*OnsG&Q(``)i(MFr?s(p2IM{qEf` zW2?t#ovE z;S*S@iaL#lZ;*lWP{;V2>Ra-sxc0AAp3|#{S<#-y5gzMVtmgtFEh$z3GCa^YMb5uR zJe*r!lw4TnIZ$vLMah6IjRm@z$1^Kb6f>eSIjYJb*m%X)*Oi1{VF-(RS zmPsKmM9DeWyJq<$AXk4Z8oK#>r!ieB218pN&qo7|X^TYDdZxdq`^r3B?F!=IF9i%`TFa36?ZNBK?LauO$SoSo#**57n9nikOJ<-b$W?7V#`T%7PiKZf}iFw(WRnpzcm<n<;|^G zWFNWf!R`$>dCoiErE$qYk}x%${Pf)pzpSCRO%!jcam>yF%Xlit8Q_eRHnY2{L*+Q& zTs2j#rt(&*uU&@lhIghXOGj@^O^9&WVuiVmA%_>68H|{=77wQVRL}8Uhdvd^G4o9` z|2%d8jeUI|7m}Xi)JFkkypmwF-mJ*Yb++0-uD)$bmzBbrnsa*R+|b3HFS(aNv#@pG z!c;$Re1Mq5!9ygqQ)>dqqc3~;BwXqR1h-C|P*jTZ#Vb9Vny}v9l`6n!Tjz7bhyW{z zbgQuy<8)bd21a)SE75*okE6K8oix~pqdWpotsYO+o|bgB+bBI#>D2PF zeRMXp^L+4I_ZW&ou`S+$bY>%>xG7W-Z@9!wqFA+19YL;BO(J-tX+-`-SpyqU1!sSL zzqC1NmaOf8?KMgcxZZ$J#)Gn4Nupsh%)}WjH&F%#2_?0 zPubFn{9s_Mx#}l#Dxb#B+6=)i;qmf3kP!aK5Kk<#i1Ng| zCDr>~>Hxwsn|1Z6nq_fWYx#H1vpRd`L_~~SsmK|$B=%gpX^vk@Xe*g)BzhkO+(Jq- zxcV-xpNkur7HH+~z=5BolOm4P#n2At#YQETIiiMsi5pV{`4(-+nEEGalkqFS-1{$C zKj1ne0*`*cwa&Zea+bPg4}unE(ecyx)D(TqgHHhpi$k3Xw5B1lJHtDQ0|N}AQ^9KI z&jQ%4`sqyvxEG^n6LVwND{8fftfa!A;;I?T6tT0L!Ng7$Cg7R~R1WfZY+Msy4|EXE zMzM;c)H+fR`uRdF*i*UNIYl>Y5K~gJpW)u`1VIF)Au)9K&3U%xh@eGAwGx23>;?39 z!drreu}s8yxxZomlo#zl@GDj?v$g+TjKOPKTMuwOI7NFbc=(<(HY_eelOjx3^IKU~ zL0Ffz2c#4w1W@~`#Jh)?qX>=2Por)?ccs^aSbPuvUUQYxe%#xo%#(TD*dqGvbgH{W7N>Po6;pC9LKqj~z;+@goFN1_>98dMdE zkE~htc4PTNOGkvN)I`uWki&=K+L3hRn*B(v>Z@r`%rJ+f(5ggI zo%F6kaxiE)pf~F%Wj?LeBI%53oe`vF2B^=Q)G0zV#RBl=Uvow3(+NPmxZlzyb9kB< zd1vR)ykksOSt4rG2$vi*s<9qTkH2ym@IomK*V1#{S1MOykROoTWd*%`GxuQ~9Xob_ zEy@uN1C&aA6iR97Kg!WGF(7D7nJ8aD}7938K zvu5b4E`I0Y1EWR^HEmyM{z$?0G37}_>-l(^(ME(;dUpL9C7gBk_uwh_o3O{|S^P-EZU+A$%MtWGqeAPJl9r<|S z!0k)LMPAR6qf2ikdUk-DwR-O|)3#3^tqCK#Ly_KcvvctIAi*S$y@GRw4!H-Ib=*PX zAYn`>9>Tt_OuD}A@@^h8DW)phgUp9UUMa5}f)h%FZlRLTJv<@KPh`-U0o&UOPKfYh7aaGb-(q zVXx=bEofEMV>b!4F9C3^$)1?b;80UXOAD7c%^}qQhV|hXUEfZM_PM4JQ@Tu-I2mVA zmZTHw@wB;Jf0vY5(Q!sW6anhk6HGCKn+X|W$IfWiOqA=8EOYr2`C|vRUH}>1#wNaa zitm?fW=GrQvkuSD1K)^o+LdD&{41uo=OxffC7fJVf|ckflr$6DduYln0| zq_WA#wR&AlkY2TqPl#K~y@4Z@0Sn`5uGQ5RSt>477dQaa>KJL~aN`e9WZxs^@du2i zxBroWbCTY%&j;yjmitTgU(^%LQ7%|~w*!6%`ukARF99VDF8%Rhp;55&J3=&E)&qLH zOPmO=ur9$)W8#&{Xh-etx>Dmg%|9~KgL!Q1=*omj7X>YAd3Ct?&1X2svh=msH()7J z0_*vy%(D<32k?EWk4B4ckkg@k^F>18fm?Hs@`?VJ>pmVP{r$_vdzF?P%cjNm^%m4i zfM-{@0ltWtpZ)*OB9Fa4-XU+>)*2sb5&>nbZM-Y6?p%pJb?x?CgrwIj*wtLV_K|7H z67{N~S8QHPO6?_&(TGYsKBE5$mi@MMNH#*+VbqsDkjNPa8itN2gS~@B%=JZVCrpG; zfS3f~^{?g}f50_(9Eqn`W_c~VGRSm%E7dbcWD(gTG?1;37&iI<;puadk}~}`Iw2kc z=w0ar8&gC@@O2jJ*aIBhq?a~&$Qd9$+rvu0WD_)qoM!QJmlX1pXB_CxZSRr$cAv4b zCTuP{-a(ZZBiTW;dUWZ)ZlG?ZoKmgqqlnU;g}r#c&T8%vBm~E1BzE%HX;#;?Enz-d z0-%XqN+pOFy6q=90o1nD6?B}CNbsQBVA$;{l%SH_>YtI>hFz=mxI_Px~o+!D|VSCgJ zO|d|=0{bti^j$y8J@iE=@*$R^1zBRWq9i1W6V7Vi8|N6RC9XZ7cE8aD4bE1(73!nB zVn_)FOWS_1gXTHDt6@vzZ7)DZOh<@Ksj|*58bJ+UXSCY>p1`y-RdC`f>mDe#@2r5_ zYXqdW)K?#gO~Ufsv0k=%-JUHRfm1F3C} zn>+Vi8@a3@CKaJ&iP~u^8_?2T zTCbwsiH>)uVt#9bMv6mAyS*TL$OZBH1%n!$P6y_Vi#s#_`bqS!zm=9~4|^ibc>b5f zf56RPz;e5ppTn}bVaf2YtZvv~CJ3-}cz8@WQdUtFL&uRL|H}5`=PV-1v02Nn-+lPQ zm?y%durW_)J~g=8A8GL~Ul?H1jb!)i#Wtg>=viBW#HQY?Sq^}l;u{vQNk_pl0SZb@ za*87lRP`K0R*q#nPk?w1s72hOSufg~#WukFsV z*^})j`0)k#v6r%Gi!hoV&K+GEq2;lqh=xV(kyXh#$zcYFq%=eFT=&&J*1E~S(YS;x z8;wQD-urQ~SON+@WNoyoe64xUeS&*!mg+}uGTpV$KOGg6eA9vNw|Zgz(z44e?~5hf z7)T80?y?Rs8EsPJZe5V(>f1g%c|X1Ftja0>|aFwrgo7SV^ivt58E6*l&_f3*;QZ9 z*96{|l*54X6?*4wbVz#v&S=i&leCb*!`pj`xj-b`D#e9^8D)6H=;S_1JjKqUCkCX# z4(*IajPvu5LjF!y1K}4oSf7w_0_+BS-})_XT`);@Z!~kG!;Nh)AaBc(8IWGcK7QTi z{SI`@(73APE7MG5rMSuzh=#;}U#6NTn?R>t^q=msrYP1uhNG=n%zX4JAN*`ZMS5*1 zWRfB!(6fydse-5Bm%g|ye=Xo)MjPGv0aq;Ep@&&+7_|Z%#^u0>Y`uY<2T>zV)aTwk z=*LGN9X_+BhP&)%a0G-zAzdZtINsAHw2)DD^R4a!m(zU`i<~^2R}TQdUopd@B>aUEi|^g>-^tYVKWGoo1b1%poY$4Ot^8E{ZCi@ z+}!xq&4&e=*wycokOr-PV^!V*JrQs_xrM!xqtT#f!Y|F98$h@Jr>l-+q2YQf9llaN zhqL#}(@^p}lO)}@W(mH5ge^<3Gb|eD+${Fp>H$7GCH5+q*cCT@2wr! zoGs6Xg!3{yHvhO*KMo~U&@d)tdwQJz!1CN)aB1A#H8=zdBm{SDT!RJ+?jGDFI0Q&=hXjeB z$!l`&ow;}B&U~}pdTYJ+pj}E$3rFSlxP&xz4 z8en&<_gPW|j$Am_i*98+5M@}u?3@r|#-?652>#UqJMyav}0t|RgvL>vJyxIx5O$%k0}=CmO1Pr z8+ckHv=XjtoY#u2_#KqnKi1mo70C3sOf$EmqJ2xol;^)>Q^kv;k+2_a6k)PXrjo*- zhgFa=1|jy`(h2wGnf;(=*>!Iz^(9#bPt)2|=4}xJ2FlfDu6NE`J9Z`nvrRt!t#$dR zxa>RpDF92my1&|F=nuIT$Bn?~oZdHesdsi7c1`wJHis8UHJ-jJ`Kyjn=6tSNVO=C6 z5~*+Rj_`tW@(qQxBbc2NiwP||;DA1dl4bA^R+X<2-_5!RGPa+kC`~g@jhu=6R_$*}0&&;o|yk{EmCW+*ga!D)3m7 z(mKzeQk;*N%e*%P83X3+xj8J^&SPYfh){~)@C9S{h2VbtqK=slBG3Uw&#d@Xm83Y$ zPD@X58@t%-&8AeVC0cA6zqFvuG129$q!x~>Px;o8Yb-(HlQIuiF;rGBl~0zV|#AS(`B=Bf}qofmzYEtX5%8e3|2UJewM60?3h zI8ZOj)b>Q)2Dbb%6rL_VPAvw)A#8P87N{%NUUczHNWG7tw0ATJn5H=4nB+fFjo`z+ zG2d@eZ!~yC?cACsiqqvhzC@cn)ao8gzZEScnCR%Njtf{8D+H(cyjHhEs{MvNF^Z|2 z*xk^aD)>ZZ-sgT)4&`0NVi-P&e|DZ#s01smiB8+2)McH&zs9c~ovApg@i?7}?P3XX z8SGTDHb!I?dlUS28K5({H2o3z!-u=3Ui%5izW;vDc>DQAl$w1*ouRXE^(SCv5l8&> zyCVmA#$Ley@q^xA4O9rPo}bpX_!n6zj4GGgzE5(gl}#o4{Qf-TqIoyyr!y_Qy6WW4 zBYsw>0uKDEsuT{&qq{!=!W>UqNIx{keH76MLXNm0DQ$gq;DBH;UV1k>f;o=W#8Trm zzLO7Ks}}FP@GJ*GZLEI+V9SF9le#{eey@44)OGyv>*wd+yIy?k`fL>Xp$rf#q?QhE z;xn=MEY;_;BqH%O)Wagkx`sxLClsDXB=4pAt1{^$)b=~)pt6YM=S?h`-Hf-5ZZg7o zbT|Nh$B|3X=;W}q%5I6~vabf71tHI}F4jNim7C1DMk-4@C&DC~6M{GK>ta?6TEtR1 zRuFm0@Yvf<5Uh{<4z+w;G`TZZ=qmlb)_ql~SnG5DIqW0??hS`8KLK*wvGyKzogOPG zRF2XcWw;oFP2H)>FPo3W6c{;k= z$ja;Ql168XS}5REjqM-#n;r=CzLZv(GQ4)tQ~ZeeNdcUb77`A<7;Lm=Xqj=P1uBWz z$NG^^MFUl0&Igfj=K$_JU&~7o=M44XxH~kno$60U`czHI2f~ZSwl&XXL#xQaO1Vwg zh?HX!S2JWEdFva*_;{Hro9me^ebh*SHy=}Qyy;eIdAL_qWS!VN`*EerE;T;CqO@*7 zT$d^2g(G~8o=%cACXYh-=>C*Wj9T{vD1@kgv1Dzho9WPW6ynl zq|tLuda=GA0!G&D{7mGF{|LR!xcepgcbgYzU16quH5Pic70Ws&EZ+!Tpg|KKMcjM8 zn$L+;T{Jk~R7d|Fg^!NQ-Xv-(3a-tIJBi-^5n+0%S1)Gm7s$7FsEAWZb-wjB>S>0f zQr{{~ld=d!ByM2ZB`Zsd&iY+W0$k1GLy2!qVk)sP!hOYP>i!?rAVg2ciA(aVhR=MvEq5mfPlqgPJ1d4ANa(I4Cl`?oFX=ArUTYA@@&0!aV&i()Z8!yX5pi!9|U(}W{@xU#0wLQTyqCo?cRMTz8)}hRIe{L z6riQRxYWoAgBIaiQwuUBcP{Sf9Y+mL2KiOQt!)~+?4xZz6VfAV>udcmMKJWqty<6{ z>}f|1>t7S0if|Rv1yE&icR5Zc+@*g*XQGFwd~jX(cf#Mfmas_4AL{y4QIbv9Rj{V- zNf7BG8^V!h2p#$FG{~F4z#Tc&X0P5i-@uGb*uS;PQv`yqBa5^+DRjUe-0SaB;f;{^ ziz!#NuK4j!-TKSN7ZYm*8Ui;BgeYXlX5_+2XqN1VlN!!)Sv3nfVo8X?I0&p8%kh>q z=SWP4dskAQDKky!6*{Nm)RNkTWoo}q$4F=RLYx|kJUXhkBppv|FY~e1ijy>2hh5ku zi=AZzNk=G4qmGMrpP6TJ%-NQIvGD~qyz*>wQ$Z#T6KxDTDnrA*K>3TNr}8eT_@kI{ zGSmw6G=W5JA$|0Bx^iiWDv|QSr5HSFtlWH_(8!u&C%*Aym5g(o3tMG^67k&2LkZXb zc%SWBSS!ljHjgW`LjKnBHC%;J4weW$B7hh>y5O#lMcN{+o899zYQjY#GNM(|a#RJe z{&cJ%D>F|D^6Z@Wo6dI)IFS@-%v?fH2&NskH86^BUlrX3I-1wtSJa_FJsoEmdE%7W zi5qSh7~|ILdb=I>=iGE!i4dWM@w72TlTDHZ5F-z5(&cke%M@-gzz2 zz%zbwreGm_ih;xiK*Gyo|3D)4uMyav07hJBL2gx)QZpiu#t8cMf}ssH634_`HhHXlo|whu`$T*I+H?6&$qt$R!V zgbVTKkWT#>@$Uf~cJ0nNo(~-BBp{jW{zr&&&0l}x{0BiDSj8T4zF3NphqU&k5r|i$ z^4S6JX4r6WH(xlXyl4`PAc)_;@r0dMR-%IinPyH+c+l9woaEEMG7}~4I3J?3Mpntv ztA-|fLl0#AzQuf`X0_B*;oEqKBXE@@UWaPwSmWNm>3{R|;;qs-Z_Pbo)y_>4ioL~Bmv8i} z4*x!AaOd6kYs&3DL>~I>L`rE7PM4VwQGD?cXpJ5YHhuW^>n@$QnJP5O{P1DtCo&FOHe9;wiSc z#O+Hk-8rz3ffjB>R4n<+k021*$Q=G!htPfP5O=H<@!#I~Qq=Gx)&lffj-Yz>ju+}t zw6y1BOuZM+n91n{de*MvWim-EveRC;Xz^3ielaWk0-u$G(a0;WLJ8ZHlQtzOgul}O z1xyIE-s$=oM~~w2LbjMJ^#!?Ntu`EnokTLYl~*@9*CSL}yk&ZTeeWsoIrc(;a_CeT zt-i)vCR!gQf=Q)i_E^L{k%<=#85nYceVnN?%Ho!tdVO4G8{KQbedl4b8{5Dk&gK;JvPcCF!vV4^#T`Z! zN5nUt<%%Cdn~Y!V^uDhbX?Im8>AjHP-Gq2P<)#mr+|VrK4NE3g=Ot^)!OM<&_i^5` z4|r1HGmf+7CsX8Jpmo}Rc`CEk`sBj(2cAT6dYyv;W3<{ty6r~CsC2D8@zKSN_}ukL z{s+&!Ly7s()E{B+*Yh8+d|pF)GIrGaRG1b)`cZvW@$>h7A7gN9k&GE23I;VVwCX}L zsfjA7-wC>KX9*D-&^*Oy>L8$b2PC0yF3g~-=gGYIF+GKt-X);@6xIDo)p=9hbFK{( zT34_g9V$buiS_O|T>(_0c68l=O>;)5!OEm$!L1Az#X3X@C-;kfY9I^TWinnN&&BIc z@MwNR=yo*oouL&1z0ZUu+cZBiGQMKU8L6+)4wg=l@qL3QV_iT4ArUfqMH4i;6J7Hu zid64)oy}77%AD#eXo}rTmeVLIYWJm&*1S0*vfV7P0i0j{tAn6$R01x*MPy#YbEs}$uaIkTw$&D)~5^YuEd0nK`#;Euq zH-c_EtA{re2rlqCx|Y&Ruo#V+=U(99iMOKx*f@BRbtTFnB1qpWfq7zyvw{A0bsq;N zd)mr@uC)lLaJ+pHqw@na*78(<@x}MWUql^E0v{zGDnR(vXn@k2XTTkF_!q&VI(Qhe zmTwE-oVL%U(cr5xBUQUG&QEc9dP25kb{aPYR_Jra7D>2rdMkwZ0hQl4w$ z^T?Ae`_UDu=c{~gBjW6)2`9?MQfv`JQv?KFG7Vs6PJsR zEh$!%(O1H!FhiVgTc)RmV{T{oG9iFNE3~g)O|!Avl|B}-qHy9gU|@BwO!nA9N+Cp4 zumTR6KAG#4X%YId_a>a?OV62-yVJTMb5MEl2cdo$AlAhlzmG7l64xvFFabsOd2Wi4 zd|#8r<(w5DCgm-1 z#QA)ik-cZMs|;C@mrazykCkA+n7pO_T0IJt9vNgxj)q-#ovuhSTj|_$tKeteguPx+IpjrA;DGXdI1!$1RpRv(CnV8y%#8 zzsVrVbR{vjS#63(xj-k#sAYL?87>*QF`p_?ImgMn9U52ZQN|d?53%DaqLn$52o*}) zi8GfW-qI*A8jjVdb6?*sB^TD@x|#+7YDxVF-P{dsir-C@VN?|xsOyG~(! zMLgrCv*K`;c78Iao3|xA)F*=zcw97>aC7a5 z$lcG&mT3$oaQ7ZF;fP~*uBJ8UK555`w{pOj299PIJ-4D<6hStr(NbX%-n2eua7jLs zOGi&*cAx7DZLF%qQs9eXC~&~hngTZF5@fA#ScBGWDrpkvTwfrt?5W?_P)iqslkDb}rC{sF67d4!Ueb9{ z=&rHiEGsb(j_e zV}xyaB~fKk+aX@XADlfjr^-AT+TSM0EE*Ki@9=E3MCe4RpZIQeG!a;ET^y`WvF(7E z!sREckf_Wx_9SPvr4+7&v#Z?2hL_f|&SDEC$2J6uvHu6h9Ag^l$5W%KY0047V+h?N zy2wO4`=-6b5!>0_uhEI_$I#SFs1bf&f}F=)bgz)`ZOAp9h2Uhs}U12`JTR>&8s%v_CcJ9$u-2yU;F|MnA*?jBNT zk;JJwT`jZ`MrXO<;}3UEnz)*aFIVR@zAf?SO*`5yT||odVsr{wy7GA;g~?a*j7ani zv?uv=y@*EV8VFnf4@f_0q9kfhe^d+Mjs`f5qs_*Ma9@+S+s(ukl#41Wv<4@QCCeDB z%Wai2xpW{deuX&DI`PzW)~m)|WU29$c6mBYG%;I4!o{U#tEmoXvA2PZ0YfPuMpXf-IFtciS{0;mCrTHAq$0i zj;~@oMkt4Eo*LU9Piq$*rkW_#=!g#^24RXlvt2#dK(9tNMEW(!wMBI#xsEq+Kf*$?SZUP!}ABTVnt-nrB%BF&yebi>T$W|5*w}CPBsv>DLDJ?>JY9ZLk z#Emgqlm$5~gw=-yJH6A~#nmK^PWiJ+)KZWF=5h&iwibGzoj}kkolE=jK*+BakI=Is zW%Aw7r$_VW`cl1*ut{};tjPxOzLX3c_q+~2(O&Jes?B??Y4Ag2>?O-KGV-VO2Cboi z^m(5y7HnSciP9GpkfhdvFJj7YUgkFWIOQSnr3a4$)@7pkdCuqOL%eKku7js4kqt8= zLxO6aCRwv_FbMiox9NIOdTi@#g$*Jq~u_VTW{qqf3 zyA=?04l)R%E^=J_fcR}rw=Y1t1dNHamukssO_ytRluN;9Qat+np=VL|~t_sgx$hmsv%O|+}CDlQw!JnR4 z)`PkSyq(`hIY#J2q|LLIjg4L+F-V5cW6-`urcAg>w|P80Nq7VO=70EaM_;RnmIJYD}lT^bV_*A9_0@ibU(~TiMg1}wE*<}rHpDB zffBTdRZACbg5~{;Ym#u%@EHIOJc{NUtjU&HAshCpY9Pl~Yu*r&%5v+}~-r4wC}$zhf)Y6h!@ICR#qY0nJ~4_UhF z@anJcY5#Uh*A62W@^3=wj}=v6vZnZc6>p3|=*zM;`B)_{n=jwJ`M^h~Qh@>YCqVWl zK$3yE_OW+K+sbP4?rJv=-9`C%Bbqcly1EbfuU#bwh`r;@4Exhi1rin?dJzV?XJrBed%zHi z=#h1+7qjb-E%+x?Z_@m%;lt(ZHQkvWrBZRhab(wtECecUw_?&6(G)~)`M)9UHw@5u zV~Hy@Yw;8K=Z^h$~dgEo;Wb-{2G<%V}T&|>X~})nv@s|l0HV2dFjOq z{t9m@E=h%u<2pqsfr-MA==iHn686o#6d-gzYxZE`zcMcTZ4E4Tt(Bbu4=AG;T9ATeJlMw2oPJQXP9 zq+oKvdt+#yrr=807M(PTAp6XOuMnM>Fobk3z0@33FD?CDgB^j|M_TW@ADeD$!xU4& z2vaig_Ve(YCS=!~!>PzoV(SqsSBaoFio>w{51`j;YG}EpZieRC>lW@EtsL5KEHdh9 zJ*G+XV@ ztmOLDE8bpXOV5Kr=w6d8c=W!DiF9ngeR!g&H{L7Dgx%Gd2@n`~qhnyb^B0Z!UsUW{ zG@-XymG$m_(zyR6{Tsp4#J+%AN!XX*-;cQdwGIe$`A+oz1=s!M?}bkB^<)1dKU8gM z{|Nsj;7)n@_vHVnEK|S8{{y$n-{E|CF!B-df8`9LP57tuIvCD7a*v*WLVm-yQp5J~ z^8169t^Wb--yOzZfa4Dc7k`8HC&IB`IPrgi{Dwa!^k-H@zkqevzoTvc&Xa3)_yIzz z_6z=t)#VuZ?}Tqr=6<1_y#sr|0>i(<8-4*FAb)k|e~r#PMEU*&2NwMW|08d|q+d=x zu=;e5-ycR!t@aSUkh{9X6o&;KT;Bte^916#hbVddJM#1X^#}Nr(8)VGakXDK??lfM zU;(y2TIzQo4DDi2^xuIGhp549;P7^>3h5iBL{v+@&QvOqP?g9UAs&4Kb`9I)W2{4=o>DySh{hz;IPVw%m zc*3Gv5&z8IW&cCCK~3m#eEGwzxW{*lyYJ*;Uqvs+ADwxKlKlkyj(Uy_3y^F5doCYj z{KK(5gvZJM1o5oMi1i{IR>;9c&QWeqi;NHvG4?620tw$iUyg|0M2Ta`^v8|Nk2J|8@<))}eDe*kp%8 z0>Z| z&}jd`W&cB?nj^lGc~D@$=p-n#!Sus88%(t_(Mwb1%GAT}(c&D=8Xwum1*xC_?4}m7 zP;JyaZ@MdKGyMsGvY8k!ct>{#j624cT4eRY;y~MuFM)Pc*c~XN&(AAiRss3PRtBjm zYG}QDC4>}9)snKc(oKgTzdAHT&|as>n5V~{HokUu!}<dg))jZXZ&qy)nRLo3z1(XEU7CkHDIH#;?=o!Eg~v=-fY zu?hNW{PB^zO@{nx;KNFaueXw;2!PmNS;z&i)M5p4*=G222IvcdAc5xG8z+q3zD~-r zM<^Ad?SaP|slHo&l|W5bPjpcDIToUsdKeRewG51!Bw9UPb#7=#TQQc7r=p2T z8!;B9Vo~H+2^X$t?R%^bP!R&UK$#U1lcJB!3Taqzja)P>7o@Hg7M8+~FR^QOj zzairZjX*ms#Pd^wU2=!Hw+_raT2S`$gGZ)WfXWsA@rm}{hm(N_pYrfFW#r?A-!0LtCesLcdp=r9lJe~ zt&wtZ*bRy&pshOE67nVJB||2Fxs*+3#HscJeI(;$ONR z_Ze&tNI_li46N^g)Hlz$+`#|ndJm@(fbK=UmBb*Pc}_oX$ophCUg#s@YycbuHWvYVWR)?%*>P4zCq7Wg0&IE)>HI_bfoc;*$!B zMMpi2apthTjcVw&250kFukMe1`jC99{#S3kl?6c`A!`YT@L)+P8GS4nCv||Hur!Q7%Z+J41Q-!8sy=3WR3@HNaf@FRIT1V#;L`{GS z=Am?vZX@X&0jO9chF@tI*XaYC@=_3Z;ZmK#dY=ozUL6>P+`ixhf!{Z35xMrzz?F;T zFjk)&^a7XUBuS`2+`Gx){x=kTT=XZq6_JHx%Z3;Zn1vo9WdS_o+;a3sA9doiyd2B* zRN+CDBtXT&n-WZSLpPk5uCnxmhDf{^*R#+fjV-F9!DmT0_a^3oh2|>jcHw+Y&=~%1 z`;GexPgUGVOWE;l!A;!*6n0I|%_tr!@B=AGk*1eHD;^d4XR7gLj1Ffg6rb`93b94fY z0q1v0Ml99Q)89}0xxB32hQaTB5!By68St0^+3eTtCUTM;?B70r!vE6zHHCaQcKa|E zejqvDH7kl_zT`4&$%SNre=n+BQD2PIU4~!b2mA$Z7Oo1PTe)2cHSyPmV^LR9mX(N~ zKv`5?>fva^FVSsBAjXwg?Rn-n7Q=_eLFrbxn++;hckWSaUulc9p%Luy#Rzb7R$XZ{ zJ-C6EaGy60yyccmAn#F!iim=>`Uh5RxKKrTuPzT1o*sQDO8_FI^$X6V$av4A^^f6F zW?|_>GEFWDh`v+_p}uLq0m|P^768*K ze4=rjd>E~1C<`foODf|`aastTClpLO2HY>!BnoiJFh#+>K zO}+w-^Tg%r8{Fq5w9A=>2U3*5*sF9On>LBl)l5L4Z~O{Sb+V{YsWBZn zQS(QC0-}Z#VJ+&XU-@kMa~2+}Mf)&7j5g;54aS=QlSEF^s&2QP!%O`RFfac{aG`L$R_6%&WE5=`BwJp41hhx{NOLkL z6c1{UZzLEN9rlEMdpSk54l7QGiE}JczxIj#t;UO>C|m?;4~@Lz`Ft5_$a_xw_r;Md zp;j5uk8uXlE04OG@(;!7AxzL-kJ0NkLxv$9^=Y*>#p|s_vcgvw{F&?HTMQp0jyd6U zB!x~06&aajnsSSQjo5n4zFX3pX#rHxg43Z^E@M8P3W>!Ctu?z%K~gRP;TREy7NRI- za_%}Xv?1rbGI|Sw+ZA-hZ|s4C?10%FZT9jaV{nCm=!WyJa&;wH107cq4@@MLOpw*)=8m^#xKHAwO^a|I(ovwmj3;XR;x%FYcG zx?-me(wJ-WeZe%|*vC&zD)xn)+N-h)o!dQdX=X-D#2` zOpSb4yu?ux_wn0Z@u3VLl?%>mqd>Y8>e?i~>AZvw1c2cI=kODC=~~m=Z?w(aMFJ+4 z*#gW9!Eh{xN_r|lHL&ne^PKJzLTQ$<>>AD?Vol-iy1h~$WjNN&j*sif<3ki7thLMO z(UT4eAnc@h!^OyP7ykN3IaZj- z@%M^^#dIG)J|(|^ztV7|WC5-H*tc$vAsPBgWry32OEsol&%YkSyxJ2sId z1mq5ndQl~&kWRI_!`8TZxNRFktB6twk-u#CfLIRj|5rBhxMokYd#~{z`N1z}Zf;REe3Bk49OFIt*GZ0Az{xZ=W8iCMlDst4o)LR; z3ct-M<}HGhu@4SciQGWCZsgUfI76#Mh~hzaW?eze*yglOrGAaqf4VA|$3JrL?~O;J zL;wPR^od-UXOypE_-*k$jF2Y5fF6QRO@DW>1)IO~E!az43gQsM3?BXo;ObJR<2$Da zu*%UB`w39|{G)08-m&{;Dd1~0>~+B8Ct$JTC!p%tPk`YcNi*~p3}nG#r*VeSqWuy2 z9iu4ww_qRlNHn?bc7&GL_952)O8zgLIn-P;Xy}*38Cvmr-?YP}ZWNNn(^FW4L}V9} zSV({|6YwqzEzN@VQno(P_x9Er?HF7#v*iQ9l0-44UyEMtY+7O1l&8*Nj`aCNz5XN( zFMyJ7muI0LUYY2HlmwWVQPHq9;Lr4pHR4rZ%YTLr|IUYGW#`V#G$k%3oa0nadV?7( zBPi4E5k5B0H=x{X=jy}GtCjUg8La_`iXyHsX$mOXG0MWU@irq5i3#f*F5+RHImd1pLu~cJEl7 zlXMvV!q|*EmRQO{nl|a207g6&3vpB@V%Pv;9Ji`YVKo~YolGF%R`o?Ma#X8>wb5sW zXBeJeE%}x={bc2gnWIQ1h*a&y-nfE>0p>)ELK;1*sKslqU+HC`gh?X+13}D|6a4FT z4kK}gu^=Lj(7?)$a~8w0g)xv=?*+Ct53Z5bP5e`NSrX&s-0F8Vy;@^lp^nrIzmxMrX;5 z%)0z2!nuPxwfLyXd{AmAJrkL+VPiKyAB=lUWNg2`mBOT6AQgs&&!k=?m9{NMND!wH z$4t%Mk5!;rOve$-pSd;4n`USihDvuy+-T!Rst*X%Si^;6DkS9q&Dh6?O0As}xnh)u zQiMgqOZNES+vz2fWTk50B5>U-a$Z){BRgLr2Mnr|8K+nfudHg-A z1yV*J1#iW)wC1EfpPkN)RV$k|9#5^ztV1mkEzea|K3AL8mgIXt@ zhp?Y6POYPUE!R)vVYe%V0-RKN$c!fsxGpyYWM{bI$<&_!hmyc-Ov#ZyMtJVnDnuZ40^yWgsD+rE#6{h#2+%FwX z8i0-ek6Z-23Vne<6O?lSPfyt71c#c!-ZyDXaIKU=cZFqbQ(dASdAt8UjRjTV;Mt~s zaak?K+w=C@h#a5$cWNm-hk!(3rU7g}4m10<*IOOy`zD_+tG{0_y|_E>`r-BQCqU$L zz^iB7Q-4l5=z~N-&nj=T=;0Z{F^nROD#hOunI~l$Rgv0E_@?-=@je9l>-y@R{B2Yyh zK8wyZFBx$eufIGu9foGTf7|qy2#f4us{k3|sXMaf6R?kp&jw6&LRt!L@;;-KUp7l7 z2+l`Dxd```%oHFd7t@eTs`S^Yh!_pnOOznK#e1gYu0;<|o>-T^ai#$XrGcd81Wy*M zHMpd|U+q%a?T^(>+IKRL;l7632Hd3{n1nx~tc?QD6hE=Ib~Nwq%x zAU@6l01)9q1~P~kuLWVRf00&0j7k(ruJ|@#G?2WH%Wc7fiY-gvV*i@Kl^bqqCbFKc za>OJI^%TryPS^d{M)=lN6S)-|;e@GRtfo+%$zh#q=YE+H*LuD59jZ2Kz2^=)m!u8H zc~klnqT9Fcx_+=WI$ec~Gg2UqbGZ-7dv>sr?9o-49&|Cc$u5y*E@=RCds;^oACN_gkH6ZUE+@3Vqr+h^nH!f zQnTYK|7n)BZ*nPp(dXLfB4mlMjfLHdgizg{(Ef3@AZLCt0ZGkZi21|{8L#a#ct08l z3w$O?J%g<_syULn6G6Cwhr(BQ$RU&`P>SO$0YRG=4ONIosUCkn@=TI`f+U=?EYjk& z{fG^ufWDjuQ&_ejTFQdUVy#^CU1I?w&1XS!{4+)zXj*K&>;Oonb_tZP<2J_TZMn69 zYV{fwOOKIT#9n5Sw7?zFx(*}8P{+MkSfJ!Aw#t!LW|eLUxwbC|*P>Co3efa;;4KL3 zhAAa8t1AC=W~Y4irSeO@`5fT__Em3}%RgVF!-Eu%_Xd7zB_t0L+UW}w{sr!6(q zfy@t22gxMBKmg4GC47?F6?v^*BK-a5esbY_0005*envP5KMH^$K!ZF1xl$OrfZ}V0 z^2h~!ax))pH)j}WieNEIYd^QrH z$|~$9VBReKV5UfcBlUw(_s0w*E_|`34`QkR!KJVzz%i~~4`jc`W@9P#0%x<3zu?wH zgrgr#+TDGUq;1Hf4<*idHyA~EcJRsR(&W*ee_j_b@suHc>K!F@I|@6B_|w|yP|qmT z-iq;;ML!<58`c71Ra;6vl3;isaN{Nk#59&L(spE>cI^5xRA}pd>8-PVUiqyr368M2g?0Sy8y5M$V1aPcz zUy@Chpwh(9c?ZfpTzGv?ATF^6<5;ZmISvAiGBYr;kXEZJvQ8(*^rWK@UE4w#Bn!0E z!kvOyr-_OscF|^)+l)^#m8FJvwRoFb>)U-WH2$d%l&5IGl4R~*o0sGAbJ|ApO)DA|N7 zzpDjC#!u{Bn8JFhBAE(%M!e1$q_OvlhS{Sfpy^7kM?%y5KL#y>EJn$Hsb9XJB^{b9 znUQs$UW=wc4Sy+aY#DNDmiRXJg<#Jv7*kXN)vnXI&CR#i)C4v;2{F32i2G=rXGB#n4p@xSdF?1DYI~-ykE!X?o}bE~6jy#5 z-IGx{f9`au;-dnMspXcAlF+Pop(c{;SAZQcjvx%R@niBtSCZLf#j&O* zUWEfn=3E#baYImaWyZ!q{T#LoqRJ=tGUCBjMlCcvq#i5l#WLACA7LtXdeMHq0YXT#`UD0>J^99Ze)0n1c z;}%i(2Bp}K%Rn%-Rqyuq`)>MFdv0^GD(sH@#pq>fgxcv_*d#$vK@+}6`#H8qUbiB# zGayh*Xl#xs+aX-ok>nDGJXy7L-f+b{uk_s9KnDi{okTF20O`~0D7ljyL!n@t^SpB5 zJ*^iy2s6Lns`Zh|XL`v@Bs-phOf8or@5xMm2Yu(P7uAT)3VtTs49;mR!U=D-EP4&W>nSH?P?aYNQG&MKlKimsP`>1FD?SzJS26Fw`*}D?3!fwC_(zMuG8-fJ`MDl)^mC6lESx*=cBu zAkBG!q#;-Fw=54`_Mzn*Ysl~oja_VA=fRU}7kmY%=9 z{t3YP3250#GK^PjQ|T03anePrq{8*ugF~3A87{F3J$j)uO5E483VzF<&= zB(S-OPMZmJoPC5P$&SB_z77Lyj$Ed1e~A-c4uqPE44OZ$Ir|V5Gh~Oa9!RfmZ&fSD z!C7xu++6u7YY(5++^8X`5PnuOaF$TET^kn?JVy9IAi_widehxNhXtq%oAq6z^H<6c z(r{RcM+B^1Sjv7{ckV|2%C7tobv$lZEBRz~AUKn5=0V4)%VXbvFe&6aWCw?Y%h0_X z6?dlgdOhi0Nh>8%Ik6Zc9U zd#^zwY&tlgP7)v!>Q%Y;wRB8IsIAdw{-2i76h7q6M+K^_{&Oe^r9g55Y%=iNXp~4Q8oEsjq=t#26J}bHX*J zMVKma`YWZ<#j6C)5faZpND4H$I8A=$`>}NLH`wd$x5*c_T@8PF|NVakK=BFK!jDMH zbW4wk($o0}k4it^7BO-p4}^t?Y`uJooun-q*FU7<`Vt2Q5^ff<-)saWs(^)U)aFqDlrg^7DX9p1n)5XCtE z4vA}6ppOhq!TDQ$S(6n6!8ZtuY!E%I??8)&EOiLyYvJK`v}lVOY{h3jr2SF~E5DbR zz`<0!&bYAwxUNZIAJyBA7>N>|Bqy){KSVH)B#O4Y8PwXMYyw|SV4)5PPmC?dQb6y! zkZ2@If~{xgqOoo*{`!P)g^_Ix1Jaet)h9RAej78-vxvfk;A=v}nGt!fhX;K8%|1KP zbEINg(mX5;K=KyOZW4n5&aR@h)|O9+`U^BCP4UvfQr@P?!ecB0zs__nR?!@u+AmV6 z04wda3;>jA&`2cjMx8c0xucip!4^1MuSmVqhLu7azOtc^OkE+-7xWlWNf~}syGa`Q zIwa{$CG%KXN(qf!uvQ`%*~XtioC(kHZTdJ%st7(gIt`x4hcZ(!r@?(QB45Zv88xVtAnaCawYAh^3rf(Lh(BuGfm z;0XlCKbsuA_ndpbx7K^>pPALuU0vPNQ&nAEQ!~?TC+e^R%w4D%mIfmYl}5ISt+)#s zhhZ^e%YP)0PmEwG*~N6k>O0Jbix7PD+Rm;wG}*{y8?zdGNji{q*~t=a7L|#>dnRiL z%6LY#TlBP-DGD6P>p*Ol?S?vt$u%aO+KUvwqRJ7CED&e2jS5qkB1>)3kiE*7O4+l_ zayFaOzix)FBu?iT*(sI!l})_Qly1lDgcu=gLV*ImP(s$E#2sV>mClKuLs!N9vfquc zF_|*vlts=AcC&*+DKELBZvc5@oQo>Drat+j_GCW{CewG)1H#~8Da5)s1s~BwWl9*& zp#uf1MC@J+6i*vYir@kJ0;v-nMpQ9c9x#VVY6y?OK;jtQNe{fa0Uhwo7TA(=ZwKSUGgtAVtO-Y0HbKVIe5WvUCHVqgy$c`X?{ z$v!B*6pED@9EeS6O2?@_9JP)?2>l+*XwmFkQ!^NZgoO$Ij(LwLc3@#?;wn(ddWsw6 zjhf9Zuo{H*)u8^md0e9L1TPr=L>oTIek(@fox4d1!U11L9!kou;4!uY&3poy zP%<|zur9U$p$Di$G%4B1kRUv2vzkHzoQMs}X0$V>t|Dm?JAgsRqxpUG6f50~LJXU& z$u%f4fk4kN!eEFz7@ON#5l;^_1#Q8sUzH*BAj$wU3`sVB0m_^+Hm%4=F-m+C8c$Ph zYrZ3RqZpwlBYTULOMKWggV@y7BW92rSzKzMcNr>!6=hJ4Be7BxgcixOBT8-PU4%o8 zODvGY?K0V3FwEp{Ar5y+H84+Y=O#vtK%Yw?7xRTSH1VnU>ijY2Ih3JlU5>@zJO}Ua zjxJj}s_LLZg-NS!d&qc!NH4<^huA7KdM&AsM>s|41Pv3_l1ak0lI87VSg8zA6wrys z&_Wb>SY_@x*)@;JyG?i2zVLb*zjnqLD=Gkes+42tqIB^uI1b8sry0`jeXR@i97O>8 z>Gr|@dZ?EsLq7|Py0@j#>~NLX!@&^eHb$9--W*E}caaRnXt(3lJ6%FULQb+qmH&ic zK7;I56-7s+^4bRKF_Nfh-zLLi#ohaNW>plj#H%$Yb*X(QNs@5E;-%z5VVd-23T2cr zEF&)1HW-`Kh1%a@$S9<lNoSrL0>#}7v_KpJN5D01qr+E_~1puJP6 zb|=HYnuZ27dPT5x<7Tsp!PT3c$a1;Qv)TeVodxmRDbc6*3kZ`ialKbNO_D2v>Q``< zSc*$UnXriB!((IfY4b7UB3Tfv!Ws1vk7cP5XWA7su4&B)F=Qyq5->rQ!%28}G;_fF zZgXTK2`Z_~jPS^gPfUhTmEwx|kx}5HN&$UcM#bPdo^%U@K-rk+7ySevRXwJG2G}hj zI~uosT3E!y)sWKqK(6uPK7tS|p0idIansAPCQtvX@&A5c9fZJ3E2>-; zJ?}?OWo59hP|F&Tr;Tht6gAtK4%_pGY0#CrWZ1WCP!MfFlxDZG!7$F1MD~0S!-O?G zl2lKnjG!6IjmYad(4HIS=tV)%OHiy%D97To9C{r9rD=Y^7i!sF#1QNPcJ>AnDUDfS zhsvd5M9HVyr;ohqeWZvT{r2s^OO}dOEp6kVZvv7*00$qAA%@oh* zqvT$C6#XC!D*}}foaqy*n4F~JWn*GaU}725_k~H6QQVD zxzg#fYAjCLVWe80n&Ezr;s~WmGH>`%_ot5HHGLuBPtui7zy1Nlw<#vgeWdbwWK{DgV%~cG0!5IV+ji_VJ%YuCYhHD zF5RbjEG;d7_44fvrKyz9n1aMGy~nWEI)hdyS2#`bIV~|Coc*x4n3YDBcQm7mV0pLX zR;tFLM?RRt3QUWBl<_@Zd3IO27)%}1=&L$$u)Y99+%o@MZxB!+QTsmQ31 zp>khVs7}JyJ)FCGc&doH(2_XlT2+PQNmS<8tWQgaVY8pJNtoN2`C$=hAPgYW1}2vr zOa$}74qBT-c~I?$8T z?1q}EWW|Z~fhPdEh6;{$v(m@Jg?)Wk-R!8{21G}fE!t~NtZL5(;=;FM5i9;yy1+yf zh0-8r#aKsEJ4Va8qcj#glan#ZQA>pw`#xg|Zd0&e47o->k`*}^#{4o0I44#T8RAAklJ`K3z^9(CBtL(ON5wW+V}*hi;X7_WYDt zA|sLlxMjN9w_7F(_{_4;X}@_!P;&>!olx&I%1Qoz5toEzfIsK?JjsN{mOJXftrl(}Bsd38ao)@LuBN zvn-S$V)Sxnb|WERXeYo2-{`-b%E%H=qC_@Jj6PJ46vgPYN`cjM3q*f+Yf!11mQ2gR z)oN1LQhMkH_URcyVTs*fm1_@~iQoW}3|KA2>TzSo>N+Nc$WM=~eUu03w;)6ZN2jC0 zV#Q#9MwC%?zh(r|n&p z4ApT3geXQ%J9F-^P%#$K`r(QF138>Pa3;TkcCPigj#SBc$91>->o1?Upfy;C`x8s5 zaF7rXFi4Z%aV6|lsVd`9SUIaLo~vVU>0*_|EC5jbVq0!6i z7PhYR!=bnIb6e5QtUs6zR*IpkZ>YxOjVEjvG=WllG=qK*RlhJyy`o7U`@QX#=MCb3 zBhwS}d>Z^|t3-;*bmT6bXbQdrWk=&?GdiQ7R!5H=r^g05Ht{V8SBA~s2#f#JB&3xv#eb^SinBw=KZ3{hG;Y&a@O z`D@VNq&y;%Tu&XW3oXG&H|^Loln-WA6Wp?GA7}tWj_xFJi)Q^K1X-Q}X;5j8#No4` zv^}ggeB6ht+uWk{fbS$NMRK-Xj(0M{LQ>8Y{gby!x7AI%4YLXr9hGUHPK*o=6?+w*k8#1uau~}s2o9hnW)n=)O<_-G#x?MuvEpaPqat4hzK4PFNh zWP*!`nrr@;yE+1)kz;qAnc%bCgB$yL*`!#%f|6jGMXO?0P1<=@@pK2B zXz69CsPa22QdH_WZ7X?B=G#!(xq6{7I-ySx)vNi6MMsq?B%Dq-JvQAI_+AdeL^lvB zX45tsBqGALz*b3(f6%x5(9~aJ&O8=)#g80P6qB=N zS;>zuk40pMK~gnbEaf0y&-l`lkAOuog2Y>|aX~=aJYXcHWP+PQCw$ zBw3875Mg5f^_SBzvqT!&*|nQ^9@H295Z_M_4aMx54;-(OnGE~q%6G5{7!_Rkvz>5F zC?GDDT%#He_q>nKDOaXe^n^D*W60;~>uJWr89Z3e&?(CW!t6jgBP2OMf{ zvosl$1XjGWX`eBMB(rL?U(=Zkn2H*Xu?+5>VfAFT4M1lV#y1Qm>;T_EU@pRprgc_h zQX!;kPo4cXDrI^q@iLH9!knIW`&elBzKEikfZ1Qc0cEw0!b*%#QJt`{@0 z<0DSF#fjK-aUgjZN(B<)B=aD}PhG>vAW0vxL60rMfMNC!7eCM*!BFO+=7^-Nn7ifa z(W@&+ZOUW+Mb9IP6u^D|(Z%3n582ar&nOrPS{R3RA3V&s z4Te}3uWytg978m- z#M@?p85Se4<_H5Owv3DqvBO@`Qm|3;Q7$oG<%19pf?o{3_z8mezf?U+o)SkdTs@x< zqLHOx8`)9@TXJ+Jl#tpzQV*8+BHUkCdSZ2}>Fm_Y)+iqCbs^(u=T#><(*3e#=;Ht1 zqbvh@r+zMP<;TMJ8f4@KFM$`NMiLr$2EFCJ>IxT{N_{9Trc#TqtISSCpFUfD)$I0d zCP+bj3_h2cOu<4ob8wd`h>&AL9;8H_R5nI}vS{3}w=4&S#_O2J9k~v~-A3doWinxE zgb^at*zfh;U^7RZh$_(ibgV5ojHK^m6Y$_u9pM`C?r-nE?uJ1Y|8Yd7bC8Fzj{_~a z+c4DPW*icG^oZfw81a2TJwpuPXSC0#^b`p#8)Q1G?q{SwLC&KVOuhPxXu*ABFD{W$UbJxcHIh4eZ4VsKVvjdYR zxA5pudC&*o{<+kGZrLa5^)#~d{MX5(m@7Qb??(nWT33`wNcM!;fBOy>IC*eDIa9IY zh0fXcWXZZ}bgCIMMIriua@ygt^Y1YkKn~e37)8)S7h;M| zn7VSoUktVwXU)W+aV!y>n(7RTOWGK)29gK~WwkMID1(!oQ4NEi2WFt4uG+9cuO)u0 z$EHXS-2$HkhIpCKbn!Pu@Cq^G_JV`2sA=X9dKuS2bROMOU1y1^Xoo}7)8%FjNm5?LRM0w$`?UomOZPFHht;%Vbu^4>y+dWJyZ5liA^ zI{fIR43djlTtJneT`4QF7NdHOUqX?h`mxqrn2I{w9$wk(3*PrkQ+W#1)lQ9Z>LM4n zGv3!9Up>`YFsx;d)P*yCzTx+7)E*Zc>LGacR{R6~^4a(O^cis#wi?$ZoCWn_tj?O+ zs4B<2k2%2XgDaD=^fa^{H`JP+SuKY8!F+ER7GY7W`e-wAM-_`T4WOz6&5mvcLl)J) zyo5DJkf3~417@eB1^&&5|CnYkEoTm9(W-klI<#5$Sj4hqT~sES5nRiVlXXzQ+z%zm zo52j7k;Ec37qi6}4mV_(e8SBjIm}uxPpSKQQnuaxvV4f9y)F@4P%g`@wv*_{K}hMz z(3n(H-Vg<2rDn&Bauf(<%dua}%Faaek-*h};7hk)OhYao6dSdYWuVuSiKrlC+Z$V@ z1rC#jWVN&)D^^_oPDjVV^rt168Qi#R$U%#QBRKeF{^NM_{h8R*(TSvvvI<3g&l8mR zNvgx&WX()NW8QUyF9)K)x2eEj1t8TFK7w)=h8WQPr_H-T2m?ERkxK|cuqg^?5)=mhYY45LST~|I?I}Wc!zF?Qp z+(2EMN2Ghn59gmy;_0WnaQlu^m zunNK%ZFp;UoG1Uk9s+9N@EN~mHCaKjbh2>waI-XZgv6Z9?2wSS_&6yzC?HWGA$CPe zCuBcVYVCrEhX=(0kVJR$(^jrDoIbrGw_Wc|vZ+_@}5wfux znF{2ju}5C3##lBzY+5QOKC%o5NY0s7*OnGV@IyB+b`T6DcL$Fdf02+$eBwo@{B?H^ z?Tyty-`-qo3S!dhRFb7V)I~usO@{ER7*ZzO2+y!El2)9ePkUn*HZ3VD#)O~d+eP9S z7IASq%j=g}$TF5Er5Vj)xh{@`DyO?srwMFd^Hv{CSrE;)O-M{AjBQVc(kM5T`*exE zaXsC|BZ@%pie?iF)PC8+VVw7M><7PIFnnQ)9#e>|mEnS>P`L{ZBBS2?m!eNDuTLk^CJjDURq8Xm>(WkDGS&^Ki5DKAOtu#csN)DczAe3 zL}TyDq^5!;K!=p{)B$`9U2A<3k?Ma|M2TGl~hf2-~-(b=W>?Vtw)BD1hn zYd=z=_?3rq8*RbZ1+1?5EBU{NXCP4g#|Jc_K#))a2n3Hg31S{wW>gaB81%(GWJ6o_ALK*z0*;vx3Y4 z2xdx3&k{rx4X_&!Sp>gS5Y+iqTi=abTQQIN0SL6!T`P*T0o)aEClJ{JHuzL)5XthF zhxoq)G6bM2mxny6k04)upft@PC?To`0)jF!>UrphyTl-9G=Ku(y>lxE(38eluZ|`` zFp-}h8VZG_3X@@di9UWu8weFLXrT6VKWzB?!oe;O3ccaeQmr}r9w#rO^%whBph}i} zu*>SN?iR5k`hXWLNC90O-}6wpEA9hX;K!G4y7|%^E_Y3dFtpl?mt(5a>mkpoRlLbg+;f2$#j{fn5+Wd$@#lvMMycBSZ&+;2Q%UK+z(i z@EQ-Xe+VSzeSRtopM;3$A8;};nm`1BRKj0u zd;n9&_h7yg$+!NClv3=g8OedTfAymWB#id#c+0l$PS_3jmb!PP<XQvJhFVr3v|+X}E`k&DYJwHadlNA7w~`jH+_hOU=3# zLtU4D=RK5BA7Qjt2RY)YNP$ymOaBw4*UC>AzQS|p{eD^K?uhaC6U|0)bgMdfuX+Kw z0g26*091I`C{xO|lSp#rX5%Qpu2Ww?@q$nQT^}}JFcwS&aPuKD`Fmr59H?<_4}|s{ z2qAyppaGjM+$r$)MnS;n6zL*Xe-lU;L5b-!ItX)jEMC^U0EqdzTy^N z(d%4+wbXKj_4H&AWL)|sR1_(7z$ghKC&yhrw@TRmq87n-;rwd&M({0tg zsLT-&|6|kGA^P;ZVXW4=buk!qDEWc=cRzbE3&n06yo$_A+>E(tQ zmCjn$n2(sFA2^r4Fdp}>+dlz4*fiWXwP!y;Y9^4@0z>s=C0>w>9BRB1^WZr^Sr9P% zJ=iOd+}{l@otHo(fjnS?PgMB=v3fv&v4L*=00Imyn3bM~=pR8y4@i#UA;tgN2IS5Y z_%H@QIx%Dus>a$r+ai!V>p9lw_WmM$fJ_vLim-u^Wo$X1R6DPTpnq)*HqSBw1|! z@-TV;W*A&Rvt_OM`h=5UeIAQP6N~09LHNK28v|&LtN1i% z*Y=@h|IY*95rqc>FwlS<3Jwki1k4-*P#>7V35*SkiG{-Lrudi z?Se;}82H<>3luE$PtZBj&Sz{7TCvB2>QAH}(=~btG>|TDhaFqZzp3RIb{Sm_)$W~4 z)MK~pDzziQ7y+_O$kn3$CNW##~Wytmtei#iCB1V75|QNn|G1vStsg~x7i~% zo|Ve%)puqeCXT%nw4<5xGHn&t_RIw5@P2}}vEN*f=)T3sj;~WBO8g{ODSX zBw322K0H^Qf0SU-_H}%ZjCd9MWfU_wokc5tOuLZOEVxcbRU2tvKy6U8Tw3)qr0vq2 zS)y2UPta||4>l_W@APxlU4!w~OlPk5mR)1NC11%AyvaEpUyob-r`*=e$HT(; zQDLrbXJ_u>EUaI3Ta7BEc-$izYzu2qG-UW7XQXJG-K&*OqpVv0>Q=qNLpn-!2W}ZN z!e)8T-DsQ7U>Z8%zE>3Cf(s?Vq}r)xQJe{ZabX;SZ_}MO_i{GY#Uh3!`_>I_c?@zh zv-ruXSAJYpP0F9IrAS8|hH@DsZqFBIFy^$d7>2LSl?hZf*7%agP=4;MSh>%!-f(r%HT|X8Y3jqg#U@<-=e3tSQKgMW z@)7q_Z%0ND>S|ZOGx9}^V45Ynj;|WZhg5h6vcT`mA>B$sGYGy`_hf0UX_+m~gk+PH zjXy}g$0ZDKNLSfEv({pRS82yOmh4PoY)dUBwPg+rsMp&HDyn*?3rAU_guRdq%IaEI ze!dxKvNFm~A5CuTa2e}1qwkH#wxk#Bkg+BGpeVJezP&^>mR{|odNj?CB0r$Zzb^~pmDge?E%)WRvQsC2P(ml>D$ z-|`>@%)vAR?_UKRTu1VGi6qQDZFOECvNm%jgdb4Z-YdO-o4XSAR?{}m>qaseEDFfx z5_;sTdvQFvjqQuMpCIGuyf6OG@C9RX2Pd~aySlfvuNxk-J;R7nqJA6`YSTqFU%_3h&jr79@x_L1=??@VXJ)f&eZoI7b%eIx&a+bm{pl& zHLU!6&|U3SSF%wGg+Vvl{>j-X;wv(Nm(hjUxBYG3YeXqOGaO$odPUd7={UeEjA z(s(fKqtoV6(D^d$$UNZ-ubH#6%z!zPt&zSR`cKkcJ5p~50RViPPAlKYqus;KIs z|9W~wVP$jub}sVjh3|jOdO$3MgS)uRNsK{Hj0)pu7s+n?30n3wV?c}CUfkVr60=C5oc71q@VbfDwDHKA8JB9RfmB3|a9k{SKL5_X9n z);}lscvUY(oQXS$8F5xt*#|Jp%gQM8a}SFzHdW$or%xtPDirtZ=vRux2Q^*s`poD? z+199#r$&Xfct1&JiSytq#%}boIY!N%>@PQbT$+OV{E}FO%;rR^OFRE|^t0K*RwW3V zz?bfxELB9!o93C~_{5>#_kFxe7a7W7&FCeWe~_}ttwyP%VVoT1e(+^MigLQ=0&l$k zz|52xfyZv(ZkaZ%Pw3@NVd`tdkMP8f7UgcQCh%KnaH2Cs@$w`7vATzTu%>ovyu!S_ z$ji*f6qm7^^0XQ^GEF7>{k5M4!A0#kS~S)&stmA{@?!_G!eYWEvXQqD#gt}-IYM2A z7%BMe=E~)kGQ?8&vk1B``N%Djz`c0c$}o+kTCKE>0@ZSG1byaE$sDr`(z+omKxVk` zfGe0XlIsU>=Xo(hp&8jjVjbq+@A$qM2-!wOL3pAn*15A{g`1&msu%XxlM00(PnYrD zBsobZOJ5_>I5S7p-%f>(9{t$9(%byEUECx<<=M)=3T$6!&z<5=(9&6AJsqF*%`>bh z#QN6QZF33g#v5-)zw+7ubf1^kjjc>)Z1&sOFhJcf=H_;@0A()Fi23u_i`E+E4|En8 zb&cOP1;w@F80o|f_AK8$Akf}hE~R;Xdg`rXr1d{U;F*zYnGQzd8O1rGH4-4v!cVmE zT@{$#+Xtf^XEj}w5ZFIOs?D%Tx!&a2jlM3@tGb^{3KK^|-M#}fP)0Wm(8BX1NSBo= zE*x}l{zc9B(Xmjx6K0(^$}&ED z%ACqw0C(Pig!P3=QMeq>_Z@8tg0g;vW+BbOa2sY=Ppcv?oljcxL@!j8R}E3Yz**%B zLI$x}CNMV@U(!b3BXSjr^O%3OQ(7|v5>vR5{dj+ZOcA~RX2Seo(WEqmhw2&t&Bh5t z7GnOF-B^_oME);%j3rSY<{$L1_#>Pi!11cQvkTM+jA9o9imZ(zpWL6h!jVgi{{%g0 zuo5WJ-OVEW^n@y5kH4e4}Ph#2%U)BIESGd|Ma?uCl<{VHVGN%~d zzi%uXT*?9_g+=l^gymZ?ZCY?<9UaOe2m zNS=AL8nKH{)5L0IRd2ik+(7j`Ib%#aBB$@uR^ot&QT6)b^{VpuxGxu5Px)Ue)6PYC z{7(@Td3vj2Y`)*|lGH-8OR@F_I$YUu6#hM86EN_8jOE0rm150Lru2F;%g0>dLJKfa087;J4N(W!h+nxM;im|;{z80ZeYsQ6&j2BsByNt@x%V>k2+Km@4ye657Xw25|7frgvIM9l za=}O*E{~Yg#-?-W{_P||jQkUHh@Y}WH~0+^8)-R?o0}5`YiAQ!V~UT5qW}2BRovn0 z)eJGx$Il-r%^ZiZ1qFTSs6n<3N~DpWD4KC1u0q~Sv=d>Pp0>Tvy%+AO`BXYYOLO9e zC_LrjizRD_bIvE(SvhY0!}Rbq1w zfYtgiDa%2xK2$DC_I)UuLq_&Z^*6qHcHEXo`G}qT$#nSCSGDVaRWOP|N(Ar#<_efP z!3kscvzvp6$M>J<0a|Vq0$z-!a8>SgTH`WoL2S&!+sEDvw{MT=pbt^j0v{1;2Z$on zwI)MKVPJX%Q`&4Iq>U8xaY0=J?K*m@{?Luz$g6uxi0>2`EhRF;AexoAn7vv2aI}ov?UKtP;4nbU7 zAhIoJE*s%qekCKQI$_crN|Xan!zb?D?9PADiSa5AM_ZnV$V-y#_X6v%&k)QnB(oaRxw$QM+5SL+!Jtx7U_w-6HCqH@q&S%0}EqPI)Zoyt4 zTZ_4Ng_&=s>xy;Jx^MnFfA{Pv9|`f;dKpm4JIKsmws4{49ZXFsCUVUO1g1h%OMC;~Su_Kasz@ z!H2iTHUl0m*_6puw@zQv(Lr=Ggjtd(3Q5ubpg+ zQ)HmKDjq8RlIN!@*={^keebs;1{1b7A;MU{nL`ioI^oUdQnJcp@BiiAGl=g zc+@|b787e5Q8|=x%LhFZqu9c#4kbE6*vqWfs}gO^G>ybt<-8cl_iLPL0$t1}B>&g!Fg% z&YOpb1Y@gS;@s9BHX2Lq@F-s8Mo$&?S(g08hLpG$@%c7(Gr6zIb{h1oDu{%83ODPl zccmRA-mcOay+g9Ehka@VLO*RlMCl_*Sm1nd1L-M$fi=znN0e6@$KJcLo8ynkq zz*hwImIu&iDF7d>ui80U_aR&*5@G+LwC1%Ogji4iWFusI8^Yjbr+|@ct202RSMJge zx_Xf0HY3)5m!?-HBAN0#czg$CSAR!~`h@P4Fm{JXHUc#J*~%L(IxDMFIsbP~&9C~Xl1i?;U|J80t=rYB zUrn{c726G{_>debtt5B;{m0lWXlyM-kG(tGEoBiDA6g2GN;TWM9DBJW!*H(etvOu5tsBo}t zq%0#o50t3Gl6+76_FjB`KyS=z363Lu@|B9267R_Nso>!ULTqkiB_XY$?$yQl)nb8j ze`l#}RHN8rB_7Ys2+iWhnX#rDwez=MRn%9*VXl5@gY(ww>|v`zfUQgZ)b^)neDxLU z4drWbW#9hvZb95!G+c{_#pzAM#Z~S+3t8p~D#?CjU-_pS9Gx(23+75wo;awYA`Q*# zZHu_k%s0J$R{wN6`iU^2U=l+~JXa`#PO_f8Vim4}_>`ha@_<1v4~N9x9B99L(x?@M z?&@2Vj0_T==^J3$T^41@UNl$V7OG*g3S7Rn)AwwnY1i1js-90DWJa~iYgmuN^(BuS zAuF^S=!Q7s6b)^z*M+Hk-^Q&(wLV|^dX$b(N=zP6DO>q2ymj_@+iN;@i%YIy9+YT# zJVDQbdaO!=s+z@P%`du1sD9OBaB||6@2t8|^}9GsL@Yk^0ZzGc5w!lPnM8<>jvXI| zX7J(+O)kM2!ch@?h)atLlDu(m6oeR^g5H4g%`b#`fl>9(JEou1W^5jq`5$-2*HL+2 zz4L51{^mmY!=W;?6?*L_6p>h0C;Z>Mc7T6Q2P+P$zO^Lp=H3jCc4Y8A=Wucjhe0l` z%aZJv>xCcWG4}kZ^MyH}fiE(vqzpxe#I8~UFj7*!59_WaNxlt`6S=%Yy#1Rq4dNe* zo>;Myfva3e$sN$PM*QV>gE-;_xK=nD%Sd^RRhjMVxtAVX6pRkRe>&$LymhRZn})|M zE#Bw9dF+03;Vr#?R%rN{kY{^A?yk{g8()}A?7PC3&-ZWhH+BGr_Qyq%aG{iqPIIlF zAj>MRW4z{$=;L0Y7SocOxby;b!|2^$u1C4$3K42qdZmvY^kXCsyI_SDx8rRO4QqYQ z7g!&CbF7@8+~+iC@nJAZCi1*AzH-vt*J#5F`aJK@7ymf#l;kEZ!|w;LX$z(V4$Kjw zFg4lKHkAo!w8i-NgQ*;up@T0%TCtI4)?%KVnrZav{DKCnUXn$@sc_kS)^Iz$#lWND z3IC_+^!3x-T3(Wlr&$tK_Bf*kJ-TTqb`wP%L&rAKiH4V}45dt4HOJ zYaK3?K}oRUswQR)y)?lg1$`&D5*p@`E*_zYr-A)jzrA~b69L}6Y%{j3 zrsFPXDPFh_I+GV|KG~{Wn&SYH} z`XL3&(AO$(xu#oLD0^p8T5wg}ZT-=f)2 z)oX54Yg`XJg%5(+@WMqN6eVt`e?7ubb$Mb#Dc4mCJ0Z zwiuIBUuZ;w2u0ZfoEIS`_4+lI}&oxGwO~7@tU|qSmBRQaR zYN1kiM8JoE6DQ3?nF#Lv{G;Egod0ODe1X4gA9}8=-?AlG!M*bG&hq65Z&t2x6Y)<* zk0)+3jFYGoll9K-%GKSd^GAb_vXv6^al?MYUd6v%+?J;gtg=UhESbD z%XmLE-ovxDbaXqGv)l7>NgZ2Tea{3$&jl^fuD%nyTqzvp4?5_+N_67T_uQ|1#A#ZO4V9 z5}6cqjpSW~31q2bGmgY!4&C&4wwtR~(zOnvVBO=gwPA=_RY+bkD{AZ^`*f)8hsifo zb+U#h+eW?+sA!gu;x%31+Q(P}mX}l$*pVQAe{W7630PFO^>RJ)ieEM@YU$iJ5zL2> z`bV_1(wQ{5W@?aM@5oE%>n2K-c>R?Ip?p6uFZ<<7=( zv(4)1VQH3)@q?2dQdhODwqQxMFZ2-1 zr)sK>PCesbbSI@V6X-GM^4v{TF>-$z|opIKql1m{6GduOfsjH6zlu?9!fhgyq@D@1f5= zRj{&wi+#-&>AgU?KUw3Qw&61KCsQomwizRg1h~AxOupZIK}~zq_g(T>y4oM_OATTZ zF&pM2cp_GV{8Sv~cRPdPhbMUPTJ?Ze7y;1hKj2Ei$Sk zGj*!hPD@nNY3L(KZt}Q&B1Ax})T2m~K%k_HA9WCGvBK!!R^r*m!9h@bleDdY%fbKH zHs>?)Q`(YTPdg@>k^otk7OZq_s0tqDK4F^6o43Mk$@e$ch6);o1Ml`$ zeNS0Bz~VfjFOq!6sP~A8sbbJSm)gTt-A7W@9@L-Me z-xJp@Q~TIWzNwP`2{KTPzjMXZ*R(PtEOVhZ@tCiSWe}#=3q!46&h&AQec2@Zbm0IMwZalBap!F1aVvrkWd9xz#my{G zQ`1jGSaG8`C;Z0&hbP0b!u}@k;v@afa!6QNOsVY9Nx-KvgyDSe8voM(ZIj4`ZcKes zz;EVJjygJLP-vl!OiPt9HL-NAn&T?k8*QaKjr|&cb{27Ejmh~`^>XLQ)MBZs2S_z^ z>7msEv23GUSP7$Br%T7Fsv!(=IH_rJMtl9^v?W5O<=Qk^>HYjdNF=VbM&54nj;Sm} zX=_~Cs2cFSfL2{#!y@h}!p!k@BRg_gi+c@gl@uh9(19yeR9x4QA(=jroby=Tv_y%N zQoTxXys2NgLPH-qwjg#)R=%#eb{A9D@uD@tv0&fMqDoz@M4 z`OM-ElcET0JsM?~{WT@>A(VR6=<;vR$$N-cWk@wLE=wJ_WyLf5!uMI3;cC0Y#ax>M z>~VsfzP*c6)a?2Asl+`;XoBpeOplzpctp;3OB6~i4mnGTA6jivFmU;4*CW`+(c&L8 ztP;1SUhB|O5f)aJbeeK;Wn{!smlc%MD8sgU3^K#%_wk>);+8U!x}0fZhv3>_&hc03 zR|Fx6Hxu;C=9oiq3K4K?vN{w*=WkV#aJy4)psI~1Lp^rGs=gqiXeri~SEig}^H;85 zeWE4^7*ST7hboOgC!^yoTaDd+R45QvHd$!*KPSZTykoVsD)ujP=n!%5Dq6l{H6&{0 zq%e0YTXC1m`!g%b^1q+AR%<4lca-)dR?C(Cx5VzS-Y%z}cI8jdV;WZNvaEUQaoL!q z7PHHvjBZ~mcB7SlNziF_Z$<^z<;AYuya=mUAQ;uWj`|N3BnJX>uIcsUTixVG1(O;N zvSB=E7cknVohQ^4wn84-8p zfTfEpQ7@#Z=oSC#{pW4YQs{jStJ{{l6(nufCUCXbd}k>T#gq#F^1Dw6EpH`lkHa@< zqSow6{TI{wA+T%((<@q6iqbImq@S6V(n+48GSq4AAF+l#wHSvjnxIj9E;I1zt@gVy zB3`#bah@c+r<+{Z0ubq84QIpHWNQV(JD8lav~9Rs|!q%n=Hbc1y3+zkBNn=y1h9g zPOUi7>{QU4R)Xi6tZ+h}_rDs~aSD+^S~OPs2~vcA`dTfuzNpKWb89z3rdQe1W%RHQ zrvsHx3R>Kmxe=GBkRx@{t)FZhK7?hmS__4-^|n5ohltVL2N8kE?4luJk`1a{e4={u=w5U`1E;rWRR2FBxY>+@G;;LnS<!bqy z4TJtsYimV|+22N+EG;5;IfyG^AfW$Vx9GOmQvz8JiZXT5|4YG)dT^`JZDTs?$y}`( z2Wpi`R3EHw;ZKnLeVON?O@`Mrhv+7>-$}*)$K88CMbT{kqCG>JAr3=u$T{aIAUQLD z3^|D83@SkslrZEhIf~?*K@d<>a?VLWL~=3_RY3F&`kn81&i^~%-gWO<@4Yo^O;1%< zRaf;??fUKC-o5)uS=keZ`6?aI1-^Lv-wRhmtdDY~!@d7jZvKNrjn4D$n>GKc!#9@Ko&M$3so(1+ z**-{?uf}4&XQ-iPSKhYlPk@D(EINwJcy_cqAZA=^ZiuRQZg!%RcjgqCqo)BKXYO;M(|p{Y7%%DK|3bRj;YInlt?s3epRl5y_q#0VPW*Y| ze7siR`v=4KY<~cDcWkE^&R8DPW8OJAPnU7j_r3ppUy0mjH3u1?A3(zuq5sA5f*+9A zSw>o}i68|S)PHM@{3Ue}x1uLfSLC}1@|#OSX4HU&a^J~6T--NEv&hKBuwJ)x=a23X zU%u+Aewph3T=#w-j+8dr%o}UytB>)bgORgtF!BnU1es7@_;c0uNRg=%m9A7AO3=yi zX=N_-n823)ljC&x%hTenVe3csgrS?mm1Gn=w3rw{FW}~1x}3H7j@h)IdZd5FBT8JbGW<9)UIGxL^iR&1!PP2v2cjZ#X*n^KK&W``MP-DB?}XZZhMxc(yr zc2PimfaR;!s?yOrf#@M5d2RH^$p5O^@6=ipw}#H%!&Q0pz%72^Ntw-m4~~AvQ0IzB zGqtw=axE)|MCQJnwZpta^l{4844LI?q_?iph4}efveQH8lK7Y zzVpnZ~_UYqScM<$oQ29#u`flHI0!k`m(@iV%mhYrb_wBVrg6hB22t0DRFyC2rqOByds<=AQpYiq}OSpAw8kp zRR>Nv-K|!CVm_g6-#bbH(c`^(Jw38;Vn(Sr7@k5wSrwi=J~iNeRtojett+o&zNR&M zrEnk5-Q_BsMD@-z9$W@!|VZzx__!G6Q&C7AQQVP}<5Rb>(*g>)7YznX$O5ggmY0nR4!Lstuj z>FiS_@g6ew7h&WWX&P>I3;Amyl4@L}rVGmlND;n`Ik&tKkv3?GUh>4nDCLS;ktD}% z7@POaTr7GXOpPBvYG`%P)m9~gdsmVJ%JtHXPCNu(m$%vkkX{g)MV|gO(q*VNC!w** zPSxiqqc?0SmS1k{#NN@+X?$q&0GX3{b$-7J_*W|9`SlBDb)J1A* zQSUCOJPxY}(J0|MWTesRROaY=93Wu-Wp*>HAlL&F5C3KD3pvdFBRR22K1iJ*Yz*VN z#a747hI^tywztk-@c03@e)^f<4BxI16_*&rW~Uv=8K!vC55VAxrbB8FGEVuVt~}`b z@D*im@BYImgJQw^-+sc8RSXcxE-9?xt~tlJZ0Y=h3u_plQl({5?O|xdlad(6t)m_l zKUK-zqZ}7KGem+RnjW*jDGWdTZ_x2sdO@``&yLP)^pLFsDZh)C|4OdO<8V@jq`o;@ zFI&W36MpePDAQ66FtH<5E5ftAMwNQx5j%J)(QEHdYx`FP5CdFaz89L6%Wh{l zdw%)fXaL^GqkDW8qd}|pWDLw;$f{k6tkY73IAseGu3O`~QCIFZ_swK~)hRR5j;LXE zGpe2D@C@r#F%F0x_r0LJ_M%E>XfdZ>)4Q*p`PoipEJ2P+E(c!_$?-^AAC~{uXCOqS zlw4laY2ZicQJogBPUTh3i!%^LX2h@;xlA%Ui(n|LtjbpuM%=Zv(~Fpa{s7doKKmP% zUN^MQ96qb~_sL z{-JD<77aQwRQS#fK|v>3cdE=lSbW!#hn|}?->G69v2mq;=)J~T-4;mIMydR`q`8*C zeY5ik)_4Q273rpW2X60oQ6$scO~*z-)B|lfdT*b!JWRh&>u*xD1OK-~;P0&7KQM*1 zTu98kGpg5l%1UQKzw+PFiodtU+&Gw8^#j->PvAjp&76hL_4ZsXOL*XKBlPj}%UdVU z%N}i+9ylzGMy3u<2i_PwEK|##U+0VQNUqhwz*-`^lEw#uo1w+!T=1;aX}Q`TfCnpC z%__&oS0FC-*HIe4*@N5#5uupqM;?wGqEz%P75Ro1m*$~Ry}c;1#~N4#sCk|u9$W{d zC@6Tq<;gkh^^Hrr1mqE= zb7NUKo5@h>jV-$5jaAhwoN_qbMh1!L!*P% zeXgA-&`KenXhgINdjmivJYl!`VC|;pYp6z23VYD)#*>Bukw63Y#|Jh}bNP><}%+r4gy z;5_n@M1!kmhJ>LlCEpf4Xf>6ZODLwiJNCdYwr=yXv>=I;tMrZa-7HW*)B5PSw=|EFMKW&qGwQO&_B;7XJXy3 zmPAy0c2qeZfNLcRaYi$%?E~Fx%Msb<&9k*Av@#`H(0i&Uk0>0dRyc55y za*9+k)68vp6`Bo>%FnlZqF=$UXP-(78=Mr`DYF)f7r|tkJ8sr+iJXqQ>l!&58M-=t z%0?fyj`Dc%~kd0TxG3=>VWG%FBmV|g0XSXM#z@+)!k=FEc7cn4w!m)$IB^-hN5zy z``LofSZ&g;Tr+r{L2P~n`NLf*dRxD1u{jwTLQF1A%8Shp)wonoGaUh{!824jW$xHe z35WU`BGcg=z36x?5{cM%_X1;8xs&|+ewCZ`W=P5Eq}+er<=Eoc_;XOh(ur<+eoRjy zHndvJE)VJ$m(O4%nNYjwtg=JmW2z#zUS}GiEY;zEkq}-Gx3MoOa!KEXt4^Dt3#%eW zSR6#u=VK?uZDy}s9Bf77GXBi_djhSupiuQNLN57Y+{Zk;SD$+@4XT?}>tg7~%4z3F z(F!H!o5iTtNp129-mW)FC!@QU$VJbsRnp0EC_p_xxzUrgBT^+L7hzoA3Hhvr~{TJU8L9e)o#XBo`Q)utMKUJ}>c_CC$%_jZrd!Yzomc!_U zIfk@2aC*xnW08N(>^i^U!T-5njAc|hbC)thDQW;!C23}}!<&?i44){N^QaK!PK-@R zEV@P_y^C*fI>3cW3F~CtrNp6YgKNO?pZoyoNJA@Jd>Si}1G5n{*_EtOopL1mj;MS? zZm)y+B8DQpcSR*lY<5}}OzTW+NZ~r@4(atL0BTZ0&=g{7zrobQZ3GQGVj`&vQxX5a23Y=0jL0~ADs$yl&nO6*0?SNEYf6UfH6ynPmRcvt-DPGcS zw;C)eSlsufvC>_rP*iceTCFsIu`qwjx|m318orKKUl=&6CNSH4f+i+T;Ek^6mOqnX zu9(!TR#u^}91aT6Dw&wsSM`q@`0)RSFW=lkwI&LCHs{=gC-IvMPK6lpJwUO<(C1F) zq1`!UtlFPy>|)dtZAM+3rS?#l?W!?zzxBZ}TW=g7vpzG_eKiPB<~#ou=>8=V?s4|^hV$;6E7sMUtNU;Sm(-%&PTl_C^& z@T;pYT{$+JzpbVHl!&v}2spbfAD0a)Ro<)CwMy8ySg)2%345&_x7w66CRJ>Y|Hw*; zgQ5&=OSlsa&3*~M4;mKLitL-C@z}riHD9TV+5CYknTgV-)FR{YKvlA#E?X4+3*^Nu zIAij56y+=m`ILSX-RY|$XUnfxp<=IMpP5smsJi`_N~*CZJM3bkIF41;a%I>3uY83r zC=uHd^TXUEOL;a8kHG_g;_tHtnvhRkA`-^-2_G>-z3q2!i6yHA-G+!dOy|RS7e-@ zYdDeqnI$A^%UoMb`Q82Eb(l5wj`{&FprE2_u*Bwv&BVk-4WuWsf7qHJ6R)%sh`Rfj z_B8(I1U&yK3RzJ`JOwsY@2fcMSesQiEkafY>4c*UMfNiX%>*BZNfnjlJ0U&v44ran z{X`9tgs#i(4&hp8214Q`4jkW?OhJ8t&`QhHu?nI0^kYeD4Ud#lk@!pYbqhCiHIo_r z^S3CI1VyUw#GdN~f6%gWnR&FEUHm1umxBo#jk-z_rtU@RLAR2bRN>apT3o!`4yhrjwQ7ulvq5ZT22*>CQdfmNN8XNAIH zD_8c1v}8Nou2gds<6_?A2W$>y&Um8E1d8F&j}0Q8u1t_H+BZ`>&C{E!r`ivk`b~WGu@o*0RM+! z*5bicB)^ee(ERXG7jAUO`JC($u|F(j7rx$l+$&SKK--MLP0!}(4Sz0?s0Eo`-GA*% z@#_rPrNhjF$12$i%ouNj^?hFYi3k3FV6oUgkZ3D`VFmj$-$u`0z|A|!rGmAdW!x_+ znZEO$jl8G9Pw0~*6yx++%M`9snx|rK%VYTqf>otDcQWc^lqpB>{9HqMrQ}KYym~l? zGshF3VCdcPu$mRK!x1d}UD7L++!l%fu7RVHEDbiz)&-8 zwua69$!kYPgj+>Qcs3s!cUNq=|E!!0y}Z4=ytc)O#I3k9}V4pTHJ%LL#lm#_Jy`DgeU6XQaR0i`X2?73_@xtKju!$ z6rQyt=R$oI-GMx6|u#i&c zaAzf`?cCX-WrR9ZH_~hr5(M`f& zI*d75KC1RZWooHU4c7PTZoKC?PWCseF69(Ao0Rl_lSJoU=1_k5j3|J%P^{R~Ygvbe zIqd*$7{qE#dpo*RPd@s}gXkeq18J=vfNV>VQ32O`>hR+~t9Aj^zn45BMhQJ5fe zT)5BNq)}c-GtYFnGv~f^q5->J!mHzmj#hyxjyJMb9e8_mG@>vvHA;RfUU=JBl=9KN zik{W-;5J!KMq2&vM~bM3&0;D-eVkW@hTuaA8b1mb#z?(cyA;f-5(_<)oi3b|>#u<= z&|Wu`uuH7Ha5ek`2x_gntPO_7j3!f$zJy9ODJU6u8~p%U9hGgR75!7@$=#KvI!eDI zN8@k*vp?H;=T}wDv#`Ct`y$eM^S!)2U?f5DTA+vp@_Mr%cxux)aDm2K`{ni483~Gc zxgxIRsW}xW8QKyez#qMu=3Vy!HqkC4?n#U@B*nE#sYIT4qTxMm89 z42yzD`Z_e>kcVLszL+cAwtUI??4O4E)9vzK-;ri+hDmVh%{>0SNx=}&(B-W$KT+C( zNqF6cvZS8;_Dci(I&yRAJ+D4!8ZZ0|L7~I`+^OUTu$xZu1Gswef+p#G(Y;;CYV zbw#?&f=$8@K~TdSh9%JJ8Z$&8#NUf+>b$L>xxYYp_D!r`H&Hu^YzkYj zyLE8|+SyjX;r{gR{VXh2R2ENA_;N4IZmy;!vEHmz1My_~-ORei>}35Yvs<|~LrZv8 z_AVoPV6iq0hFx!`Q;K#TXS*(yk6)~pa;{>eUIFJIk?j$|2}|jPaIfHZP1YSggR!GN z%eb)=57lJzMIZAZF-o~%vA)5(dng)cHrIiJ%Z&PGW#Mf@L-Bw$1HBw#v*YVj!m#kL zCY95bNs8zuj7Di0ic#9)r3VeiO2G5p>Q6kyPmAm0?=}sNTy*2;WYN3F@NKOn|Ak*j zFWb_v>7a|$YQ?8lwMQp3g~;SdW}A-&7q;rma;WV7f7FWq)R(^(3NL7UQT?|n^q+;h zyPVDfzPiWk{(EPee{jQL5B47v!Qk_qb*%>;6xVq+4ZT?Yqfg==`>67?Xi-MSPYU_) zU6jD5Q@^;07%>*3L^6$x4Ib7Riu%dM@SMSht#7wsSzjgVeJac1X9g-^io>BHHCe@|0 zEU@6GdjyTMw$Sx~8HB#u%V+=6506aKz*8(@%z-RI2~vGGTNm?KE-g@4VJ2AdzQcPq z1BtVR|C{rnAdi?DnQ+tLd~6rZ+JE>8wWhW*Mk)I3y!_?g!EIG`Tr6ol_TPAWkcQo8 zjAb0~yhkD$=*W-r1HdMsQWU&5W78HJSX3K(|HM=*@uZ0aL-NWN#@P6mC9FGzL96mL zl#?Z|ezi|GA@>{%X&p#nnvOO@5LJ|EI8`(Tz|Utw9-&J0k&5<`LctPmP5iHNJ0sou zze2)!WJ4vYnhdHOzj2Xj_erR78@e|eWF9KH@g3zNkQD<|4R~5?$U69S!mELdg}2;uc+8C zJM>eE^uZ3%Bpeee-4MrxnOdWSX>Ye;hKPJ7f+1x$GJj=B6Fr&e$!0|UnU1HdoHAje zJg^y2JA;5##Sckm=+E7*DJU{iQZ4@eHVt;*%1Slp!Tu15CwRb}XJlz$q+9jeuV~ti zdA^vsF(Uy^UxqQ5-?wp{U!U*8Kn6+ggYazRuEatK1s}CC*X?_HnFJzcE+G;Ht)a#l z)v3+~y)9f0X;0=@ljgAUw!@7KR0%&2T}Qo+dury}I%8fMD5|ID%*~!?)R6Lsne)@D zG~A}77d8YYW*^32q{-xW-wk1z4Oj{hi%A-5Xf31al6sJ?Lk7Ytx(E@c&*5d-OzA`X z*wgG)n;CjIOonxHc2zNoFRPfG{GOcZ8$-wfCy7Znq#oakCxVr}_Sb%uM#@O&tjL*v z92}z*^;m1AN6$i_+NmSis5*h5v5!{KQ=iNKxHHQF85%1VTEgYS0dE|U%D;V!#-#AO z>TZk#1}{7}R1hQQ-hf=E>7C{L0VF;x7!|t378M=uYWb8kanKOlaIE4;I5RF|+AfoP zNx-USXimuUGoktOkbj%#PDqwpg-0z_2bLx?`%hd}+<0&B-_*Nkp1p&iJD<}3>dWt1 za+pV~_+bDT1jfdKUIg0y8EP97e49x~L3eN8+M@%;C@3G4m|s7EvRZNfd+a(n%yYY& zC@u~fC%aY<^Z`{saQ*}^80G}S^;Mc<&mP6~H%3}&NP!=;m{NZ2r< zd&GnfW$n(mZom~v^q^lSltKD?3;b?G>ilQkLcHx~&;g~VbV;RHgAlv~OL*2>uP zOh)LFPQ^*XN{1nb1%le7mmZ0H@27KaA1~l1$jQ)LR<=iSwPjbu**5ib8mZPVtga9d zBr9?{Mj*81U`nj0+d1of=MWq1%*9VjSX|SV$>)lK^mBF#J3oMRMR_<9i;N#KX1M3@ zIqn0^!sW(WPD>Nd3-7D`k;E0ZG9&x}Ms83;+D1gON3y&3o4<)VRY{GTft)9CHb;B!OhTI! znZ}5bNTnWYQY#4y19c%$dUHme=+00dPB2^DVmnK)N{GUKW7P}uNUKDzaa-`f&AYNJ zx)xnz{5xG|dj@7OGIu=vU~se)5g-##p#2y}pCpkG!ky=kR}0l}Zzu{9vn@EI4sU^Y zbKM7|GTMti53u%0tmO%rv@#vyzXoF`WEP`Ti3x?eI6>5;flgxJaonyqOKekCP2C-b zL7ncQY!$`>=zw3sz|0y&p^#|2(v6*8lc3&1PpBN zYCzw9e_i+kU8rzKM1MNnv=wyEcw~!09fW+=`h|0%P{jo|Zn)N@D~Hos#SMjvst%27 zXNEnCz4cl#h4Kl&llL^ML6vdH_ZWz(~A;ZJ1O`?HK`A`eEbfp{{x!ikZ|eQ)W}Q#q zmw`ydk3xj6`l%2MCU-5Ki?>{5#_2kIMF8N4RTW6_XK5u`2x>K^Gco{j7RS`0P7^|<4{*xU^7|~BAAt{l)-1t0Zx; z+tGJ-SOX1CHzNSGdXnjLYGf%024FV{jdC#0Ca8O zck~P2wHW7;C_rwG1|V)_avRlO5`pkO^CSip|sna z7UMsDahebzOVZ%r+DJt7O*u4P2l7WPLJAKJ-j0B+ytZszOzVEn5nLHJ(7G2X8e$#9cou2n!>;+Y+glYZlxITF_iH0Yw-qG)qk|~IPf;ax{xpV-xZm$QL+t!>s{P8qr}WQ5yB$fiyy`fUXIRM;86Io88KQ zmxAE3%)r=Jl$t6$4|-cSig}!hXt3ZpC;A!~;p(fVn@K@6yJ?xQL6X?=vW@sM7;xKX z)9qJf4S*{IS4-q970lyERBv06>7ZWO5@kUm<(u?1u{5wO z)YqHCZ2;W$*IId0Q8$hE5vjA+Bj&bFHjdm%Iv?V@an=3vAfzZ(ZQSBkV**$=ESc%rHHSj%JOsa!EzhCga_WxLa zzpb=T0BDt~Qm5>0-ng|jE>}Lr^}rFAME+l|-CuR}WyRRq9XFvZ63euYgS=>xy;gCE zlIqOc!zR0|PyPJ8toXNZXoaOo_{Sa%3SK&ntaw$ELgfn1SpSz4 z=A}IzQtGZ75Q$)FzeJE@$0zJ@01?k*qsg$zgaH>9d%Wq2qQi?Hz{3LokY|)uf&)YY zPcr36nKeB>daQAVEJ6qs_Nma3vl^M*=koTikyUxVLnF>C5UcRAvBsD3go$L~=a8$< zBV}xIhJ&$|B)M8++p#2*X%et-wXpBshdluK2vbm-XSlZGvO!3K!17`DqvFS=nM+{2 zp6Z+qjpgx4L_TFc=UUI`Pnz~V2k|g``T?k|32|z!oYDROuJB}Ds+Ex#8hpGwU#VL6 zT9KGB?CH3`9j?yUQ#JdQB3o$BOK9FS7FuZk3Q-=j()jjGY=BwlvVaskT zh14rLXdDs(yMMdtg~394^r-96`Mxrv#un4bC_xYw_=6y0vH~X=x8{P;e#buH&?~3* z9#nf2G$QDZ0P%~Jnjv?7{~A8r=izSpOa4g5?bBWlRZQF zvu(ZdjQ1I1;T9eEod!8xYgm7~G9h)SkNP4*>8Bf?mP{DmMxF+p?mliV{>}`4kLm)8 z@b|sA;U`m)9_=cbzXvg;B%i3fcFkZR^4^eiCHU5jdiv)N#<<&Q-umGcvF`4&;y10O zm)=ZGAHqR|MYcS+$JktB!IM)~y_16PK@j4xXmeF&S?$h4VNf6&j}`AF80=CzZ{QW8 zn=QP^?p|mqhqDs9c0~Rfx7|S9u{86frD`YX4&vtW5>ch8W4%y@hFDEF-#Yn>f{owM zRq@nXZ2bYQr%A(rU|ZIgJ3FR+&pU;;10n?ayIec1I}z- zvD{jcGZsZkxXZNvtHOV@pnkYHjgSazWd*V3@oUZLTWg1jlmF8}w^;UAE(Z()xHbM# zggnF-EnOJe@=DBI<`3NCC1w5THt6yRz0b>@@GQ zEC|9~9wt80%sp62O2<=C3y~SiwZ%b7d`QhBRBg-TD+&AZ%VfD_LHsjwD)X5VMUkadxYO zuT{RwP2@!7D~92d|8bDwh`rI1-k6Wvo>COVA}@(!6#)y~N#RsjYSYsVo99&BljmW6 zkt6wA6;9%I@tr~@AxW+!LVv~)lCRV~{KwX&Ssd{jkWrzq>!q*}{ z`PBmL=p1$8;sjpFt&K*vHZRnc{Rp>y{q3QFRV+t>2?f>!7PLd}Wp`Yw1`f(9Vq&Kx zph7;wSqOw({LJE)n#WymN#*j5Y9c8$&`V1bD+5PpYktKh3{ujZw^eX}yCh*nP(Yl zaY>O6%EV-}I`}1JC2sjiIfc0cwZYfEIU(z%d!*z%k!ewD@7B$tKZ7@~PepuL!>s!T z*ou{8w@~j;dZarF=;c+t8U`=|IOq>+y}C5+L}|oKEt+*O=J*kC=dd z1P`lvj3VV%^RmR;#jErH8}PcZBGl8+`1MgL^S)V$Q1$eK&#!_UfbNW|2oSh1B2`8+_KpwAiV9dNezS@MCu<3A}kM@0Q9^I8oTF*dNz*u+`amz~pp^8MP zOH23uTOXhC%SfV|Jw6lhreiIx@2sgOvg)z(Sc9;6MU&71cZQY{1oW-)JbQ3mNAvP5 zo^;4>gkaZ`YCXHyQ>Kw-9|Ts5yaq^C;%;KpiPvW8$^)c?R91%0oq~+ncs+SZP#Am| zhaMSsp$rwO{&9%%5Qc>4;m%#3z~t~tGgkyLR#8p~Y?-qNzRe#x5aPX1NrX_}x1`rF z|Cz5(s5~}Jh#1+aJTsUm^1Bye&B}KW?~A148b;3@gm<@N1>N5s`783{meY&H@$K&~ zb3$n!Fk6MJTI&DFi~PeXz`X5TyDc92>@3eP(v)8JcO>Z{5vHvq!7IL3L z4HLpgr5=|bw+@kL68TRB{z&$JP<;La5Gb@?1JIa$Q?jU2bp!{K96@1pnt6zRydI`i zJY1U|5>~uZSo7MuA*Xp?EFrIhO|%&I#+2MPqir`6b^cPRy5q#vTkxY9`S~uae zN*>(J!Hf?hDYt~*uRM4~OOhrZ5vvN##;)7ph>uhUl2C{txa^jy@S_mS9rfu(v!cQ4 zeX(E6GZoNza(QkAD$u-){)iry)ys76DcCx(ChL~ZeXT`U;QvZB?Ki@Ijbn**%1cU< zTt!T10{LqVwtqcRpU%GP2cTHSYHUPbpOt4`rgjQDwrDpWK4W(A&A?`QGKCv!x#}JDez} z3B`hej0fYzXmz_abCrE(TUwC*v;nqCBh^7Hp8G6e)Ral%XN7h z0B0cgj*1QwR!Vv6Wm#&C(GxG|PJ*CxyfYtjs705&J6Lvwqu zvJHuk70w26Oi+?iA*$P|80s@^zs2!}ZhadYG2>*sVxrKzjbO4eN-dz^hqs8=tp^tn za2GUkI}_Ktz=yh%JRF|Yt@h;DY!rmYlP3s(6ZUiw_dh1Be%qxHZkGZh^RY-1aJc1l z=D);q*y@Q9TDOg9&}I>`atN>DgFsd-dE3}eNe{^VLoa7Op`cU0%617~>fHjRAG`D+ zdKjA?ba(6PXBT0KO5={wmwp-B1LoM@ALR>BN+ggZUC}!oYE|1Ne2ybc+0|Jqhz8rTdba4C4 zZyzY>a1tTQDr)C3C_RU60tXG?vFW3PuFD2^;CG#b-uR(QsY0T~?%~It^D6FUxD~HP zX)y8T6cB5EqYnD|Emq6@srNjDs$P5IL*$XzZd`7mDC0=*##Q>~jlyIy-^TjOLL%;( z4t$qJW5YVy$DZmGQdQs#u6427G45ZHvog)zq;2^0PExKvpAB7SepRjv^Dg@i+ZS=u zRhL9QCckh0$=NNtO3Do+vlI5+UB@rX-pO@Oz+!`T9poyCFeSB`e>EG`IdEvPvaPdS z74uITXHaD6b0m0}WCmu*OGfRb?)9)Ib^3_ZET3V3zylF}q!;YGA+6 zY-+f7SG!sDFt#eA(()h`$t6sOwFPRPrO2WcK-tBFp(d-vVpqb638Rcl$siE-yn1Wx z=QcLzgtxU4s=G_b*F28NmzIS$x)-d5>Yw;L)?OzcBoS|z; zSWp*i%i66YXoke{(dgw|YWAP30a~8vlKtjCa0q#6E*-c_A0H?8CtXOh%&fDIT6yg# zdN!;T!L1Y}24jxI&fSro(jp1}^kn6y>Kaidgw0Gjd$yuCeU=E>-Z|_z8B57pGvYci zLV5+|AOQ-eYB3Ms4`thEopr`d5Mc7>wv^M>V%`VLqKeq+Fk?W+$E?lcX-2+A3Y+?4 zQe7lp$GQbMI|QRDU0w%(Fub^8`;YG=rO~KeZH)0it%Q>HP?j&MDlj9Ic9f%~oA8SK zgAd|%O8XwZ@6j8i_aRZ@Px(Q^lR`PzxIwfL!>-W|y|K%fkhtR<*_>Enyojs3w!+|$ zOBAs=T^WhAY~ubtJ}B-d!Fa71)JQ24KO37`Dl*U!2%;@$5UnB=Ge|l2fiyMhfUta) zxb=clxjO57LnZOqQck^DltUwl�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

!zaa z2AD#L6p&xV=L352>Ks$=*Nn>h_s4Wb@kxln$5#T#>0XIs^#+regk=!9x?LX%P5>Bx zw(FU*18W2dMk~7mFJ$ zAt~1ro}5X|3g$}Hv6oakS_UwXOP>$SXbXbpaM_wQUf338hdU@rBaMX+*cw=0lML^) z6sZG|RT`tDo|1>jl12|H#qq&vVeZeK%Ek<#8J{AeJNdCDV80r=#pb15yL0l}3{mxj z1^t;fa|@~9nqF{H>q*pHTULsnDc-xj5aE>+ee=aQOD&kcOn5noJRXec22VUs{C0TV zq^Ek>?~FMrrNF?z;3@%fH^U#cVbOV8T*k}gc$uhf-h?ItULlTApXi3ia?Y6Lcp%3K zrvxEnX>Bl0zc-K@I^bCQ(9BCwSf$xHv8_7qAM>nL&FzR%P5v zx5r_Vt7@kH_~n5pqV1J#qfd=#pPH-q_{1eOt=Hw>kLx^ELxEX+Ye(kuO7U|QMCn;q zDe-z^7|hC85*jof2DTmuM1oRVi5WqKIxY_0JKG3vl zSHR@G>{+att=!D8xa)Jc_{u7|^B4QR$Af;$Y;zuM&+vjg6MQ~WKtN}2uwSIL0F^lp zcEHcG;U@!I)Rx~2I5H9o+*0yoUX}L<-=wp~LOv-6zI&aoDwmk`ptnM+C(Z(yDO3*{cL#-YP7{kc|KNL)iJyups-~6dUi8+)~DVPtQH5SG)OY)^%%za* z;}mj*sZ|L-KVNs9tx1C>cj|%w%ZPxqr84-n1VQgwFGK|Yiqo|8r4&zl%8K8r zdDkyrh=4(ZDzx6Sh{7_)VO`R`$;;UYZl?3PFKaN5x^*xwgsPBfKK*gqS)CUq(f~=k z7;+zuFtF9z&C^8ig_4&!d{_?e*Bkv(M$6{sihUTp$6l0wD1~Djy^%<{@F%HcazXI1 zy<$YDa*E!aBHg!_FHT9e(8YCfSut|;=p?(oKQ#lGmoUZH`4gWwfBfaE)l5V$&%dha!@h#H-?!npVX*1&$>ZZXDoCe*qe zsx3xPPIjMd!s_M?(~=>HrQ~i~bUxEPxJ5ktTG-7H19MZBFX0L+VaHh#+N4FpN{_Pr zyIPK9 z!R_4v%ub|@yj1#)%Bz_4BFDa+du~M8ZmCKo)TU;~WCJ(>#*d()tVxSuuBf@~!LmP% zznMjUgd-I+PuK^sdyQuWmP?)}q@*vuD8xY8a0%9TA$&Sd^wHDR-~Q7j#~+zSkJx?z zi1-pVu^;674`CB3`_auWpclNqT~!A}H@~doON0hL5Z(OOHg%Tiy0(r&_=dC!noloS z-kZ-MQQDMFzd1u@zu%}IH07U%`U1*f{4jpLwvnKB-g(b=DX!Z-u!6zJBNvPvkbK|Bqk0%dyvI)+n0l(jZdL#z0NGF+qQ@^<>JoHKP0|4pHbnP-DUd7znOgm#0#7A0lfA?yIYn2y%(WBb)m%gn^<* zT-LzT>-S=|NN%*eAgfYcF}qj-odTn}>LdubhxRnCrOM8EQuux2&c3E?IKF_e5FPz5 zIXTZ#j;Uu4^(^bBXx%Rw?ocv=8*tRK>NfRWR%+&x<~J8e10O%#SlBzB-O3&G4srzD zvH=y4SO%7|jZt%XySRS3_~}=4DmWz7X^AY7_Jeo--+k2JR%OK*XbmZ= zltEr?L7F@ntv0b;ULReasH^dLDbk&Q`}*^Nk1?MQ^r}OF&{sQI)23`W+-?VvFg%yi zP#}bj@<(8~vmvTaF5Hi+hU=xp`uhI-`9MC2hQJCi_-(IW3ZDX1jiwht9w^jb_Zv9j z3UyDcWb>va2pY23a9BMP($eJS5mh!=60`0+QKoofAh1Al{iqkq@u=4vek{K?S|9O5 zi_CGl7vG}r$k<*ZAh1jQ*FrcpC=f;(xe+oLxLRxyWO=$X^{^jBEGyaSgEkor=>;W& z!Ahq=0rqkkh`@1Y0-uI60a*5btC0Sa+IE*}-4TQIcOT-jyPS^1%aNkbVls411F)JhR}_o4uBf)T z92+**Kvsqc`jsLwX78ui2O<5WUN2Skm(3n#IxX3sD~ci~=H>~-tS*zSYM>^Y{BeU6 zQJ0v}Uf;C%0T(8FudOem=$gGSLT5~nX_pNs;clNP*X7(QQ<*o^A((V1fnw0}7|ojI z&`{yb=OG7L@0>1$T1OZIOrAK6-~r@neqrTMKB2L}#!^*c#(^}Sa2h|yGNjz`{*wyl zcwO*f=^`>!{U&3rRLjdPSR(30d7EL=lqs?xQ0HBB9Of;F+_OB!+<+rc2$}x$f!(C( z^<+0&Fr&Y_>opyyn6yeAg`ysC9IV84KN;VMmaSCk@84T%nFKdrqUTFdmYi|k~UhR zV%s-YE^7=;aQvaHogKt}vOs7WJ_~l45!o==(7{40Y$J^h=|-p&g}BWZK3{MB3LP>V zl68e(K(w}XL4i}9WfaA%-)L8^=*_~K%9Qs^$dO%;WNWX87mRE;msXvL-eUT_UGASN z4K_FWI45ww`+{1`lGQ?k0ueL2)*I0kgal=u+-_a9YDnYOrz80z5U)jhj?bJmd}S#m zYN-+N(@XOnWRcT+3d?3GFvPWt7%J3eF?SEoRrk`hH6Tu=L_|`9T%M3$EiMo2g8I6n z9j$t@7<=t)lMmzisTM9qN2R$D*>I#9_)5S$oZ%Dz9&(uSd0wi8V+oo}I=aMHCNGks z5ND-*q_QR#eK?13@dMgZCaX#OoleG2d(Qer(AxVa$abFOl$?b`D2A{=^r~L4)kK63 z-9S4NK5Dg^e%&A+A%`ma(2r2}G~yy(5W`v?DG_$KImv}V`BFKUYAh5qU;LPH;9{@Z zd|nRcNno2_9Hf$E8Bx&UL-t;p)fXSF%u>E$?{0sQ%pjBnW3qE_d>l=_v^2I)KNO;I zIcTNi2#jVEbLH*)CPZ2@T@OoqPHx8g%?W5|XKVA*-!!?!B^}iuYIvbDE=OJuiQb{4 z)B-B3Xs{l6$Zs&x-z`6ocEPU;+hgn7o7)l7oG$Q&=@EFAWvNgY z;qI>6<4^y<(TmmGQ+TCvtZ?I-2J|5|ymlgc(*`30`7a>iuqZ*^Dm zwQ*>u_@EW2v>3j87C!Q9v6wBk~X65=_YX1p3fZ}^BFnhw`x^#rb#~%`GY_(_4 zJJHsT!U~py6K8Ec<@dim*%0;fRmjgNc#%MVbIB5^NmQ9fKp|~#I0giyKA!*CH2WW(`Jbf={&KnH z8n5x$vN&c$z5KI z9Qf&z7;a);glbJA3AfJT{dH^vB=JA&jIL?v-EqNfgdcs1s##Y*=y-gFOybTz9e>$z zdVmTrfT*BYR0_kdj4IGmh<9r10?t=%og7!9k3r= zZ=0l!FPx*z%AU3%z_bQ472^8u=0 z>(%dS+&=A=cEk-V&`og-Ty&tNqO*Cu3{oMO)mYCcQE)EBkgLPHJ+97v2}s$8`2U8n z`2va42*`K*Z;&|O18jmX>-Z9h^Ao@(_zj8kci5Nz-lm$Kbu08RrE<&dm(S%-2ZE*B z?@mAuI*WQnc@Rq2oht2^7yK#>Y^2n<5r_R#mzI%CpZc?ZMZat+b=h7;Qi=VRmi8DA z6Kgc|Y21BC5a@^hIA-uKXLam%`Tz4x39_ojdeRGd zT8mCZHqDqSMhp{6>j)hH(TQkjaC(eDeAgW?G4hl&9$0&&k(8SCSM$a{ceRY&)Jh&p zui|O%#_SB@?@RyiTd-V%3RD`~-)vn9bJxQfzI2s@Asb1ApXL`GsjjcQuYt*Zyp}(#ZYh!$dP|dew(!iJt_cyGL za|f^|ZE#Dw1ZRMpl{P?}vD~aVNa)E?Y$s$4TysHkZ^S0%3hg8i;BDZsbm1ng)ZDd=;~+9I>CdID$)oPuJt6eGTjqv zuC=B@ewzTk1P2~0YC^qgioe(+(S)|`Sp~a#>v{f6rEbZoBI%eNmxq%Jy^?d|2If1R zXV#(+i=WOkzo@O-%uRLLt~1zEThA))t)9c7dHju{fzmqL9XN7IL|Sca_dY3pLM3aUNqK_rH^@)+h<;}f7M)< zK{UZn%cLZ8+2Ph&LR&=@L@AiW1L_wb+Wl9lQ!=(Z{qjzT&I;`RKl8i4gQ;EAe7t+7 zpLI_6$N}ULED>&RA31%)=B86v5G}(Xf7wR$)Xv^1L5KUF!0-2Dy6Y~jiVj5V(X z#5JGwuD)Jr3rib^gy|he7Ll22GBl)6W(WZ0YM&s=Rm2$@Qe)Z;Y{`t~7|x&G+?rp^ zTlZ6FRn?|GI8SG}!8%()>d@<#asbc?x$5a>@%WEG06ihun%+6*S>minfpwKU^Y5jCd6wnAk198*#`Gc(=2Bq0)! zi7GXSb{9@04Nty=y<^iLImPe#-RMnH5(TR<5oVO$pkaSsqaH>965Sg~eBkJ{37~1K zH1}v8!e?^};XVGVhk3&m#L=$lY@BgduGd+#rS7HFab`;KN@e%JL7fh!?7DudlCZd+ z(v`=^baKaSa%uaPt5Fx7R+-+}{s;~&HGCyf9X(eu93J`BQg_6F6k3|Pp4VY*zrvKR z#HM)$+EEi{qivG4)8xTFq>>vdR;SY(`uN)1BXaaP;XkkbB9zYCN`Z(PygWgFUk`PS zY?$9Lxewh^B!+oUgvsqXR$Jg+=NBt=i2(ae5Yoo>C+q9N!4{e~8~iAT)Kq2E_`qav zRyf+>;bc%dMzZ4c1Ac#gefaU7yC~YE_LX&;U~+N7yR6Z zS)5KyYcFMDUSEyzyq80KtWSZu<^}Ck#e5vItB=|^so9=SCEfYv24M1rMR2g&d?FJF zeFN)dK<=?^c;j)1N2kKcx@7J_B&eV)`pMIf#L~q3b5y^DoP1{(hLmthB+^m8Z-8a1 zov{F4x9(_01@d6K=FeySFYdkrtf?(s8ygA=3Ia-(-r-O}FNaQolmr4oC@MWP>C!|| z1nGn%NN7qYK#&rufQ8-^2)!vyI#Lx7{5NN2uFl-KcjnAJbD!t_Tb{?gv$J>BUh7+H zf9qTC_rBd_HH(i$gc> z=$DOc7N+Nt7AM8?ac`5m!_A6a5%y;-)m_p<^+U6GUs^2Lep?Gj7ZRhhL9}+8HzEh? zIGuYOGInMAi`F(`CwxxvReyN`lh9`Go|aexF17}A)pud^BFc|{rd6>&d8kzlNt7wBbc&M*<|b%KJB0k_=*+5 z(6B7xj&!zf^wJRS{?RF@|0kT4A2Y0fGO_kwd@8Bd?_~VDPb_x41o~6Dce5xOhDCiC z@{DJDTXoe2W_pIm+_4N^QWh&-l#5owx++ocRT|-kp?#a8!mo~ zgcl{HFmgR@4up>G63#$B ztW2YF5oQ~-(SG5xQolwkSL!^G?C|Jxe|ZZc!9KuR-7*nyrC%rNo%Rc0q=o1b6|Cwh ztGO57lo2-yq4ql0VofW-95L5|M1B6#RP3L`wg0s^z+WHz@HGCkcS4YK@uP#FTUy_t zn~d(85|N^)QRJN<+SiT&VlURVTjlyo15#j_r5i+{TNo*(6x@&vdhkG5fnLeiE-?88 z!ts-HwhNRyp)$AD1k?==#mUJNG=rSDY7M2e+7%J|)xR^bit29*_~ZD5%8r1|&cU)@ zy@ew9V+N(4RhB}A&${Ju1{=%%%WqYmTH_8B_RwU2FK7kClt=l%>$QO>xCMVvRc!d( z^dT;;e0Rv*Pwr=x;*f3&xTreQcGDGWsV1a>O|&G8D4HjY`huO2Ige5FuIf;<+7qe7 z9kRHZXpEAg9Kf$5ivb|+%b+B04bczh=&MTYDIEH{PEkBBX*9AKmbPZIvwI+z8JL+L z>y&FJnYw_n)Q`q`DNiKl74cZPC!hJOv%)m+_6P;$rS_y_Gj4|<|bG9~K22~Ur zu<5y4=JKTPK6PMcAnmQ1d$$Zwor#|q3Zn=216{wouQ`ntX}1X#MeA1==?q=pwqI-~ z+$J1|VcVeF>Y6L885NsJ6wNsVUnNZ=BPAC4E$*INmwsitCxq$9BIj&BHjA{X(NAK@ z^*^lR@9y0x7MsQNcRjT5a#bU-gnoS5XT1(j3JCH|2UQupp5(@9YfBX+^mRAe#hA~_ zv&$Z4dn!a)f8(?1ah)XG83Q%E&KV4tOq<)qn;7*Dw$p3FoZ(W!8ZjI4CiR#&lOp7h z-t~w*YlQ+I|3M?~>N#Us266bf7`(!u+Coe(rW`;FvkmtyGG(PqI(XJsED8lUzb{CD z8Ry>M8Mr-6EID5a8(G<|?+eX95eW%>_3MF{O{*B2j0t{PLcbC?x%@EY(_n6tBLk+hnUKJfe=Iny z|6pm+O2pg2zuU9cYA)5*+c>%!F~Vg{k3Uyi5<1>04lmngHG*~o57?o=05WG$o&G=C z?|-mEE@UiezT!s0rXmFc9|!t9zPlp5gsu5pRE*>#kv2Sq1US5Ay!+gu%9EMp^n}IR z@pUHMZbXxT{`ba~g4e<}Th(g;ls-a_iF9QBB}-brMpOIN^vjEl#$W- zD!0Ye)rN)q2hIQiIqCToCCeH}W`W_`h-HK9IPXrkoz!)gID#BeH<*h4Gw! zPs5BE&%HF;t9ICT(UY#50BCy^<&%fU6WcFyx$@Yq9Wu#b;B6$mlzDv4ACQ>&&)Vrf zO5FWt@AC(K@88WE`TL6+>1^%N&APIRfz1SjJ-vHx2d>fiNNO^=s9^3?2DfVn|E)kH zKTS@T!p8Dlmx7n4^i=r2IJksJ4MgrAs;_M)b>V;na04|9%b^FA&UO-wws~;(A*1UP zX=Mk@t7Vxbg?pw7@&Su0Gsxx&8|Bvgv?e$HZeQE!bJohI3s7l_tvnYt4%G_D5UPo!Q7W7Nc&%iwg(3KDt-` zBsN>6a(%{6w8Xo3ZSys0vEysT3V>ji4sth;&OLBTheRUZ@%?@#n%`fU|MC^ey2R1P zuaU(yi`lm83~9d%1kxI^UkEqyn&7T@ui6ch)P4qW_I8BoC$_uqdhJr$3X>I-S-X)c!N zb}Jg&-ZwRaDFl4h2v7(>?>=4V_xFwQ7b-hzpHgC{XF(coNz^Ql91Wc91joYOB5bwI zSKR`xf8{ovOhqZ=CzPW${g_NtP{QwQLe%clmROpx$_$Q6nHq|0(;UF*Q&$Fp&-Hir zc{>p#-igso+*M~mDY!mum4g-n%pYGu?W#r*R7ziZ{duf;a#}Z;u3?+>sHZ24bOTs` zO_R*S{If+AruQXd6m~yfk88r_ekZHl8}Qx&@&q3E&WIS_>(Ah->lBjnu=V)j%ezQ? zQ*O>OKOh1ZhSP!2i6T5L0~Uj2gbCw8Vo#_q@t78J#Z!*p#ceZ#l2Mks`i1=dzibl! z(uFvOFUZwj3+kNKL=aF_!>=YdAf^w6EKJx$-spwN`w^igAHGfwwU8{IIVUUDWxl4; ze`s7@V)B)z=YaKMj`PeSY^*rVDlViX-9%MecVK!psu(IP?!%I5_AU_+dVuCW6}vBf zgCAK~54x8>0}p6u5JguZcWjtNjK8~&7>N^$hu zsa|vPz`4r<7pFb%8!|n@V?o+Bji4#3sxi$*>~QM8Bt&XUXy#!iOiCBZnnlP?Wc=QC zailPD{dN_p6!lBaw<-2E=i8;WFSKV{;rgYjuGMl4$VHfav)W6h*gzpp?~=vdQs%!% z=lx5q@_R2j3CDyGET6q73r$AIhK^WZy{}2S0$=Tn(oN|J!E*l z?mQ6u$q$8LoazjxR*g*+>|B+O*YE|MoCSDXj+gL{C9UAlZZ9}JOC-Qnntyii#O%~& zC!4^+l-{K4t~=PI)%E#yn9;R$ILy62FAA3@XW4wWw64b2GO-O1>?98{e1T_$yppg` z`y`^lFm_m$I{+8q!i^-;ZOHT0ME<6$fzJdO`70M1Z_PP2I9uk+TgOcjHjMghMZ-u* zwGgcuj+|PfdeY8kNk0YORwKHNtb`utgot9VUT7zg$NbDu#73FZJJpa_1w`dhU`m&bgFg=Kg{ts9m`lnl)wir;4&_u3PjN%*c4P`s-Z8yVLKdFLp zQIP^w2HbN{7lH%56}WdcKPHfV00xI1;eBzB2_f>=`x#@$=r)59*YK6b1_}bBbDJph z2sa-X*X1Z&r#C?(KnN?Je+m;KsIqmLGRrE_PC(k^``TVTy+AKtn6oovO#Yr=_i zU7@16PTjkNx+$+x@ISY}LYCJf=E6~a_N~n3!&y;Dd@`e2nX5-3I`{e; z4`~{Ya?HPzy;ZU>FetBUbv-X#XtiN|aRga`V;1qgmk^p)J(1=CN#?JzN$9(SEEy!G zvbMJSS>E5+h#fJtkf9nZK~zR5HH!85LK~LZWQ;i9kJA!PqY~?Cy|u;d0zPZiz@hNQ z?G>&(UnZaNe#cTKSf|>Z>4A^3x+nk-NHEmxpH}YFKGhHHA z*DObvzLOQ2tvln-uX37u)N5z8GR940C~&)A=%k|RCRp5;K&2#Uk=}(#aKm`~7E$H$ zDm}pmr`VOGw}Pc~k%1N^MWF{*LYb;eU!MixYNczq7S)^ye;30}H8!tL4T8IbL=F4afs+p&t(se1>f zv1Ilgxb3e8NQ%0Q@SqBhB}EO#`H=x`$C9F8u8=F40EWD+PL9SXL`qZXHvA$0Z-c(C z`VHQuqWA7Mc-tP5y+`vmcw2hR{7V4d#&R8iw@DlQ1>SZ_C1buq-skZ|nZhGDz47*? zqL{2qXKN!fLAoqo)bpoW#Ie)=P&P}XI*XACRHg~k%Nr*fqZN}A!p@>ERX)~Yz9eHEDYP2Y}7k=lB z=YG1<3};KWEj_)3c|uja#;$UDd9-7ZLqMbzN~!aTUT6Es`xK^G#0-Y5?7ENp4|U$< zKgO==L2ng($jDOMiT{$HlVq#m#g+9S)@z`9kqaiH=#SquD5+o6YgpDQDDB*Ay}Ui`Zn+-sx!*=oQcB25Ui;Cl_x!Pcbc*Ti$jWb~f&|cFM|>f4=^1Y8Xscx9Qgl4ev_Y%pCnt z{tO+juqN-v)LuWlyXj+Y_houY2JB#2EDAfvzQ>jbZmm4WK2L^id>@9r7U&|$lF>au z{}SHvW@F$&IYmMNnq_E@LVD<&&M%GQUwjeyem9s_+QqZM*ZkP$5t7~ZRg@hCJ|W~B zrDL&6zSfu2ovu2#hC@0NA~2Dj4MH1L`4sicy0SbzNm_k%d#}6}HBLJwJyFw}>%Z+} z5eH^^_(mAhZcJZ@3ot;kG^q(P$jCoBKW$KDq}#~ z8FIq-+l;U2MUQ6V9P08Fnh_g858pNu6Rg)=_Y&Pub+hH}XV0FaDRaL3RX9#q>tLn; zT-Co4W=5i6`(p1^p2u=C=q$zlXSPPFlFTo^Toco=b8>L>z9uIP?5jC>dl}k!s=K@1ad)$G z^S&l~O-$Y0#og2B&Mg}|F%3IkCmTDMw%T9XRYTqQPp$fwb_YoU+m9yxKK%Uy*(Hb; zSc~k$i4$Zufq!J*$H>&lPMth?{0D5Ofxk27&YU@Y`V8gSv*hP4P+qujp7Q*8Dr(wG zRMa%o=g(haxI}ZA4nUw>xOn9%1Km|xI(oX}o18cWTyy#i#hEh{bX4c5=zjP1{S_I_ zxl^xBzC3k;lk6nTiBmKuzBiGv9vAh`+n@UYP^>ejDNa!ypSHRL$flhDihlOo8Ok#! zPM@M71CCCgAwNqCl=7S@mY(4%2WS7l6)qXLZ&D?RPh1vVLBY)0wN$@$dFOP%TNBPhCVUl##EciONZhL2 zf?U@(V0~!2rNsXmC5N)^K^;^!6lwrLM zD4%D2_Gd_Sob@lOPSGEwZagaZ+Tyq~Zy2U>{&JYw@)x~d!f50VdSUjt???F21m&Sq zA2g7=+7}laqULu-J)&Nlq|DLTwmJ=0dTHoQl0-=I2<%uTSI4m>S}Jn5J=z}t88y%@rw>vZRu!O$8rQJhKz2A7r3zKXlQX*C$E9GgV9<`W~0U5@=|Uw3yF z9IC$=3q81(3w|TzrBYZoGSf;@k)6m-b{cuBhFmM&2#Sp~aO4+Xes@tIT^C6?j?#^O zlU*4mkUL@g=vr?LGsS64;e)3&la6Z_Q6c=}!fKtgxk*pn_GWMLo1SS1E7R*kp?IZN zIQ3^FMA@=9B|g|{ohs=~v(bI|0FwH+!1VGA%P?jRl$F3McV~Lpb#1&NpmUT{VkfD{ zR)m-!#ndZ9T^?g#8K>5igod=)%|gxnLp2he94+V><*~G(pwz4ny^Ks3zQ*;42(}=n zcTHAo(uow=^Zg)`+UMWG!?!+NLyxS`sfX;(zn1EBl(^HX&4JM}A259c zz1w(4wu-Yfc|}Q3l$hDo?_|jg z`5&K#jZ-?0*G8fyL)c;)TH2p(a)18ViXA0Ete3?|+WW0!W{a^rc}%RsQQ|Eg9UU%} zL!xhI-qk;$IR^lj?qEHceb$%Tm+9*mn9WLWmj z)2ADCy3G>lDKsJg%@P)SOQk2aBdR&45nss;srS6Ulda|LF>L}*p{}^LIc0iOm$SI1 zpmJ1y@SSYW^=Jdma&g2rC`Eq|r!DOgZr7DKf`9%gTe%z&TWmB65`d_fB?DVVQCDlw zAJa$vySrTEZM~dTU7ufk=jn#oSPrWI9EnXPmy}>s#V0615 zg7mSWy(Kk$t=&0JU>@cq;o9V(RA_L@;PMB%rjQV+g>Oq+8Epecp59h^o2`)8@|>xz z#l3Nv&8mYy+0}{Vk4*spt=<*z=ex$n=!DPX_mo6fNF#7lkjWdHp$-VTqU~0h)?gZs zERpuTMkXl#>xLw|Wo7zw)o!`V$_6fwS%4Uojghb*PxIg3$tP7unWOA;>9QoHqq}+S z?QNyVPO0!2c$g85K`3#Y-?AfH9B(@F3nn8F;YC`J94mP`l|aRQd^Qb}F3I9-yH9qt zvaX-t{M3ckRX3iuaPKGzqKgv80-g)<6cMRfpqI>;@a&yaLPkFF75Tk90}u1_H%xq< zb}RXy1)E@+$+V~R6q^I+AQ~DX0$jQjP?|&yTa*MBC)0n|M*nBeFWX1*RBcP79WV(#+kn4gzx0A&V`~?1CD4_4Ra{|Bz*BKb>Vzj&}Bn$|E1l8i``GID2yFye3H-4 z{Ux0jA`udJGyQ7 zNgz?ZsFOI~<0w0poG;7beRbE0&<`}_B?z+wSNV3DGLa@3pXqR~zs~ilYL7}pf6SCXd+Pb0*w$n#_Wq1x{+j85I-L*O>a|fFTMD-5M zneBK$NJ$CAYV{{h?K5sNwBhK-P!Tj)&i#LTOOa*lhIP39;(C(w5`{9=^f8DY8CFf~ z)J;tqjhu-oLALb~D8cM!Xc9i}B*b47D!1OAOl9+2uM$(jt(mwLl8Bn|V8L10&|Sl2 z`06V=+gO3gjySK!_R~vQ?M)lVm(29JEsLDn#ucBFOCB;m&65+B3U#e;Gs9tC3vff3bkEK=6X3Cynr7em2^dkNt4UJ6!x-EF`bbs!n9N1M=9;#}h z$nGIZRet6c@dWy{XH+MlmfRqAuP*rP?KBO!^C^}bRWhFAF(P`Pt|L6ELZEV74HX3K zM2OZE0$RfE-^u#F)H)>d&5z}`KP^tJRD!Wb*Oc zxm1V7qn)zQ6=(ah>b~clPNHQ8y5JnwVoEL^9-tK9goK3TtNX72z@%lxvMc%PM0aV8 zZ;xwB@qtxywR!2A*~;R4Ic|&@;$YO9Fm;?-v`}Yn#_cWoE9)7V8`2+w zd!ZtgN)BhnaahI`w>yVapaL3D1k^l)1I#Xh&P5nIZ=75DS=M#dYvxI|=`XoGo3 zQP?I;8ME89zRGcUp^zx~ufNgh|C^hPOmc6Y{;Z)#(xO8hrv%-$zl&}}c4Ducb}%iM za!fmnO7CUAKCKCcLo1Xg#|gx}^|dlvCob^HrLLJhF%hfTmLxW=w!#|j>_L4Ee?)we z@grHHI^yv`P*QYF(Q^rwXMhk?)4~=`z&M!)bWc@R$Q^3wL{Do|Pt>SbceQmgJ;Ng? z%CjVua8!0;nG6$@>Tp%;kOJqgR=_Sdzw2!<@}10dbWYr^Tj2VZvGe#!dX@dG=NN=} zPOQBXRHe|DYVwJ@$GaQ=xjfo=^h8!vtvLho_M8kGVlg#>Qp~nGJDD#AVcHaLoA%N9 zgy7Z|eC_C7BE)$qlW*8aj$ks*7-_u>;<&{1&T;gEtwxR_W{oGIQUeT|;;Kq6DKzrB zD1VJ_WGf()cCla<@FatBYt~ixJOr9Vl57QqB4A)>H+b^a4#FX^eA%qJ;oP@~<><{B zgk2tmHf=?GmU>JRB7aUdsa_OBRBXvAuAxotbNWMh)#8W*Sm1Q^BgiVA`ivW+u8E(47^CzaC|W>g-yPd&5e5e{!s!g z44pv39dWz`-~4ym$)E4fV_6hp7h`+C==JUV8({eParEkc#a#dLm@0zb$uM5##4*kC zss(2+J)A)XtezhCjt78JkfWLwUJh^=WYBt0Z(ZnrTQC~8($%{3Y|eV_+-r}RyS;@} zVgeIZ*(HfSG5w|$D>YA04-u}l%Odc94Wh1;|}=4lOGFQpxO_A^rDhxm&{F zT<^U68JL29ZP(&o%nPHJTwxKjEAyy+gw)krGw%z(lwIKQbqxZ{Zj|K;UsTFPI8Mgc z)WT`3blw#{XN^?{+rQQXxHh_Z1R*d-)sEfq|p_ZXsVCrP^66tUo~aMp)lzK@vyfr&QiH?!89Ip(I~hmv~%_ov)9n9{Mq*9Cn6bN?F>Ga zNzaPtAPoE5q$_w_^(A(w2=w=DYJH4X@5vdl5fs*03UnP~46es#=LjWm3@{dd8Pw7L zk_JmPOQPq0H+Verz# z!S`6N2kNXS!ZM5dr0S{FVA+`(elXigc2yAsn-kcBJP4Mla--S*l;L*gXzNM?w6yZ@ zo_b?Ya&`1b$YbFnX6{ur+D9O9?wKfa?8>y5A!Ysr6MA6j#1*;9#FC(k)wZ35w1|$# zVy{8V zUh`_*%VHylV4NU23OW7a6D(7s+gi8HhQ;bV-{%(uZv-ALV@JnW{KZ55&LIlY{S zuaXxRe;B9m;;sWvo-6Kt)DsapUnV|b{S)4WLFm5sVUkU?zSF1%4tyY z?Cot@R@xC!38)Y`YR7 zkMyUKHt&mxL$nB$&m9?WZC%^U<13$MkGncTMpNyUm@S0JTD_MFM!$LHDp~kV%E7R` zOzFuSV2CNFI$jd7UKF3UE}tV?E-DDkC?XeXV+t>57*w^}^oprj-ef&ByVHby_e~=2 z^9ZviL$*l1lMJ&tZDk%~z~dpxSK<@$c;7~rf;dywFR{is6K0y(?| z(T$Lt#?b7y92Y6qYEZ>)GbW}ADAK`fcaweRH*ts0BYen9XpVv>d@SaqDhHZ?Fk`aY zFN&>Ny_`)Q-_J%`lqv9WnuzQbuk7%bZ38x`4ej6fd z^@hw9L70UNHg&NaSlt**1uCK?H{4>VnLX<$GN)vr!sC9BWxyn3w zY_7PZ>hdBWsIXc+A=1|A>6&0&@>!q!==i0t9?XXS21~sBEzf*mp~TJxL*oJn$w^OU zv9_eBZ*s1IWz!1=ifKNsxpX@&r8(ntpr9_Ot5Px1Mh0%=JS(d1F;`Z-Cd!?}rHC%z zO_Y)!MO6;GI@DEr0#+v1($cuC5_Q`@!(o)a;^_qFUf{#G6a7Q*<}k3=<$xIE@F+#( z9wN;LqI~8&_7PyMavoMMc3!>$bU(*>HdUmTFyF~~gBZM4+`g0T?2ehEKUJV*(~~dl zt|8of&MEUXHkZmPGDV8;%II0g^)>%?YYoShHE1z{S(VnP83K!Y5YVj^Qq+nGUBZeN zuzGo$1TF3y$nO^O(M78~VSME`m080~Jz+C}Fn5{!0P`_7;^+~gfg?DFM zXObAGp=1rxMQASI>T|ek78|tc~w^(Ym$9rXa)ECdhfC`(7Dg|Mg=; zxQ#eA&8NlO9p`DZ<&j+=THC>7egnkOd^tMhX+gk+9pA=VUv7MJ-2STPC2~W~`o!bm z7$z54Ng*>eGf33vJy7QPr|6(D@1lwzuuvRkE%9NSmI~X2#~=f~4uYkf3y*G;KwV2_`<*_5sDNI_{aCiX zzC=|<8fn{jqD??pLM&Xq}gQF(SeDL>LDzihTxYsvIgANbLxY@P?|D@{T`S4{}TN^6FG zU#Ft<;QJ2HIZO7*9 z+l55G;AER^G#)pHba8RL8pkpxop)*0)5Dp23zlmINoe(8*5wivP-YkPD7ry7af_+! zO`pP0Nxj9W6PJ#Y(USt~g&`vM2&~;A^qv}p{+$mNbehc;v>w;X$w+E3IgDq5^;%@? zVrF(_=hC!r^g>AW*qT$fGpp>8vAC_x08;39GKFqJ#QThNh{TIPmDy^2CFn!RyiJL7 zt8>-9swWRq&e7VyhzK?uce+gpUSTN+SDdt3${actd|D$B5%Www#E?j-obk3$vhYO% zu_|SDzayXltb^N=SYA@2JBX2pDQXRVE5oA7C}peV41<-Foa(;0L@m)wBG1-ROHZKr zit0lJ2VzoKHE7E}Q?oeV7O@hS@NsCXlQh(aNn89#1HPINNH(zFi0L zkD3CYm7V7~`AHS+qQ&PVIe7%Q?d^7e1T(8EnhfdbV&Id?GZ5qHG=P|mY22rk!M@7U zoJ1^c#$k!Y5Ewd#@oB)Tf2Wh%;b5K&yi+_%;hhBZNVC2$W z?8DwXn*Aw5<&91DcVu`VDO_q=1+jE?QdxcPW8^?F55C`=l6n99%Eu_)vT-+YmX}Lw zHbPDZ)z=kANA8)Ac?dZTU2=k5ujYT{{YSqoFXZ|F6yw?6qE>@mc|+?9BDdOnS)-{A z{OhG!=)#BRX=yQ=gK3M?7!PnVo9T8&ZsQl+%wOGV8GKFEVR$KEF&s*lnKbz!JLD{PIE*n|ZYYN`WAA)m2h# zSm$Vu_x|DGnIbvrx1|pn-DPs0zKK6zd7}nvFz>Hdgb@TJxjK##w}+0_-sc?_yJ-v^ z@k@Ly4q2$t10C7D-3c=$H###QYy*>@Untt^U*7fEG2*JDZXrJ$C*(3Os;_uaP{QOQ z^tV65?q;{WGx^!wkVqZ`O6>l=D$oH4j5j{RhqE3B#$D&P-w#8M1LKgSPPIzDNX%<) zd(}c<)xx+mMrHv~Uq1Wp#ngMadhALkpn&ui~bIs>=G-l;b)x}xh5 zBeR^ESp<}7WN5T2{WY;vmpN z1y@D3eW1JVE`L+EIEnwccK)dSQvzvDZh*UTK8ctLxGVeTZ+NmEyDO9Kdg5UmfV=W2 zCy1CAa5u*SX0MGokMDU-@lN19)F`H+o!wN zY%6bQWqB!A`!{>7vAizRcWke8*?DgtT0mUSJ$K8~lp8}-ovGDd ztlV@T>t4+LC0n`mmw0puwqo6Yt}ya?+a^%YpzmaL6#_s#BNBk!$O{cZ*88GHdLhYo z4sXGM*g24EM2fAc6;cK)HZ9n=ZSB}%{e%i0?;9RlEIRh~<$6WBbO8y;f%{}Y*8+-~ zvMn+>vgt7Fz99I#)z>ciFa_vZ(zI1mbEv+Y&G*GmrgQFq8RL;HM)H6W>+LhFyX;A> z$ZXRa&eR>-#LGz>GsUq@IKlQDO`0}f)!fmYLi+}!k^@b(lHE$P%Z+U?wz`ypcy4ruQrbDpj`T-~>xX6lr;ocx*A;-MrZ}jKFHl%&X3wnEVc8%lXacImuY&A%DppK{Fz& zyHHC1&IJ*IeRumrRS0WcR2(&n?#}&Y&B47vql#T7A+Es@bGveJm&cWAq~&-~Cz-!j62Rvo$RU)OD!;S>9nm{7o~hI52+XSRtNH`H#FD-*s$^(Q@j~pGcVSkfS(ZDF72g0=7ep& z6ub}sWM2p2LZ%~>x6c@#E(9226^?V!=~TZw2iRd*kJ(})uN}OnH>52AQq$KH4ZcCo zPKE<1>wfKdNBj@he}(`0NBSo8?obuSMj?4LbM>dkzklrA{HQmj9~FHPuOi=wHmz#TjT!zF zAfR%+HX@lftp=M`*F`VD}%p z4E<#DUMi!z!@L@jViz#CImZ#pN5rB~kI^Xvp(iNgia@H`Oc0ZF1~QiHNN=q8(#qUO zOG!sV*tWWrtz~i zQRY*a{;&=8pRDPb;4>bpA7;pOK?t$E3@f%QYLZ;B7A$j0M9s?UKJ8~y*T~Kumy#wj za-%C4)>vfoqYm20Nx!w^UyZVq`9HtlPXJkK|ETx;Yz=ynolYY=g!CS1X>nV)P9X{`kT3e^RfNS*9OB_Y#Vo$*>Zz2pwgtX%f0dX)A>g*>vNwo zE3HB}ILye9M1R*9{Yy+ z8t5Eu4e+rRE+B^c^JDzY{)ODHM%NF+=K^c2P}k3PN0;#h(_Ibz4`Y8jB{$*(ae< zu8`Pi+AMRuYy4!ApUc1bzLm&$(oz|_t9}NRz)5-i3y0z*B&RY9T{h3clKHuAz1-_Q z!YG3Z=l#;6+>&1i0l^vs0+*!SP;rlW!t1YnEYbV2{1Jyq$sUR!(A8-zTU&d!7ZgV# zgs=8?fed(pYiMdpUHg_@zh2bIPNZH)*Svg(P3QQi$&x>{SfC@~$@rrJ&0qiK(SJGw zdNt_bLpVs#2*!6EyP-kAhoT9V(K$R2-3vSrFjEY_c?<+*IC^O&R)DIKn77p7iF+v; z32$y9piT#8=kO5aiN#26>3-K|F>bZQf^+JQJR;8KFmwTgQ;~2!%KXNhQTcefn5vI7 zt* z0^KJ@^bkla3xGMbPlR2{vx32D&Z`+`Kc{-}_Bc*>B7@j{vv1z`>TG2;h;t)ZU;Sxz zc9y^(1(C(ZEI)b*;p{<@*09f=ZZpkK`Gtw>@}c%%t&+s%x;4X_w{3U3RtRs~i=X%4 zgxy#!H3;dqTJNoag+eVBZ38ts#5awXTA()0l-w~_djw}1HkmxVYtRsT3FAyI58Dac zpc9z=GB*e0gZ69QpmT4qCsj^WP!%6w^$nepH?l&2Y+K)GR3ooh|#6;t%1M%%Fz z|DtLQq}uhih_3-H4`~K#6?5EAgc~&bUWUn12E!l#}k0I&A>u|XY zj@IZ42uZDg!pKgC7zF-0x&$`?d6{L)y}i0~AfD4)oy3_SoGG*jdB6WYg-0IDEsS>J z?GBPn;C@Gve&Hh#GbPt=`<*PM#3pc}0{PL=CNC1vU6Whi@-TXu*}QL2$jQay{P41v z^f2<3zbp|Ta*%?$LMq=B)F_}y&RTM`a)HtD)1#6gnR;#viiNuxWyaGaT?V_nOa`z) z9T+Ws8tzK^y2Jqo=wNmM)$-D0u?^CnfdPQ*?vK|pT%)j}s&_zpOwnM2>drCNgTmCw zJqsUKc{gL4=_8z$&^M(GXLs39X#)MtO08mQ*>|$;>n8K-?Uh%Q^&V|c@fnxCOBTXD zv=(^$75fEVg*0la&Tp&UZ!IEIq5V#VzN}HFVJ`=2DMU2Kp%({c#9eM!QMeouHO@u9 z*lPjtfFZk;9T`3_aCUhuA`%ksE^z9Z3W_%m>agqD&e9}NWEERcHX`7uGzsEupHt|4 zJ6+~ccWxFu>L^lop{?zm#|Ee96lVW?eO-;;P@bO=-0tRLAWtmB9A=;+b*0SE3a0l7 zs{yh5Vio)rVIV(ic}UKu9qF&zh920SgyH7U>wL}Xtj2k=Ufc>Vq5|=w2rNNR`ApN{ zufMRlIfvX02>Bp4#duK$)Cg#Ke`Z;aj?5>+_}3I4eq0221wRGZDvl5SCg%Oht3g8W z*-7~Pd=;PSJ zUb%V*&#N~66KhuK$i>0;CR+H&6(Wy;NG_AE4y;??cu3^}5W_RA53VdRk)3EaEL&pP zQtSh!Y9g_-3+uA3i(SK?O;S%MYJ$-9oEMahvBsSpZd}oAL8FkI;xcYo7lFF7KU!4N z7*Ia?$rOGv9(qFnP4bf|{A@k&Ur!hQumz4E#*+XCG~0hzUHJd4UxEoc15|vA!bDh0 z!ya+xW=h~aOL0^^J($dU&a-r(-pWW_8nmN+&O^A4 z<7-b&vxfST1h0H9cme7CE);>DpElRi0bDar0uVyO*YWy>k#Y`P=f8GW>|^9si)-!i zgI%X{99AzI@QCX3>hVh_-Cm+go1IQtnhpqmsMk@D)wCM&NvbNhY)mTMv^i<+46ZGa z-T4>T;?~7bS?TPeFM+(;uUaAZsUb~ws5H{DYwFj|7no@V*O|GQ@{)_ug2ccadb5|i zq46tEbrHy*`0PZ2Y(-@i*dD{dQa-S_E$qusx_Hax@~pW@{S$lI^b`>96R~dJ$>fp3 z_>t!&kF?BpJ){@H$!jgXaNC-bXoh3?O_HenQyuIx-V*GEM~| zc&aEQq^qi9c-@)eZu<$`8)6T!6i3$S{n}5StvTKU^`2J<=wN}-IGIn_MQ>}O(8-sJ z=_1;c3b}S!;)ix&*6LUQ+y?lv0Q(R!Sn+@n^_`4W1DFdY9Fg|@cO`j_N0EV&Ywn&**STKLjN2(d|>n^gSl4;6(sbBT`H0DYEN8i$0BNZ zDwY_~BGlLVDnuw?#u)DC(7{vfP0Pgs8|IEze2?x}YCh_`T)c1FvYY{-5LIc{rUUYQ zk;54zuYAM;KENBB_Tnom9Yp&S-j9-uTEOb^9Fv7PI@1*a7Qx-+ z2*f@d#%vpAEbqp`cklNWl^Ya~FHT#jNz?ElG5yMkd{;w|CJ(JeW~Jx5n;;_6@Jpd0eqHu(1819W1%lmFoR{?m?TUg_q{AR1{5 zbCfG36%cY*Y`nJio$Tc7cd~}|{RWlqWHGZYAHS1*s#^a}HnOri`NJptLxv)w;%)2h zZ)tgZE$gY9;noVwbKlAQgmPzx-9NtdlSxfi*xl^3pZjgeh7|d7ixArsNEwA+4Z8&f zIBe`SKx>?m-~-VLq$`P6UC<+(t~0fYK}YgW%NCnZEVNGZz{=qtnD!zxP3k24~>c*6T!201CW7)Oiz&fyC_4tj+abVrJ z!JNKS(U?HNB>^m0?Fb$98W#RP?%q4BsdR1oW=2IpiZqozlmGz&QbI3EPw1idp_4$s zP(+$KO7Dcwo0Je*5P^h_BRw=FgkDsd(kwJZ(fPvcW53&ZkG=P^XYc3v-uL^~AH)SK zu6p0=zOU;%f7e%hw$8h6wlYc}{_QZl>NmTdL#p!xL_Mndz{Do%QF*)g%4(k;)za{m zmj?FtqpB#+CHR@1#oafEC;SX>PRe)vjfQ38*}=!(XgCh{I#+(9p&AbrHx6G=j-TxQ zM$>rwXy#H?ZpXl2Z)}A!|yaW!1G(XdqnR*LzfK<|7GSISK z8AF5!SpAULLx|uV!#kC0qk(}#JB10h{R^V3q-=6UsedN)Q0=Kwy$kGV8!tjgm>S;G z`%8d}+C0vFKcB2g_--=!@;@Z@{E#@6Jbgl~|8-TW*bZ$Bp0X8;%j zCex6S*!xJyqs*K*Or8VvE5wAiT63JIt+^#><6)8qTFr6yRfafra6+Ll+zS{C4dyb7 zM#C`F02Ps{3`brtk@)s-*Yr1}ST~{L?p_7NQ9dFayu2FM`kBhvf zrbb2%-I>zd({*zgleN!Tb#kU~fPD3i4O9|55F7HVUg+TXHq9xa6$IjPQmrsy>Wd=k zOPn8`z|HO@KU9mE?6;0_M_>+giDe2fXzFJB7uqaTY$i49Rv?tki#UUB1SxyfT1vXk zxWYI`xJFPjH^0Qon*<_0drEuv9LNJk?kpCtucIc(CWJf@8ET1LM5Xs9-l@piWw<> zg#?xwr1wY105r-%B!?^grn~9w=_)EHMw~y1KUB79ezKPVKkv=gT{~PHzJWSU343yV z#c55g7;y`l@wI^4$=7Y7-&82vYS{eZx6Icr;#_vI8&1rbYAe{7fQg{6E={u@-t~9$ zMGK+tmzrCt`KKplOyC}bH+;}bo$&!ZdxGs9M{4oQu1XAY(w-wmpmhRp)*}{xl^z0D zi$OiG`wpp6z6Qq9=SPL1)ApCyFt&!zD!fA92Sy@8nN=rN$2f4A#ZGpuNFBJ&m~th| z4rvlpAcu;AwiQ{@(8$=;H@exLtF=_8VBFmiCFh4ze?n5>dH26D4a8~m zXVcrize=BNw9=|p5sYotLS%M@8a_Z1TMWnt%5+e40?QHvJsWkFK$U0!`Zzy862e3;R5s$r7trTgm7qz@6xKFk+HRYSp`Tv3jZEn7t)ypBhlO>g{s@;6_q`a8*T>W;nz zA6b=|y{a}iMOr%@Q!SRkOUVPpJvX!-%!fJNC}FQko0f5=>eXeB9)FR>_#vOTq`!M1 z;xDA&@+wI)mZWMHUCL+#QCgYCb|@uLeylme@h8PA)NAuEhv9y|j(_IIk5&#}S>{Uw zw!Zm}GsrfPN>;YiN>uJrq3pZs$JXZ$Tm4^uQ6)+vEsepkl_6^RQTo^z!SNR?Uaq8? zXmU{|(t00mS!GVv@qDHz)ECuFx7Z>mP_!%X@v3kC;A4FLuyB7K3#ENz z7bIMv6jL#Z$r2tS>3Hes>0Q@&oLDn0X+5Gy=;LWlb4u@Nva+}&It0hnIq6(zDzvoz z_%1}u%U!QYPzZu<&0(TfuX^nmr~B5^ek-a_?T#kq(IGcmtDBp3k8_rda}8JtD;>&< z7YF}>C2&fl?rWLmI^3VSX!h8FXZVf)n+Pr|`?^QPXsK6(VG(D!FsIV$S^OJFCcb!8 zP`Xh6HyYd4$0=IGF2n+45KzF|k7oD6w7($6@K?hRaS7pr znoT&aJRz5cIkLo>Ua!yIf&-jE=N3LOm>|NKFGNZl=Gu0Q(g*UwNjg@@l^wg-g z=9#9;CS6RwzR#5>d^#Wod;Lbk+OW87kjAu%`dr|eeo(=0G*gi97Kuc|8%}kte(iO) z97j`&i*@&}@y5_1o3+FGjiKWbJ_<|rycU&{eGlNihOr}s1WB})fOURE*6X&naE#uh zDudkc{!LLHf3mKtL2>)YjK^qtQxb5kHs{i;Ah;^K%qJbKUM)~ky|a`}C_A=_EVNf% zPkRH_yXZ{N#s;QZ+$-#Cz|rimhHog<)oF4oxe$3wp+ z02uAvyqG1w6FmU$fkOdY)}NmbTlL;Agqb;7dT3u)smuQZK&t?HetnDyUFK6-NkWh&-ERN~`+f*Yc zlUysfQ>76XDD`xZ5~}3v{UJ;4@FpJ!&cqvQhtYkruZF|rd7fP~?1x3mVw&tHD-g?* z{7POP_@t;!Qvp!s7gm1s5|&EwWTToZ9(7Ct?^1Qxk%OH@&8O~)Ae-KtuMkzU*vbBK zswDgq;J(0T;M{f-Si=5XWjqy#&0zx>@TCuC)(Cic@azD;&$T%rL+6cX#bskEGJ4^{ z@vTf*)VZl%q5gK%^)G`%ch&e(l+va@|MD>{{o8Holos~DXfNvg9=btKVsFtuct#Ru zJ}XdVLmw8YoJvrq6E+HU_tCPTdhw{mw>M8N-dp$|^_VbHyRd)R@xn;^r#vP<0&9q~ zUzRE!ZOd-9r?=0}W=ZB=dLJ4n=ZSO7^UGNb;W+J8-CS*6 zpo4>U{be&6hH|yzlRrC{kPV-g)phw*c<)O+3pq|ng?eK=IM|hKzCu!G3gzO022@dw z8~E9`2EKWm*?Bf5`;M%0KvhSuWbf3BQRO7--n>i5MyXw0#d@!!=x#RZmH)tc-VO&q&fHGhS+M6CatqCHM+hWg)p!sANUz)c!WnoR|Ch$%fNTBw%Z zoy&>lGjK29gZ`|adzI?MGT{E{EA#^wGji9!04Be=vAH&Jp&P^%M--vdScy1w{RjT% zx9R<7gc=5S>LumJ9c1WJ78b&+0}L@)23s2qCpg~V6_prmZAWVZyTOp@iIEU#&7b*9 zL{s&9KiDI#Cca>;XS-%+Bap3BTEWU1Ni}z~Eu{AL+yn#Gv zEEs)c;947CovL`wz|XK_TkFql+fxwcA5K|je^DTOFTVKiRagE9N8Ver4XIlgQ_JJk z1+5R|#4Z|$O|d$M=mkLF2iLYI_+g`k);$hV5`_qlqNqSNLu$94^FsLUls&5IDo*Yj z_h;sjD1GMb-)M$;3WgW@H5URu`X4FoI?q%Pg%0%|MlE`1X8a!B%MIi4Qk))3ijKUmDOpW;qRSLj3f%Qm%h#9l9&X zFSQT46MB`rbbXj=Say6SGFUnLdRyUGp;4f_{w!R56KP!h_G}Z(8Z&kMEE#8nZ%nea znNM@&BL^#Hh;;Dd9Agm@)E+KD(G2^(A*zLrHjh~V2+j2zuub0BclukcBHFvusx?cx zHHard)oF0vxI{~j&{Y+S1J&LfTwp zxjXXnN!*=dITR-~SR{hBkZpzz|+Q0Ti% zMV12T_x)5yTTzvkS!|_nA<7rFRH(Z})dkr+UYwtrmsb|dkxV5GWhFZ`q9pT>;?T>R z@{cS=*%H?eCAl-E%Vf1{U-eOyL4PXz^}zbih@tIV{>fw!Z+(%fDK9u2H@6P-p7q<_ z^)mQf_)6924pL5quM|wsWqiU*%zFsSrT^B+;$LSg|C3?ZzwYDjeEzAs|M(#d50$8D zTJ#)ItX?^#lIhBSxeeRYD#6)swIIULtmGb9a4>rlh;8-+^VmqK#f=t(28~!$JAfVk z^%=2b{r8%U(?e$YtZp@oN5bEK6c-{C=r^J25~Ad=tN;h-&4os!NIka~mY6=`u}7JI zaXa~i5^K7l2IVULYyq7j$43s^LYulW#cZ_^lN(v$U2Re(uEc_nzyxCvhIep30s2jw z$A-%@*CbD!04O=>?fk|*Sq6njr$nVt{Gbh(@K(5WVZu2oCj5D$JX>MkO$eUOFr_;D zG_CjNL~6f(;lJsJC)kDx1m!|ytX_NMClhvLR_F#;a*WH(_~9FmeH6Xtz;wiAi21{8 zv>i*S^Kf#qY#aZsDXzp_)@8LS#`10+ z$a#k_$J@nk>9X9r(AytU^a-R|Pxr%ANC6zqwZSCHJZ_COQKW3Pd3^*+$hE4l1>I^r`i%z3 zpl3o}M_EzBOTRDwMWU5T5~A#EuWernT)GsA1;MR;B9~c{ASAZ#Z0)#uz}tP(lQ7knPha!3dF`O%nC6GIcMr}N zhQCVLQ=4MV@zwm#yOb91j$0-PM^vPfC7&JRc7*<4!2hA3YvnNu1@ zUe#!PeDdhId$bmYfk~s2XY1OB9=`yCJohczyGsN7{EF=Df|62XSHe=*{C7~5i~4eI z&$Fdp+}e<6^KaLYQOW2(!3`N*zs4>@jFYZ&2O4@TL5+sxkt87k;n_5fd0}!SQ^VNwupB=+i+Df8V)xUZy(B0P-rj#DMx$bnY9% zg;mF3dCWO~_b$3V9C+6#8Cdh?ka6pl5JhfUT0B~pmZ%d|Ymw+6)w!|?MBjL~ys{u) z;13uVM^)NdH>}zn))KM?QM4q6LQL-XQX&UK0bdWo4*b7%fHb)I@P+a72oE!mjEJ0BT=!7fDZuH zcALK)Y46srs(PD8RgmfcE^1(bZwVbvd>Rrs`#|m3YbDRk0uRV>fwI2BM@ug01NLC7 zeys+dzd5~srqcOfdN!#2g~+kt&}3xhRKR-hH}kcF!sXCWzm2!ABcCw^G@KdU{|C=} zlzE5V=E00~=H)G&3UhTq-lPv(>#ZZKb6I5ZD>5K14v;Aq>!M{|=cW?5K#RP>{zyV* zS22ZZRWII{dS5Ro>}Hi}`$StKKgw@CyT3rBl0Vf{Anx+~BxNt9VsF{J_JI_V`O)9b z^1JrydT30|Z9Gl+p&yLV6m%CAu3d3G+7s3H%_Wl8a`F8Z6KF#7rUEYgeo%Ik-U>9i zibLUfz*ec#SoXWE-YN2$Nn^e6xt&X0D<874eSGTS2;W0g@PN@GP zDgGxSsXtnN+CseePQ-hcqW%*^uw%%kM)+JTrMD%MV*pN zJ23sl$8|DCjXs}>bR#BAB}P1+8C{)Xv0jBL>Hb8?G-@-(gK%!oiQMTqA4|PCSk>xB zi>jMDnt2Kfc*w*x@g#b$Zdnh(j?(+YV&u35%E5XH3(BOwfi))THWS~Pp7|lxO;-?bOz>-f&e`3jw(bJ%u7|askq)WLyA_l7Jf1YH!s{ zhbcUMw0gN@ouzTu%WWixEo^?d?M;(QSk`Jld z3xSjT6>-OUat@rE862LscHxcH=APmbJFMOYw!ZPvWBR7cqfRd>I??&9H>HHON#Khdy+U>dL$Zi)vBTuYB0)rp`PAGLYRK1h z&=?`8bvmP`xA_s4UM3}?cU_)F#>DqdkzDfN(BiYl!R}#Xpq-LPb%5uYX3O4hl8LhEY! zyGg?L&6SM0e*KzC%ih5G$*zv``0Myj3o!cOnnuRjx7EP4>S~h_cyq-^6qvPC1tBCT z2oUY z5IS}g1>c&I%TO2;PDZvAm~&ZDo&48MLeU=OvW6rmm8Rxn;PdyM@w2r|UqP>Z#utx1 zKuv;;ECPuACCZg;)9W3-(GXL3;n3TS)lz^#`}~v=>&gX_VOg%PN~HyY-N8o|-a)=B zQvz0pKI!w;6TqhB$^DD@y%GS03T#_|!fRQeKrnrNt~`fXt%QJnJwAF^NH>n9qIrZ- zKp3MCEgX-=RKzC;>rj{L8r0W2Yh4*N*?)FQ)o7#qYQxxy6ZuzchK-z?xkD_HiduZVHZ#o^%&RC(aJ+N!OQW7=Q|S_>P03z5_Jc14N7Tj&+ai3&8wg;I z`wjWgSbbh`R6h{QLL>qIq5%=Wg(#~_r5!AWb}|xqI@pZB>IV+ z7-^i9AI`6U_(ohgqG~5vr(+FjN1f|ie%-&=!jU&ZVhMZQJMke}U?fg5H|U|!?!Y$C z;;!QJ9mni0#B6!GN)?T+n2g^$<_U)EbCS-PzzC7f2G?e#o)=2604xMNsK_w4WyQE^ zAxu?*XAb)m3qm9lE$sn0b8cOw6K9x*fD0oBUlXBMl}+qJtz|_7E^j*cw;$jp`R6g? z6u=>Y(Dx|N8fW&x%H7V`+12sjbApqjp4Z4DheCqTgAWzToCi0}S-wciuH61szR;IU z)p&2mfHz^@%{z3LCOB8%xMB;hJcz>cZuf}G<-+Lf%1@H%__4a9d}DF5AZyfG}PDAs@*ViA{sNkd~;sZlY zR!Nb;Uw8xLIHgD-AgoFIiaop$%*j&i54r%oYfnuFpyW=CH2*w?^dy6T#8G?p`_cp^m5D@BHKt9@W@6B$9ttI_w9%guqj;tpUPJCR>b z(p3V`&j{1)ed}|2g?3izR$RduRjUXbKHoQezh5F}!1d$smt6@?KAD|r@`je3UJxJNSxt)+)6m;{`;~C!BTvLDYN8n6A`}*SXa1Kjsp{_^ z9&?X$98s7TQSV}?W{9lFl=Y=Ai1TliKK49V3y^xZV5W&0>}EgJ_Wz&R73b%Ro<4jw zg+f4gu_tNhxqiYgp%!V-7E82$&Dkp!0FDnBBhArh979UwJj_L3i~xUWe}DNMINcVF*P+;R|zbn_scUC!exou`bmRDkvc%BfTr0l)UYLfjRkqb@LASlP zsaG-=(F=+C%J*GlE`$hszPkQv4EDqDQAMZ~^`ZvnGkW^d*Q(=|pa04jF| zva5EWjmc9^izHU!-t%o%z+h^0Yh}J+1%ZoBEGRd+w(;J1>F1jT^S^LkBUJ_LC)LeW zB4!}zTf7p%NU*}0OujT;h89}M`>sw7c*xDXAi($K7-N{Yt)9tGX3 zB}EP0`#v+C$T%w=@449A_hBYol+u_?6IpZ!!*EmK2kd|{{t@>2d9F81=Yuqx*E(@O zVTVBi&4(xLi%D`=H%S6F;ZrSxhRz5`VYm=pol+_syCkfz?+=g?Sj&E3lH2f?S#_njj6P|JxBrhbvgaBTXP?RM0>`H-FP8$T0Gj$`$YLySBGTWIWS=r_a zUT?)YrGNg!g7^KM^s5aQ(zt*mE>QWsr9g)B|NrP@{@8V1_!iR>VY(Ywc==mol3Jd1 z;G?VEO@{Csv{smL6;>iU`r*{oMgJeuOLiu>WQnqqAD&B|;i$Q4xr464KgPMwye2So zuQMiR0U0uDAe;l41QFl(z4UqKfL}_^mi8gTDjfr+e%-fKd64`#-=Av?wzkQ)q*>@mxVD;V;g~w zDJzoRdOC4odJBx5FI4XeoC99a*rMU_tyIcBSKOBID%Tv|acip%_@OC95J`tmQ&6jV z*K=!_fMcHwXc7P^bGEo-j2pqbiDoVKHl*Cyp-HKDFCg3TejrdY^cPjzc^90-vWy<{Tb z0~UUk!1}!6gWyW0l<*zv^D#FjcRUkqnTF8OU4jmK>(wF$)i8d?1nEZz*nNvMmF-vz zKnzkxqSJx^e~N(}-I;`hf5~$je|h`!2l^AQ)NuvrwWHypwnl)1!ohfS5>8p%UxIOe ztm$TYN^}{dDve|A9hEuPKEvBUQOP}~q-C7&!6wiw&phXtYUWG~P&i`))HmTsK6_)T z+6rx{vmISOOv7`xyp`Z2B|2v)mvSZ5J0}>M;X&rHILf&Y%GrP+Vn=RL_IHEwT;WJx zd7*R?04S0U89p){6ki%TXb)-|D8ZQv^@#2zI{IF&BVlFHn`4}_C4D6mXP%}L_2#e{zT0&P|S?XUtM z=MK^@e__6oQc-k9u=>G`1m6@7G4t)m@%AandPPjC5Cj{0)q@lfU;l^k>A4BfrkT~| zY#t;f!y`o|0+pzJ@%X221;_mRcS$ZXGhsz7LnrSFU$tbM%v3M*<~6-01~0yFPZ#=Z zyS9Oy>c|;PJ)+qt_q?=ipCX{QU|sB7yaTx<+zg=247=zW9Uxx@>32C_6qWg4`r(-v zR9#^Gq;>JF7fO?#jrC0)8b)1;oV85;aI>HTYSX|1TRlJ&J2Lq(K& zYLR|~TprxjQ~g@uqxu9Pbnc;_ik~=?Q)B@;Gwx`+ZQj{pEb@YOthpLu<{9xfLPYd$ zG%fl*MTR>sa4Z4M?~G4AZUm+FOiiNR9K`#izXpFAyNN;qD~47!j-F4HieUNHu$D~I znvDaEQORxJ&b_kw;oI$-cP8vJ@n35XG6ly2{N-xJ?2r}>+m}{B!dX-LLjDpWmF0~% zW#f#zKr)sEi1>=&Z_|{_3#FEF|8k`M!5s7K%SAYCM9uAu^5c$;4R6B`uKnR)dL!qq z4Ht_O0JwP}G@@p)MIm!|9=*YG<%j3gaoqP`rz9sSOws2PA75?%#b5D9CJMDOF~}z09ExjAn)=;5(^{DwQ>sH; zLiTZjaAwV=J}BC(QXeR~qFUI4Y5=z>HxWAQei*g7rdiDVol55vH}GaM{%b%L|LtSu z*Z+hv_3{ATcc+EI+!-0SPc_>DoWIlesB@wC@rP&L@e7>1KZO+hJ3C9L46{)EfpAx~ z|CK>*OL3|lfJYDW%1##`fF0BJ5puENL@zrw;{&-o%JVOmC0A;=e0Lh(i;d2SSI$#` z?Gh@a$EU#d1Q{=#kl%srKqdjW92M9uD{Ib4CAO!39=Lnv*Ujb`PPhBNBrsSvA0!CF zHlE0=w}07=dVP6++aVR`-@Y;iH80_~`uzJD$)EgpmX~Ik(QeqnodIAdDIx3a(bc-O z=652C)MUt!Oa%yHLu`gCO^h^fyq3*5(6u(phaGqz9;Ke;+jcHQ0s~g+FU0B?k^BZcVgBT9wCdVotY=}U zEtJ?Ai^c|Vr$4DRR#h2ANDj(6jNX?&FQ@94a=XNacWaX=EKq0uST%*v{p?4vfIz!2 z;+Vnlz?flV;d8qqpX%m@8xj)3LaU=|4C^e9bII;4=L*iK$I$a3#w6ZvC+dBtSY&lGY~+R57N-CRHR-60~>RjvdQSoXo?+It1nr2H5e*4(-F`h_Ls-ukCWv;uKmde=1**X zig^y6e_%Nm)Lmmy7S-l1OLg+`~WZ99Fu#d1-neI6UY5u zYopUX$e)B(f^hlfC};snT#M{Q)$fi{kNU66zYgJ?G^ghLe`ilrf&%C>_sGhtXJ3?JwZX47M4rPw`#rd5MMty?5Z6nF*-;n z<65>mVCz3CkMaExTItk`900QHU({{{&%f|X5}7{)-%y)gdC_2Rns$M#`0xcx0h`06 zeDOx54sQPZzhpA}Z@3=+qMh;I+0z7-FY*1b;jfR@pAd%7-qq}RxFyAnOtn=NlnmP` zfalRcbaMSO(D|9X2xvmf97-&tMTxU?;Cb0$MO+q6xo&$?G56>?<@TJH%D$h;CaiKc ze=-F!aI5?K(F19G}l$HG9?O>KdvtY`k?R z=epMx^Z+1cO09(QN_+%|2Ha;d1g zE$&=f0BH?R5uTvj)HYU%SR-b!U`6)t7@3f-D2DM}U&#>c<~je^9w#BF(vztE;Mgh! zoS6P4S!~G_8jlu&UBb%Wm&b%&MqCe}p{r!BKE8}fCxuG^cp5Nsvy+N9liZZYhGGQX zJOh0~z{Rxb!{vsw@}p*$BWNqrp*QD_Lzpc)f1PHq2Nad)CK(L)<3?O%j%)8&SWxwt z*0;nlmpGg?&q!;dKXvY7&<_tm zBMwN`1bR`-d z+P9+@;yo5^XhUV^lveUCR$Z`SYFS+89GA=`pjAR;P6*aYJAj6*3VSQNnWyslQOo8) zwSGfGgk576mICY}dOoG1g?0lnbb3Ra6CaJ!C&7t>#5&d z6nzvuJWHXuz0ygGLJ~#A+231t93g%r5mF7$OD5qCnm%YA?`qGz9Z`Hz&?5a=N-jM; zC{#bJO#j;I+sGnc3Wlwg;Hh33+(g@z1wkX6`O}tk7brINF1jfKMI-<&!uKYo7znd; zG@OPCebxK%w2$~t`D5R8xBrah_W$0V{?&1{o9{n5cjj7dViC?R%l{%uK^L!EF5Qvp zWD;T+nSzGqH~^+fu9S#SaGXJjMIqV3+!embEo-pB725dUXvB+MjCH23)Dc|7ueujz zXQ@l`7`A%M=dE`xMstPLHw{}<*{3k?r$}tE!iA(Kod=@oWR}TFXT7erW_V^=$>vUa zj^4jHK4IMav;)wL6!xcvC^RPZDjK#c?pvgQ;)z88_3!9h;XlrX0`FdJ2rhmSKw5ZcdbO;gX5ZKh z4@&oOw*`py!I_?in@6(!lIJ}jTFx1u<3LJgxMekSy-v;y0eAyASQOF=WyJ_jdqkHC zW3uo4@mzji^OU&hBDz(qofoqBOoBXZ8SGfkQ=f7Cc3<)BQOn_p!Y-(@Ud=T0?6G|u zE+?nWipeI?#b&}I>ssX$HWcjJ7`tX?n7rEO*CMDwB0GwGu^F3(Y_OE-RaCRn{P66c zE59*P{lsmApHi~9C9SM9+E#`zw7z50j0pc+nU5;jIo5NzRvD`N_)ag}f=Rps7^ZA( zDh+&X*jxaC%fKJaKghZ$m>2QWf~ou%quRl1E-gl=g#pyq@b;$TAZrw6@)Pxm+_ z`$yc1silXxvo|MTy2>Or4|Twrri@ATMOSG^n2({6{42koF56AaY4tMDUlFOInE8sB3u`%HC4z0v84Hd9Y0~TdMS@}gp+9Sf9}L^l(kqHY}9*W#SR5XERK;Nty_ zD3KZD?(&1-pI<7Rz&E2{tUW?JS+kSV0!H#4^+pNwBCt$DJXJGTvb9|7>@D?b@s6aWFQ86Y5XDE@JR?nli`@Byxiy?a&)0?ReE60V z`DNJI89(1l8PcPs>6#nV*7Q!PZ{wXR2+3T*TUgL>__4{VGu=850mzsPPK^rih_T3|!kbM>= zLys-?NY?ER#+G^eEcTr38%pGMOB!8?4uxR6_KWOUot!nt{BDn}Tc4HBiN6gFBLj4t z*9-4hjJ6F!_ASx&iXgqY>O1FVJV%qHYZ~Js3M>XwHyDHN&se+PZnLqT9xTj_&MEMO zIXQ0(1BEBXL?~#V^lamc7G3N#f|z;z>fmfe@(MyhlV!9R;V12(+gJD+yO%m@{GO4t z?XP)Z!u`GI0@`r}g#ZY641<3DJC8l}S7%5gvia2FfNdnH^U3|7T6y`kN!)s35-jZkK zTN+T|6mfE>Q7|Lmo*Z!N|Gde^&6!z?do;AsxRAZ9m74ui^E-~ZRc*iY`v@Tum5;!# zin~gysR3cH3xl?MANv}1R&&0!xE2dNyaL? z05Ucsgj-MY|M&Bvv+?DhbGOqNaHJ9{-cv38e^|Zu*UkT!j4pY0O$7-ZaC!K|P5ZFE ziw}Zrl%JoX3T`yXO)S3hnhsXiK^N>84m zzOl-LX6}UPh0mw=CH?r-Yt4;1v=vur#YzQvbUdc;=*L(_W`VEyh?iPhYo$>Yrx?8? zCLzeF;1nW;ya1sJjvy?o2B+26;->$4@&2t(^>uv8DA@6(2qn zZ*(wUNK5fxn9{ZYnga*2tX!^9UgamJIFkIYunK~zZ`@qb^P(1F`McPi-_0z41Jr&u zW%@nd@%Krmd|`G2yt#~vU*P~B;1gCRulM%9bua#_FZKH}`KtcV!!+=?>aCq&Q(a|Z8yq(0Iybr6qrI(VnTZ0` z+)zTI(|v`xAU;c7%2aU3|Dp_@j_|*!QAUlDk{O<%AYB8KbM+!0gwJ@fs$1g zO9ezkvVSQc5zy@LV#qOUTmJ#u{ZRBc75|8LI46bt zYK|5a!pEk-R&FkJ(TR;2G`))NH_GA_-w>Ba3;IoalC1Y`0J*!3)pt35K@@u&$t5oj zHZ}(E*OSoEt~7TioWmZ3w>TxoyGI)i}AhuS1Vgtm#)t24wgh@zxjGg z_M3H1o~~~WQe=V^Vqh|Z&XRiC!dfvn*PQJqW;ED5eG z5Y6?(9Jn!Zh!?(Vm2IbQyzbn+(anr@6&dcW#>9SB!i~NXcq`&aOiTZGuJ-;N_%oNr zNWu2uli}q_dvoL&#{GFGe>rq_JZd?WGW(^%LOwu8nO<9OldUp_wa9m)FycPO!&n(i zlGiu8seYxiPvS9zvn%Uu+SKM}r-ubBL^oUQ6gTqH?G1IFr0TiRTZSU7 z{PinGAFXoCY>fsK$8{vbcI~5y*!xrnH*s3QjqF zVwsmc^kJu*K6LuZ<;+t~pAdlM6x7F1FHJ2yWO&bgE+RYQ&9?uCgS8znN}%c;*ku?# z!x!9=2LJ(%68c&4&3sKc!iSzs{W>3Zb%beXV08rsP#2^YKwCuidYWpq7@Jf#3UhCR z_jzZ1O~L*wN}D%Pky-J#d?|hwTD~7bnR+}YDXl5_JMD>wb5o;LSsXK4w)SZAV+azh z1cy2Lys+#a3QkzD@5Q6Ks7wo`sYaQT{Nf|^0%_9yUB9CW5eFls>=IPDR&sXsBI<&D zW*-_`k@id8rNe*mT$!$q1lIx{JmBp??j;AA1=bPFR>xX0e;D~_-%y7roqT1Rorjc3 zAF=itkqE{l#x6Rf)FupUfBqLWw<3S=Z9y9~=c#p~20We&n$!Phk@mm#e1G@zpLN(j zYChs>QZ>P&hL83fU1;!)UJmcp=L+b<2{=2;;FhzQlmV%T&8QhOuaCS9%P;3YkMfW>7O6UA9ulmn{4 zj$hb@@w*7*2ZnkLbx*oH7M>L34+~s#Ahk+MUq`PsYEf!>*RudP-&k{N9=}2aJHkAOLH;r?b_><+ zP#vZK#JF2qF+fVkcXk^) z8@q2oRQ#1z)+WjI?DGA%X4T8~B0QMA<9g8C1&hw5iY&#a-C{O!>uo!aEa3RYpgrF! zAwhMo7Kbyv69jc>xvO>5>l zxwE;>sC{GqqB&k^n2sv%aRif4L$GkP2%~h{u!dMrA^No<-!E0R(!~v1%L%F^yK}-X z#4YTA_2GiUYwb@9lHWp9$a7H}*(oIR(kZUXlhJW3nxqb;lhPGV`N;9*?k~V6dvIvJ z6}R|t2zlI54EIBTl5fhmMPk^+FcVdZ8akwT4?PqW6k$l2vH2CKRB2WiYkmE8`-g0I z{R|aw!c6_s%0dg%>XdqYLj+Y}qVPhUc57Z(4QX~wZJO!fs-)9(gpLPrlZ8J41QabB zPW`+}a*eR8;3^2iIe-PAS}C+XFf!bH?3(}B#QW)MtDYx!@WX0(Ct06v6XnO$gGK`D zjZyNHThmy@o$fgH)p|7okX}&!;q%z$t4zPFw0ho`!cI<7A+L4|<8c{X)?{xTL`Za7 z9B)fnAQ{6x!+j{0;AkCrF|302j4>g?+|cmg9ZU}Lsf(zd-DHr1cmo&yHOG0kY?Z(Z z51D&Zre$`Jo!*?!rJm>zT@T8Xdba~^1GmXgRAbiZba2=kxZ-UYJFl%E2DQBveQh-B z7JG#r+UJ(GUqhpJpp$$nxo~*%nfFf31IC_)x(<2V(ECM5KBYItB2Cpn#DcIvF0D7* z&OZirt=K2q~dn5dB%zjUEy26MakhS*703no-5BcF;m#U z7JMANJkD%^=Oc;O3TkexD0O02wyN)yc~RC|>S+7wSom|K7n6|q@W%^Y;gj@S#hXiy zwD)*)AR-ADMK5nckp0BrHXxLd5MuU^dF@nf^8eWKPsHJ;!%n)&@@2<)?@t3IWUCDlRMr5$wj+83f)xS)lO8>5RTCKdr4tHI)mldonGBG$C*Y90HU#kJ#w z%6cJAJ(o;yYA>23AnsEkR^HYV_^H*AXs=+M`%JZ6V@+S2HU#&0-#OMnA^Ym|4VTV` zFDCb(9+t{2g%fOJt&=HA26`JyNFT5O0Sy_*x0h{V_%&)#RSPln6-)uYCjeX~U&ab_es%FYu`cKI%2tngDyX1&;|8mJvCnd{<+BdKZrB}P zw-W7VK^$G;aIg6b3-WKFT@FqxMsFz0J!7(o$@xWj<{6od2X=B5VBo+qW+5SqcbZO0 zrT60ef|$s$fwo#@E7A2{&lg?CbryVM*)O~`aq_RPjJQu4H@L|oK6jBiOAxqlS+O%6?}8cOWx*0L}-ybt9;C-kpn zBD5&@I1D$nwpEV71-Fvf4Bk}y zMx*Ne0AfK}OgJ|xWyf7aBl;O$K5_6QgYU9&x*d6@$Ji4Lc(8*}iHFZZJS&wNIc__n zY>L*mH&Oe&GM(d@>}!E9R5_Pnh-%g20uoV~X)Z`xn*pGs>+4p;oAVmM?PtREoaY|slr}g7=uhec8C9#YAU>FHyn6k64WSa<+ zQ?5tn>CG@{G4|!a<^t2QJvM&f#Rx1Sdh@JJzG)(%qjUSN6aAIx_f4();@>sDHV1z? z!4+h0t%<1J{%W|1oM9Lf$ubi^5MrpQ&tNWVXxtKcTD;RykVlleyauGpWDyn79*MwA z4s8I6P8wm0>Q9t5UgmGbHX)=+<~Q(zCej)$XP-XYxWdXC2WY8V0^0?x==&ARrsi0j zN#wI%QedVaNgF6XyzOYc{O3tQqFb@rQ`^@5jmM6HhpJSiOIILt@F+E*2SN!= zfdC-{q*ukG(g`(`1Ox>FBoLGms$ij41w!bkQ~^N&DT2VaIq$vqc-uQ}dG8(L|7~Ho zvo+ae?X11loX`9{uHfS6WCN6p06$1PlBEUwR-f5U+!j->)tL5zBPCKBLsPe@!=1WS zo#!F6qSg`f%I9nkqJo+$Yr#V{aFnAM7f+XJBu&XgEtlG)3qH>$2quH-rm)p)FB?#R zIgProv$HcGp!?r3@PC;F`@j5F{+ZzD&#jjJ3Pby&N6HP7kkyaih(8_E32{rGg;CT) zo*smLNWF;rl34Dmbdd3gb%je?M7ZQk<-!wDv->7E`Mmcj{L+>TK!EFa{K13Y%dLOY zb^czLf9`i&0^MPl?+5sS>JKH;hhe@SI14}4jvtCa|IIxGDLEIoO)|uc&!h*+=e+(O zBA$Av_edXM>Up8joOB5U!Gs|RWJ4!2v)m} zk}rP)`x3l#*+@#R$a_r@t=d#%LO_%0Z)3zDQSJRsfcR5e-TwDj^u53RaX$p2e~6;r zi}8Qn{57R~69cAR;KBPI(1D^)pw3!qui1t&rbgky-)h!nQL=4oaLv!+|eZSu^wGOY7;A%UfkSY!^H_=c&( zGSkSqQj3RIeFJ>p+aDYXNTYYh3aD|R)RXHI6dO#pC{|M~9Ioxgb%|ITUu zQ`hL9`p<7~!TAc|D7WQozI#*KjHW@{aF`9$$jI|CoQnZNU`5C8sEi^(!1OT>wp8*)os|MS<5 zkUIsEAr~rs&h(VXN^qS~5E9>yL1;B+`ne}bZs1ZdSNY;*v~*ND(TDLpFK_^4fX)Ajy^| zr;V1N*kmbTr{C(P=`IRUDmm$iRsKGXL*}m$-U$7)MK~fNF$Fpfr#gWlP;KWt8Ge4* zD;F)#C6A6W95)+NQ7T(1z9myDQ=sQ3Dbu721`1x?WCRJK0zC>ilPC1_pY=1l zS;xZTqD3LP-Bf2yO>O6+OF+M5ef=>h)5S&p(Cf}Z*sQ~YaOiahTm`cBq1TK~`bb7mnf>WQ zqqV0dw?jv5wfNbS;c&FLfJQ}HxR5SdGhZ&8Fb`BYL?GPC+~H5p z&^KV`Z&N$!>7kRF5873U{z=3-E(Y*3>aYMh6r z4OMRQ4*eWP)O5aRdDh&ByyN$P#9pAN-cdE|CNKPvF z*e60eCkBQGJ2f*tqfMSzb6>~9UV))TzwTg!?MvBx3s-*Vj{!~LnnBeATj66t zK8`I(YSS2o!bcD`p?*mG`=T4Z$f#Jd9h?C_0C{bS!# zzvyMMI+0^G#66F0T-dmG^20gz_yNu(TT~cfeOh-wpSiU6&Q-HMKV9cOFqF3TF8dqH zI(FR@?l&mWpWd;VZLL`ta1j|AeWceNQ zsAn@2M)P$l6Dgfs;?$9dJzM0j>bt1KIcpO-JsbA!l(G&BFYT?U_sTT!DGvsA% z>Za4H5`X4Zx-t=zPd0fZPwT50!Fk=lRNH7zy$`Xmx=Y}=;9csI=~BK((J_{MZ2F!f zE%W9Gt0l--V#s|xCOOSX=b3DXRng2JJ}st8WW95mKt*nPTq=5SJhhLWNYPcflE2*{AVv9)A;@ zzbp%Dzrh^d%YfM0-^dM3C8lA(0`Hwi&u%YEao9L&$}OG7NU5vboBGN$+rX(GL0ZVu z*6VHaIplr+tVxiY2YBCP`i;V0cV7Aw$hGD>)gB$Gwzr3IH2jioF}tL8y#hh_#qpB& zNnN~p#(S<(9nXBv(eXm|$ZD3(Df!`sDwz5ZZ{OD3xNsMHg??sMsz;rX0U@FwyY%)9 zZq@5sjE%WH^ljQZ#dKF4MyS5UKKM(R`uELsg^TNN4(Ou3r?p|j$^k!^X7{-;#CjNQ z|7pcegT^lt`s`>Yt7>{>iTrY^%bZYtN^j+8mMNMTsz|(S+KY#}yu`HNZjXm*+yfOF zOF#QAC2SD=Zu|zhd-Z#Sf!}Otkg`ETvw7Lr>FBJ98;K^51!q7^Uu)S6$XIe(Pk~Y~ zf|Ze)asSyT1=ZHf4w+a>g*vM=TX<>zj%jC#^68<>b9{p3nohXRq=u*tL?rWEiyWG8 z$_SDch3o^@Bw8{`L8a`x4KfJ^T)y)*=*=vz>5-Ne(ORgnn+1zpyKe%O!nC^;_=s1p zd#wR<=cx>9%-}|u@#e>;p8$eSb12*=ZSrdv%$lV+0ZA9LnK%H6kkjC9OOd^#$mFBy zlD4*{!lrK_zr%mN(W=q2_GOM$Vep%@T(s_JL8jbP$w*aB(Z|;rUF9*0nv0oo&P78| zMo4ke{Q^jCRwQeoe9fYPo7Lqk5%xl8r5dGw0scs>#r0~2<*c);k!`|_AZ7<@^SuF+ z3x4OY4;3SllW&-%M?Df^VoGku+P$#cc|MT0mVi~o*bi+qLKo}Ie1c1J2#X50r+XIm zUBYg7XFtoa~MX5UCB2?PhbA3X15JH#%;{}@-DrPNcZl{wF4WpH z^*2=C48!XQ2+;Pv3CksX_ZVkYQ6Dc(HLA~{6&WQZIfX75d2pda488}Hg32WkPMs>a z7==jN=`y;H2ugiOul>Y{IX%H)q9JJ#XU?iD5V% zdjGW!-rQ>3ed$tlCyIjTMtY^+T~Azk(vXG)UAGY|!C9;;sY1QEtc&!PGf@!hc!P}- z3WYVL9Gq3^*Ww2HbV?B0Z{g&7RNrRg7W2|_r7oD6c^dNs1qo!vKE$oc2yp11{AJZf z=GA%V!oo^Asz;kyy-85l$Y* zx12VvJ=}h+@?)+8l+*G&UXSuMZK~N57K_?nBS!@|A|p3d21!xpEOnzVo~<9AC17Ju zpR5yDRQufS)n>6|@?|{lz0Ii_CZ_Y`QIY+uW@V#qTiL$6`aloT64q_C6r`&5^jnyH z&)B|w(ZqU4E3LxF3vL4n48JRDbd<$fS{ruOl|kXSfwG%|wLEk3b%HYmpVD-{T0DVQ zShYkP=q?S=wiV4+xb4}>{Zis)Iw7uaC#|*fi^f1z4{`a_hrE-jiunnfBq5sseRSSf-k!;Z_V4d5E}k@ zX5(0j33@Im#9=5eOcziE_bPl?y!E1a)eVr-7PKz#e+A^UxTg=eG7jam_tBLezY#e2 zr}6+fZG|lF2~^%N?T*{vqiCD!dlVmslh;baRW@h)<+`pgRK1t zg{y|%mdImcuH%5M!+oe$i?(y9nzQrKBR`C^jW(`91zjhfpg=8VcbzEHiWP}Z3IzHs z{iob_mFEQ2coH53L{}eYCSJ%VYxfB+k=aLC1_;S&f7c*tK?z<-$8tDYHs`cS@U*eFNEp?l!{rTNp zjb70a`h`hrpjr!RR2^r0PjnkJ$T`H?c zrt{5Faa%jx?I|ynEbP3aIC_b*s{>q@3~0ycCAjYxds&BE_Oub*+09dme;uJ)T6vkq;Mj$Lz7653cb!R;EUPSxDaop=ezbfYm2gMoK^ z-iq;mP2$azdWBwRZItdvoJk*Q(RNu@U61*&6C3ao;B9|tg4}@XAl6<{+6;_>c=&I6-6w| z>dbw*(R{nVS#z}N!%pIWe$^}RjqXgnvs?>uqJ^fSKNLj&1sLJY`wKks8Mi2krOM4w zl`ws*tI15yT{zA)ZnMfzl~U3Vc+!B2Iz$Bts?5p!{|-C=NO!~DeKZyG-g`QSN4rpU zU${3E5a-FRaChb$3t`#k_DT@R4!sEK0}Z6vP%n^`7qW{R*0XB{bA+2|?%;kk&6;=> z$#L-mGU`*ehJI!8du-Jx^r2uhAoOPXu|WGjalQYw#{IL|{*RUCk6-$Ra1K~oqm&(L z?sg7ltP;BG8*|*(MsFF3rgeC~^L>jYX|z#2XPr za*sB7k0_hgK+c<0wz_^K*~*Ur>?Lr`QtYVB8K2l|v^-ftv^i#vf2n#*@m(bGud1vL z57201;Og^Nm3y+Ql%Wbgu|<5Y3N6V(SVaw;W$EUH=A&U7h=~MdaPz8M`qO*#fQL=y z-!f|dmu1R-Ppo~I#rZe)sFdsf`V`-Pcu^H)Y4vl-L&p4 zuv!n%poSo-iLH#ph80E5ok#=fG(76wQ1z6*yD+`_JEXFV&HK-!! zgZaeto$sJbzChEQbES^ilhP(0Us2g1Qqlq^y#T~7zQ0Xd_4KV+dU zW;aBus6aPEmaXt}Rt&t4uVLQ$TzHKr{^>=Kcb`bG!4^Y}t6Uw`N8UV=Lr~O{sJkJb zdg1O<>OY#M-DxiFw`SVOGge=bx!4~0gBQqe9n0VL0s*SC|DG4fUtV9i3yjaE;i)LJ zm43ikE0`>=eocU{?4q595pkyc1HUx`XFowFuv###rphUl4*km??u!2<)p`W5PXBTF zha=}Kdy2$I_|c(74=s8v7?#x1O2|#_#|7gXZ{UJjXY$)I&YCAr(};$_>gZDc zRVx~4iaD4^qen*hdzg;vRs(#axH+v{MQ}MNI%!NAIhUb#PE1)hYmwVtt!i5*X1A`f zw}Eh#k*Y|Z13yf?zu>k4%;nt$Qh1=F8iqc2!)XgqaL|cIGvWIU?cl^eg+%{&K4;Af z-MoDVpL1o?{n=itm30n3c%dGic*kT}Y5y%7wTrIga&|XK7%&w~y)YB9;D+Ec@$S z;%6(rW%)}iF6N7Hlw;IP9_4^)yr>`edV${WGmEUcig5+_a@VgPr8gW;w#bmi9X`vn zEtKm?*=rcxa&2M}@?l3;cOpw3ait|CF-Ra1(S>CT_9yoQPOt z90=#QGLxdT2U3>2pp>v?zU1ldl-^)NX}d%J-mVjOJK@(SHtM#9)R~3iz-jb!ItMIu z4>$M=IbV?&G2<&;!!jJJSM5F6)XD;nNe5#D}cM zctT(xa5QYW}-)GYtARkH3jP#u%gvV4Y+;tbVHAO?m;2V?>f2#Y?mdWJWm57(Ft zy#iu;$mJt#F>mwt%VjRwSra?jWLO@Tv`NVw?!F6MGImy^sCa(^KB-MJ_0=l zVESOi4DTu&v7vy=nCZKCrODhC+h-w0-f`Yf>SYVoFyo#6I5X;qFs1bj;y%?)Z*G43 zPPuDGqXVs8uZEApoT7Fk;T;H>PA#PAjIkd~oR1ovPZWhn=Wju7b+DvG2gy1Gmiv3X+kp??41O%~98dYy!o-1HGm+7XOJ{ z3V%ipl2)#7o+$;?mPg3mA9?NEp=40LILIhxk*MdP@i9SZXbg2f+0BYV$;Xig(5K)7 z#hrd=zw_n9)lVvy-W0wZHAl9kA3s$J@7F^Y+N6sqGYs-+Hd;FabZ@jCgn3E(y)m83 zml7JIkJ+apvhD*Jfi~t=k~cKkuRj?})K|y;mTIOK5&|a3)*kYNswsBzAG?ts{yuH7 zeB^*`rFhl;fNni3?tl((!Qial1I-#5gT8+@C{~WzS~*`n*!)%UltD0TX*UrJ{q=A`A9DfyTeu9bsL$=nV44i^M}mJYIR?p?#m_ z_y|hC)a*p*Y2{K`{HxB=^3HaQu7@_rIffV$Bq~_5_(VGc;@+X{oNZIp6`jO8Q&MxA zUluU+%cW!+V8qP>X*shTp*|Irq&pxFT6t0LEBuTCYkBI`WI1xHjT|R~4n@^WSC(Hs zeo6I_BdNGH0YJhlB*1APl)ab#vZt_~A>j;QYPinpCkEx7c!kc7N_KMAc^L;#Ai}~SQ{z;=W+%2M12NH|x%6Nsx7*DF71_HC^SvJ0Ko;`1zH`m~+ zL;7^J$e z_p_%5J%q+To<-oabBrz36!CyL5G}yKIF7dSzOSuzq>2Fv} zdeRJ#ND+Qjvl_tG-P=%qSpT-+tOqun6I`i09b$Y$tnHfH9gSTMOc+nFSniLRx#NE% zF8#yK+Cb*rQ2}O(nvv4*nk}zckrGT7P{k63Q{Qt@U&mf6}{u0o|cW(TdT#T(|_aMz(T?kX|H< z&^2_{%g-b)fy6I2<>g5x_do8}CV8c^8h^mmxJa=qjXMFur*flX>Bo{*W%o`~CC_7Z}hAEH_^pcaTw|;Weq{<9_8!Q8%*UYPyE+L!sAme!w>W$Y4E$W&MC{ zzW6)n`N<(->jy&g51{8mFjwR6gy`!(fSwO4PXCo%aW56^sAVXH5k7&4xR%a=G?HFA zlzw7a|&dvz(XK8IU4e$eNYRh{>;>I~3UyI9WMb=-ridGjUP{ zv1sA)vl4IBVgEkcf(OS#=2h(0y?Crk)H~MmpJ9bgdD&E6eq?czjxnsIvUg2AujMtO ztVzF&gVaF^d=et))4fB#K9vo@-~VRhCBY{;!-v=6)6Q2E*)DVX#$NQXthC|^DH`ni zZPWqnDEUiknP#dG)?eVNkV)bvazw6EzRWt{4&KS{lpQntiSEejy4d`!r23N|C$EAd zhC!%v9GOF=LxUwb4yMC?O&&g0Hxz`1gxUqgy*y0cFkNJOIyA6@u_Fh6TE|lz3H-<6 z@-CK>9tLcz6`PHfmM@()?S9^GhgNx$z~UKQct05;ASL(gNN?SfqFVMm7@K;I5jF0d zF*tp?_5K{ME?JZWW;XO)xNR5XekGp>v9UVY4VJ(uPz#_XhM))f>%V@|<9j~H7|?m_ zd3cFk1$V-XlzkSXRdbMe?9-9Xk&eVEh^K7)Ce&u~EaOW$?iXi_Tr6Bew^y&?n9%b} zM{K*18T1-!aETE{Z1t&>TI6N4d?RvIO3zhYg<0FKDz8wvS^6trK_H)V@d}yL1rus| z^`)5CS2z{y{;Fn4vK>DiZThtBx~M2vaByk5rs}IP-Tdx1D9BMPCB5&KJO`VkFh>Z) zHwcEJPTJx?w{0~AK}z}JSmgbD#U)INeXq4(W<+{)QE8q9VkdUKdAQf@g!4E?xLZ7N zxr*2K?O1uz%(VVxCKv}Xd$RYk{(}&2D7I?7*h7aApya}mXhGl5#eD_VsN?e2icIyM zw3U65c93)^&E*Nn8k(a?ysxXy(?xx2TJ6X3RVO&2^twKh#fgt@;oNv#Q1qHg>}i1Q zvxg%DvAMX^pCT1ykT8blFFfPlS+13lMRpVyzr5T3KBBGT(pwAwAP?xY)K)GZ(B0|` zvR~LN-g!W}cT&jq7LL_crKym!JPyekT!^*l&AARWb)R~jB)nH}(V2g`T_Jg~KwBCS zsg7R1T_Yqs<<67+ae8QAmc6^TTXOtG-P(gq9N7mnAT0UwREtoqxYsl>EjgpzJ(|V^ z$Bxo8^Ci#Nn$dafi`-pt8E(wfemrgUP=B$@XrzU;r%DKE&&W*}Vs&BvUd#0MHQcpF z&m@^j5ULPPUZg&hD(2$Xj#)gB+urV0e)_gdSAkTqu;cLerHAfXP8SSi79C_3NBqPi zP~Vyf^cp>%;M8>JUcT~9WwMo(p(~9W37ui%{cm7l@UoB!fw+Ww{ zMjtO^OkncETZ#TWuPr+|6?j-q%|rm3hyq>@*i<2~2~$!M@E!Sg7GSt9+CsjX zIbs#hbG|r7068(;;U&qxdNSSRV5)(oBE6EwsbHlrwD9 z(tdc7OOzA!8w_QcrohpGO&QJT$f8=5OY3}pa z@B6>s0#rem0)o|QC86=sL%}MIC4Y^2C|LDSY$y@{1gpZK%-SwZRBgwYl^58MipqvN zP2Sp+b9W@~$_CjB8zo8TrG1ZvNy%UeFM6%$TfB*8N^;-8aTF%_oqNgK|0qWKipMA+ zZ~LL-stk^-*BZb)u5m?B(ym&bI1esrjeJ{uzC}B#)3;yK>FAb-u3rlCP$=km#i?gW z=mh2Uq>-!*-wb4suKF4Ij?K3yuy{;BK1L0ZZYsHsVDaQ@*6|W)4#lA>Kkdq>vd6ne!I-Q}YqbVZB=mNH zQ-1~-*)JoXlQO8PovaSKxq^r1d7d*J$o_(pOYG<*g$TeTq+BZIAS= zNk^x&P8tB87Y@dN*T3T1ZlNUYUgLUP#pg93*Q|)A?v0-WPYP;6Ogps)thk(=Qw0`@ zgCm3H&xn+x=aV9>^n;jkM>K=X&AcbzQHi6%gi0|YrxEP*4h8F&2^Znm!JYi~D@ie96dYA9@HEgx> z>*7c@!!_d>V)95dcb1PErmFT$b%RqX@$xwGMt8JGF*8|n|IrXy;K_bd$D~D9UBZ%& zvMZ6iu(?y?vGz_OjOD`sdNj1Boxwcq{R`o3Ap}dx^J29|_hK$}3z4VUyTx~%O3i0k zY!(=wf0h)XaBUXehyKZ@6^M-Ja~)=LZUa)09)uS`Bdy;Sv6+?v8H2NGLm-ZCKd`&C*;il}v;BR*@y!{YHH!&82_){Kf}QSU9f2H*iaf5r znPl|!yj$=}&e(eK*%aEkTIdTQL&t*I+aH<&(q=zT)F((js`oDr{7=@r{h`7BoSBj8 ze{cU`91vS`K`7Gkk+I-8XlsC zoMTYo45twq)a`b)KmFt0H&+1SIG_lMfQMNf4G3488t=eUTM{3hxF zRT%R@2VOfjp7lukwO5bfQYM-!-Q3OMSbl6wT=#ZxcemSTUueRmRth9pv-p@M)i5B{ zd>~4wtcUE-VDmtZLuAg8PwRR5GCqN(4ZgHi9@nN=37GYnGT2>XX=i;VHJiIB{yE6B z_%6ydZmdT+JHaz$sAbyCXmddZHHVQ>5xLvNsjw-Nxy`OqobmB1kma!bYLj`XWw!fa z52D;P2k}%)1L;97u<=4m(&V{usys1OJW|04xE2Py9A^k%$6|Aovss)caSwgm$*rig z3u*==%kwM4CHk>RMg8|>W%vQP3De!joPYhKD}1-pW#xBN(xUezamE28cI}btHzBG~ z63-iIwo~+}s5Pboy2>K3q;@_t=U?TY{%^jXfBq?_&6D?I3vTpVO;){sog~hl_>O#T z;L19>Kqi)!ufib1uOoY#>Un9@H;qF6DhuQIK1BZ@YY@b4T7IcJYE`e4az8)U);FI3 z*83z1HerqyhZ~4N09MYlhY-4^Qk-oq2}!uvHyY0S8X?YG;PbJMc}9VA52O#wAO_ZHHD3f-N{E>Y-JGV7_8_em7v%(B7fx z3{>lB06H_~r)e*+=jN2H&i6J3^n82QH4*=M`hbqIsF3$`>{b7)hJvE=!|uPF-nFvY-=Qy~j{qEk%27SJ!UVNaGv)Qn8<< z5dQUSNbiDLo8`<}cbUmqZ%0sr)0iLuJxL)ODlhfc7XSJ6|Bt<5(evnq-$9_{dnF~} z96Cd~Qf|rqT$%pMMl8vsXgsZkvE17X0`11Gmh^ilB0n_P+_g`XO87?5&RaaLb>_vY zAFs{QPN_QKfKClRww^H_e|q0jh@7RMP}T$m1TjK(u{%D}!}Ueadic+iugF@DosHl^ z?a!O=hJ2Qb)UCB`xL zU2$JtIf|f)|D|J`$*=vzkNICvA&(hOxJvKtfxWA+&t!g*J_r81Dlukp%6{dnUE^?b z%%zhhGB$P-(>$TwJm=B_hK!_W{gCM6g#zwdr*yA0s8Q|?nRE@Kp9!%;LI}`1*}UV5 zwN0Iu3u6xCUe}EoFLAAYp}fASy|^Htv$sKrFcHC#!(e5X6)y;-eA^o>vOHPr)KrUQ z-8Oeqxf{hiaf9Wt^b<#mOeU+l9#@f16!2^W+*~wUfqdfWkkmwmVoocfglULs$f?4| zJq~Ey*~DPiPj8p*F(%Ai?Bb1GxTd5!su}(A(J$M5L$S}ty}-=M z#(MZ6M~(vTId=T?@#Cji8O|`U{?p6BOFE`gM_(STKYE0p?kA=rN12WsG}G|{he~(! zx8Fa0=}#U%aq9H3BS-0f0{-3kXSyRtfrCGB{Pf|0pFGAwcjPDF98R2MVrDtT%Fbso z$aek$f11EmMVLP}y^?xb=K6r3h^#`Dkgy!+hL(wshPGEYMP3tn%hB7{)Z8h6L)XmG z!R6Qc4WZ>hjHKjD@;RLuV9?Qba0+X=-Z0jxLFOGpw1uFtJ(8 zOR$bG!47<>La~FcOTNy@?2--Ezlu{g3H@SG{fP0p0h$o8Rsn(6Kjv3IxTZbznxw+k0v0vBhI#-;#pD z$mq_k+uF_A)d5PqwkZuZ#p^|!Cky<-WVXoW5@7}(dDfDs2pQ#dFWZK}7&xbr!+j~C ziRIMPfe^BrgzEx#l8O>}pKsxS?xo+PH|!TcG`e&rZ^zyhs8bi8J)o;oJ8J8+#I+Sx zurWGm!T8<&W53t!FS}Vb=-|aV2lbV_4+>`?$?6MhdI${MU6pz9e70tl3 zw6rvqgn&X)4)&jR{eVRnh1X26Hs5#;|C#6o7Eyr6H#9SGD z`Cq+3Ps7e_^kr)K+J_x!6?Y@v%Fmgrw?mSwIjJRgI+IKcj8whyGxJkO-Ep4g1$dj% z@>vBvwd{d}=|MY8rw{#zgnVrAw0n}Z3tSnW4r_?l0xKE!cW*WmE0g6F$IB=yNtxy% zvG6bM<~^7Z(csjyH(Csh5t$haN>?bo2cuUJr`!9|wCD|S^d+-6ehgj#&O<&!kEk|QK!f#2A7bNWTn#T)O4 z+elAyk*=P!0lPRy0wJWvx}~Xg&^;<@#4*&nB1Y-L>}Ut$Aj`&$t=FmJ5 zQZ3c!s2JzqN<2IeoobRd5Z#MtHP0<$>JTzZMdp0-gj3?TuGLz2k||S3GU{{6Y1!}C zUL|--E%jJE1sTA!w73N`Uh(B?v=q+ALaJ2b~f;WtXj{SP)*b7a+saVT*$)oe-7E@Lc(l8#Ob*{ROGmDpV z1d)Q$Q_(A^>7*FaQ0}MaQU`Ru0>QYS!k!LO2Cnp#l;3})M_bEqP5W>&A%lkYFEArk zzX%}7PLLu_qD5++tEjP&W^9XDI?+MEoUKD5)z-f&FgN0ZhG~~?=tm(3FxR$S)ZEGt z|EC!(gWW#XF6PqccUp&We&_FTm;MWr)Zd#Q^6br;h3>L31^PYpI3len@y)q6ZT7OI ztk9mitwJ`n^6;$7&qX_?G&N;zKRn@pF2BC^!i>*g^58E(1xg3lz16SY62w?R-??_@@}PuwsW`(fiOllO>%OoA zHuW4KRU}@QdnCK8o$Qn;fUifF4LGG(DGM*0*QKvAcc}r@?cR3e;1)$gi zZ93S9b-SeH`l0my=gE3KA)waS$zP$P zQ`e)6M!a$(*N!hCmuaJy?M-1;7UB*Or!oe8WB@IJX%2|D}6{RNmG)CIVF{KOj57HjqpQ=?XO>}KN1&w#Lsq9 zoO~+{yiK)kLjs+Bh=Vq>zRWtRrrM-gZyi}Kei`ld)|Gr9X>k=rP(!G@L_ycRM;SFi za&bu|dOeg1F9RKZHFz6@rXDb$^w~u!fL|gm!Y!hml@7ISj?%~)C6EX)xe?{bi2Rz- zVmu8tM#9r--x|_t+vBwx;&nj1PH~~$+VgD!yvz4~JEdcH=l!2725H0G7bz()*K$Hg)?`iH1sXY2_=0AbHv!_>wYi%d`_?jR zd9Sn1id}TcgQ-^DLd!(XcU3mJ)UAAcDn!**)dxKBmYr{I%uSibm2c z^PS8V9{Bg3>AdiS5<=>C8Ql`gx%={86v*vc{E}uzo_>Ib$1K7~*4cb1R%^xXrjl~0 zX^`z=KBppDt)oTjJiij>rZnU3ry2XHh?hvK(kLX2VCzsjyUi$_YLgo-npe^=LM#?` z(w$cl&}nZI195LXW!&|cwV%olgMPin-CAKFQZ*uF6&^Df+)-FHI3}q?o{Ps+k}GT$ zt&EN_!K#!4aguWMv>P-K8FPWE?eSLGEH%V%VRmSyOnj&$W-El8_sYTg&9T@CZl4~b zmg5(%252{ubRF%^lNz|V#)ryF6V1L8h78NT=Qg|>we`l!PkP86&^2XRS@mSwv5t_Z zLu%kOiaZJ)4f_c;Y?A|1w^u3ssx4~r*`Ge*a(WIuP)uX%R+GQP^`)#g0_PApnRc4T znt4_EuV&Hzh35YWR+2L*^>D9(2vEuFAVe{m(dY9w?v79o=pvu~cOM$RpRF6dn8@C6 zaUd=M)L=R;wrnmYDo(mZ=~pgz^2x!Ys8!*BZfaiKvU%c-&xIi+)lHzd9#xfqu(HFC zFI;^-r5uX7gkQ28DZ1R(uek(!jp5=Hg6G!bEI2=rqF)b{?&k9EnEF?~eYXs&0{T_8 z)-mfd3y0mR`?EJJqvTLe$0U;;AD9WesHlh(6Q-ypv2)GB7crETbG!(xv0ORem#K!h zp=4hAPI%?MAqW$-C2-eJ=jwA&32%zRhod9=n6Sza17)b2@&`+D?3KrL8=|OW6ro(b zG!6rg*J(UWnB8AC2s!A~#mF5fz9ipj@>` zujWRFD1DxUeel5vq6yvsPu{)%{Yw3(*BHV8Avh1{rHoDEJe%g`*zxj$B^a9kd?AOG zN!fxDH4kFzq>1s1<$6{v<|sX5E={|pg>l;D2>KrPQbmWn&kM+1+fpa>e_RKqD5ZT% zVUhT-)!Bd)#@|=ji~%`h@VgIlIp2e9XPSOrZ7~A~PQ2CIL4^l&ycR)MeptT>ql47{ zup{pSI{ol7t1L!W>5#`!|+A`ujh=`~>T7`&d?z<0ySCDT9>!W0!{V4;s-Qptz#1aFVweA_|!t-E&y6&`bk?Se}c^wh?Qsd=+X{_g!lcz+@Q}9!~jL0>t<|CyOE>S!2bW>-E9J#V`5R!ybaTFS(Vf)Z}5V0uc5$yQRv zpaqkI;m)m_%GdnGAn8}R2R%L~)EYCAK>D#}WpSn|&9}$MZ%8vZ7n`q==PgqAP^9K$ zYRIx%S(b#ibmQFT#*Vrz?uPycmK5HWVvu613bAt74fgi5MpQ|%{o zN>oGDcD>Mb%Qd`F5ALZIZCpE`D^puauY5-{8oF~MeQC0IFF`zIFQIlfXXk(}sp5Gt6$9Kj<1!nM}MRRQW<@ zk+jy^Ygabm7s;@c&}PL-VJo7k$1F%nlun+$sRJ2;iWS?HOEVY##AiKJic1~!A$s;( zm)4E>j?PDqN@k~Zxjn;`4k|1?OsoP2isouX;6W~uD~9{uwk;c{KJnhi7pRadTLJp( zFq$+E6fhVOcidu&J9~?1xmL)%EzpI1VUWeRPt_P=BqaK&hFy}^S6tsW84xj#Tw^Uo zF^7zH-BEpO3Io$qtW-@pqc-I&ogxg+2T<(Dc3;ipN)s*`_NHIkFFK(6;C*E9mxsQ| zgQ1x`onOcFzqsv)OSu$*QlIrtddS7X7#i{MI5#mN-2gY;y;Ka!X2vMU;)R0}_G@YP z&Sfp)g@Pjc%b@doZDprq#w6G9Lmwv_JBpPb+$xF?3b{ape!Md$<}q@+z^F##_DE>5ibB2!G#b z?0&J8jJW!(BJ&WQ-k8V>5y=qULhsf77J(cQZYh-D#3D778#D4TrpOg<(eGkIk!Agu zYH&T%#B_!;3g;V8w;PVnwsc-J3N~#o(;nWm%osFt_rUPZXaN+8fOdcVAHmLiiIy1v z9ERLc-Q`H$4{rW%%$8nDRR@HQqnu@SHvLiIk?bCwESbelwPbw*P0!8OzF7iZ;-~Ag5-?-HuTgeWG54)6B z1~*ol`hDd5>YM13vEdtv*7D>E8EdHvcv9ssaY3S{8myXW;ZSSVqc#=I7ty&d^;8SG z+1yDg@YwL=?k41;svM--w~A}3++Wb|q3(u&Sn%_~5rB zo*4*#9J<~zH z>4RMH<7PO_|Lr$XSu50XorP&qV+=mTK^{IV6}56UR+`4db6g_ zOu_?$xbHe9=<&f@AhX^kwmetNbMl@yFKky?%7QG=DOWmH5`ePHq;;mU>w9g&k$jcy zlnx6KZj8B}anJT>tN19;K}s{{@|*kR<$>l^2V;c^@9Qwu1woI5$X+{(J0Ujbh0Vv< z?}qX5=Zs?(gjc{OY$2OwwkfE-h)$V0Zb(daaC4fK7|Ah@P*CW}O<`&9M_tG)4D%+D zNCNO7rA~|+>7+#Ar>#YJNMIX!=TQKn@7oMK)}_6e{DlhZv&}qXxgg@P98ci>>a+O) zqc)?ZHRkuuXA;BVH~Nj&`hnY^M~>TZ+tTEbJI@D(7f?iLHT%1#o$@j#9Q*90I@^TX z_v-r?@6);A5f6+CGg8%Zp9(xj{D17dcU+U{wlB_%ZR`Vxh2}_A>VR|vRGM@HDRh*k zBm{&2p)=}$5J(U-LAp{yLV}b85}J+Pq}PCS2u-Ae;C-2WKYQH!{?0jfpR@P9=YBrF z_aC0;!^(P+x2*SBYkk*u(Hcaab+MN4#}#$H)K8-D+>F9P9zSZQMAYo;Ko$<%>Bt%5=Ii$*}SM?2e{GdTatH;!gBvuAIwsruNJk4gAEm8qw9dfng4 zFpAo61DOW!IT5F{7=2a1Rip8=qEe=4oSYCyebh=ix%3-HPr74}>eH~ikgEflnS1(s zBhR|k>dtMO?TX7j+0X!(mVe_0_?PuhL@RaL>P3rpH4d;qHDs}ZQn&!K-9-PYSe%Pz z2(Q=8{E1s}s_9qDI0rM5>~-6RV}IyKHEE#fRbTE6j^A;1p)P~&ms*(jGwS+kg#;-LBp8TsE2$Z9 zQGFjNCXuoEQ6%bC7Me*Ou9VH(J*)u^(hN%*e!gZhaB;&-yrb$lkm4RJf7S^68Sq-z zYv=~>nD%Sby7obXC1!ZM`H-YLJyhTFQ7@ke5v}C^$@75yx}u*C1;T0=ie4%3j*v86 zm3?i!Ku(ICt*RXS#-S7TOf6TI=*tVcv0K2q;=fr|?OUOaTne59zwJXEJMm~Kgm(Se zTd!iU(lKV>3xcxyy6`wYdPP&27L?WvW);Bar!*+7|9v-d*Ezfk=F7H^&L-?m1KdQA zcz!c^=4dKk@fM{YYkv;Gm^(SZit&T@^Mo``>r12Jo}XPe5O%@^xEgFaqq!|>8UCA zdQSSed;(dZA#W+=T(Xq8Tp=@_kS)A%Wy>9*3h&+ksqe(yR%m@_wTOZdc{_7e!=XkR zVtk5eM($SGAsX*i4oJ*q$ITN-k0&Nap4XKkyNPSM5QpTj2H6#7jcX5@4M~ZMw7y?~ z)S8J%T*e1>KjKn`z9K|DonIzV*({NEEPa7bGkVqbg94vSLy?p#eOEEm$jpeR-}9V- zWDnKyEX2iVA_1d|H@~MCvL_Iy1eak~o95lcmoT3_hMN#D*4sNmZTFex7R5NL1z*HP zxn@%l*2ktZ-0sN?%LeN%R7%&626zi+mZ+K`TPCeotEr@uuXCGEr`^vmLro$&+r-(s zxv1)%9DBwxj;?vIp9eHk{xsS3HQY6OP7`wnkv^P{S5SreMhq2nVd9k5P99RYmQ;E( zU08(Jz;k{>uEo8csz+^%?qk-qqb~GFMI>Je*^qem<TifB;|HIWJv;U@MH-?O{1$(brC`x@F|gWzI1f^^0F%UAB@J&;*^h*+tsQ z16k36QGJp7J)T8p;WEE7{gT`WcYE``oT&6B-i=s!>YU&v>Cuf0pB4G3xO~H0IhPv% zYJ$*q2`IVT-Lr*XkKd*wW--J-c!!xn@w-%FgJdSznxvR-O?7UaRBTJY`m2(Q=hJ0+GE^j5yCkD&c0u$$=vetsp zFI&^b6J2;()zhr(?v{d!iUz}NWjoF8yiCQx1&Ow4dGCo6$*Y)-K`p+p@sX)*u5Kncj25J8}YB$TKrcCiz zNv*zc@5>_e6&r2`g-;!ZbiWtw2SJWBG*w@T^%x|B*cei^vPbDly&p_60Z#Xi4&H<6 zpGg>I^eHO@qlmDjLz8b1)wTlh-|9kaVd}(>1X+)aC8vwFtp~VK-k<5Z7E&6_JZ8L} z#^Tw|Fsif3%Ol`&^K~s+@|>wt3|ROesr1Pd0#{;;D@Xji< zzBJN0Xz;VF%uiMyBFk&8KJ%-@S(gF8_&-Acd4Cff`0ZaF58x2BlM0RIZCICI*}8zq zlbCf{wd^q~Oh~V9{{H}`A0!KJTg*=PH7Bg}2>t(ImVf)|{Ci=R8xre9H}) z#i>|?z|YIi%=Rw7+Plwl+psd$tyYcQ|B<& zIX(_TA!wc}1Y9^&BB=DZWtZu(;?VZRIF;SnU56XQ5PRyD^`;K%5tPtaaYRsUI(jNuzI9saR*%F<| zj2BcwYvJqm+OPk|zu})Q@q+PL#=3Id%^=1y5t{&j&Xv82Ek81ZTH)n!c{2Gw7GfFIlM11ctHM-h`L?3q?QdGUawm}#riZOt( zQ0Q#S;q=Rav+P`vHmxl7S%(K0<)F{wWsr9{ZTh#W)&1u#1xZR|-#ZgW?zwd*uHqCs zu9BD+_1Z1X?B!m(-_b+W(zSDBX9mo2@dO6*c{aUN-jdwc<>FkyS%^g<%-!rKgS&Uc z-dMlQzH42Ho9eZ4caP6#B3Qhm@mSU@@?+$LdJ$J0G3{QZa3kFfX z|MWBe?<@R=ugi}F6PbY#Z5v-o;T?J-_C~#%Scs?v(i0&~?;n_S>bJ39ijQiqew=tP zcp!&1v));GI-y%}<#wozh3DSWm(QvTdyZ(vxAqi-$&gGsf}WtVqGlyCvr{nu4#+n7 zIoTu!02gG?Z7%2SgA1%ojPwn-_rV2S2w^AQ$Ul=9*Tt&x3X&dw8AuLW4L_K=i+ioQ zO7NovZTXseJR4F^6)`ig6OfvRl8FNoL)q3y1*PKzv|Rx zTJfFl(m_~v>F8wubcsS2Ejc(2IJ7)Cfd(N#Heb|DG&<6b#*^@0GU#x%2wIDa?llTH zn7dGL@n{Ch*^#>7EgO&>c;NPG({SCQePLnQ&hC-0)Jqi>dg=2Wy$f$G-qk9`U<&g@ zVuRA9y~VvC9B!7-0w)Ho#|H3!izc6crszWDg2LToZrAoI#^Qz0J|9JJlWQ-|8lo9I z7bMq*SSDeLZ{%3IG+od71%(Yme=$Q6tP#^sWb^ha;?I1cfj*ml2r3hcYKg;?)9Ndy z@G~d1J7t3|G6HLB$Cp+G_Ix6iO?bnKjT}l3nH@jhBQH^#6|b=vOsh|Q1G({^yFq_~ z8D8@!mtoB8=JW;<>tt3YX+}5vbH-3aQgW>Q#S@JmQ07p&USVr^(_2YUdnHe-w`@aj zYk9!)`!Q>0G$Si*Xg`i3m;*ibjvWx~I~BBg3j?w>{b z2K}ouGe=$m%Yak+z@SHY6rcWaEbkLOh1(lFcAXSoV4qsD zB_LH4_-ghq)VUpnTjg*lK@?tAq}Op&*~uQo&2x+gNMoi(*IO}< zDfF=O`fsBwE=rPO!g#5ML^bR44nL21)mBWmEu0EIXX)&;0d~+G%Zs=|0pZkIDopv| zc@i;K%)%$C*;^)-B`&d6a0|Y|&o%PGtY?-~tPpjX-S2>mkQ6~22#9P96-gAwaw(H} zlvwPSfiF*MtSw$kfNHr3%03!i9nO`1m#-utS#wg@`}flKhB#_evBTzh3W{|gRphAg zBuqnS+;lp*SHCr01!yIA+JIE@jl*az4=&Ff46o+x97K*#4U6g^(5)eMW12wb))i6I z$WF!mNKE9Bdk4~qYGxCkXIUXVJFm7{isdsIZ}0m_>l+XBv`JCM+}okW_XP~Q#>R=> zw0!9N0^U0MQp>jI6iiyKhaYaDntrrKt-O{FQPBi z$AWjhVm88hHk@GA^5u}o*3*^7_ACuw6E z3pd=zYK2{WQVFpQf1}Zd>iWX{Jh-c@cQ-T+Er-zJw>WXC&M~=<<(2S11g=>VF&AX4B(!-uvT(z z`jb7~!3b;O?zAR=@P&FkC{o!j=k_^96yK!N`j$!uY`vF^9=!A3PLnCXO%xU#!%)xW z~msZ~oiiyu>?|l={y`1@`RJgh~VS#Fw(|HUVZ)bV4=P z17xqtCLO&VtR6I&Q=M=>{FF()itDSlC}Js)_xFODD`MmMQjD|8EIJDZH$KeRp-4ft zH9Fq6)+-CP#C450^q165+j-?wId=66Xvic?SU|z{UekkiqCR9Rk@%kXhtR5AmnB5v z^)&=e#FwV4=}H+iOaQOAf8}9V8R*wJ;ZxKwcRXxk!-j1+rxm;X{*h^6^@;qwCp=~c z^FJj&tL9Sdyt(VW&E;vb7N)cEjiX)}V`kt~YVRqn)d<~F+3uB0s5{+QoFLP-K_3Oo zZOvC)UcZL@!oImh3xxe)ZuPs@$D-0Zg>uI6Uw>YqkKGQ8UdU~Nr!MuJ1xU*T^STOq z!cMP+@uxb4o=@MEw@y21Rd-rE^voZQK_ns~(e+f@GS10*?~bc z!1ou({7@i#0U$Zq_y7S5BtM2*TSBSk>*vy`G@^g>s=0Da|GaTD64EAHWzgu8J=R>Wdb-}S& zxH-|uwPI~<32{QUO-XE^2Ai@p7^R*Rzk7S8Eg#RT*zv@eqH^sV$#z6K^xmDy&SAF< z!vr(0jJQ>g2$-UikJt5$e4Mx9pnK|$=gf-(>ATR0y%GDu-3xoJfkpEhS=%2RX7}*Z zUjl4x+vY15WdtvdR_%T`ZV)H~C%o|SpVsv)x1V213aVl8eevxZyJjmp)nbj!+u zFP+;Ns(FOgNb0g{hp2yC>g2xDBo*M0Re3a^bU1|1MwDLOzGj?G>eernPqRN{f7Iqf zim_j-NvF@!0lea~6SId3)J{Vanr#G&daqu3#n@)PDkqPiOKzq>&Nenh%yMbMNU~>; z2+qPx2rLRBrc$aCa-9K}@eGVLC^Qj%?WzXzdw;jYsaFMV&a%1Mw>g;))#tsnu{gD? z6RYEHqU-IRye;VHol;cy*pgHbAUZV?+wbNdSW`O-ZiM^$r^I;j$AS@PR8ki!sJlL0 z?cuvEPaWfGYqe|lyU!wW2(v|4DLCMG*~K%}5W7E`zc-z=ff*HbG8QAQSoeBRCdqa~ zlOtg>pmvXRL;1lTPnnqhRXB;tnqdZ+Xqv%73!qZOEjxw9M7MST)efb_kvqfDVSy#H zL$RRcYii@#H^LgFdeqp{56sPns6Tf$-Co+%>t*oF4OKQ&H@i!FYY?YMs-)zM+~${| z*MSEa_%Wt+DSf2;MA4*?r&jQ?z#8VPVPjH2nQg2mzo#yOjO*-qhsE372X;k3ab@i;kyJA3T7WB|HB6Qpv4u2 zgW`G((2p{d^TmN~7 zM>^xNgW}DM`1I&UMp*1b7oU!&L%l0FsT5>#Yw3t+}BLHa3z;O zP!$O~&dJLfnzT!bjH>n)`eFZM|ErE4B-YOLRTDazM#!w{Aq@-ac){L9Hed&f(UZ2+MO{N^9=aPkb5f&ka{HOH)I3>U`zi*eTD#0 zJpV$6wmoV=u?Nfh_E#ew07{!GI{Qq1P3pDxh=IwOLe-)|*u%&IRCx#C>1x7(5J`L1!8R|T|r-S0(kUiWA>4#{|UmhT5Bs5QF zrA5Gb4neB;WRA~{7~B8}4}z5KGM#_^VjZ*p&V~$`dNizf$$DivsPP-6Puq!QHO}2n zIMWR`640o;JTxmYGopQKrpL;1U6|8GS$cjHRXVyfYX3jgUTd9Fa`;y+;k@2hznoS_v`m54{MTy0%IBj`7tMUwlt$Va&sR>K zw~;JT2YXj`h&*7lSi)63ylK($?m&J5RG;z-q##6i1#8lE!7Jn^x}()WXtZ6?Mqv5G z#)XXB37BH1MdzF6^FfT*hnUr%$}asvf7|qHve&n@J7>gV5$ks7(vD7hnZOY=9W<~A zJ3o5|>8lUbaqd2~Va0zxUgHaLs6M3}ea;9-JYU-|_2o4#*Dg@OV>goRm`$N26NH2{ z{TiKaOj^$24yj;y{o^SgqFGo_KKwz3*Z?HqC9-2Sa{wPTbuL-Db;Z9csbag%J4DnC@dJv1Ql2%=pXNi)K4At^+%o*IC)kb0@AfGdyog5 z0C9PVS-xf`K7KhNp&DNDFm@!I6MgaP7!OJ-7wfKyQ45Hh)%@+wCe9AMI;`tfNCMQld3MUhYKP0UyNF+FBWxtUW>+d4@hFR%hc^V^pzUZdgwYJHlV3dcxX2gY;||F^;whxpN%SebK^D*;{ovzGmW`doz^Fb&O)+zvJDtZF; zFH`;U4?BL4oPln4(%Y-Gsun&95w+v4iryz)XxTb{{a+Y6=7kz0^*UbIB@m{0uK9O#RD_bU2%Ydl(YZfjO(S*YvkKcDn19$ZL5>lRa# zqehxskWvp;BxH=P4q=h)-zm{omic;wu9K*rzdw=P*oNHETiD$3BVdlL&Sjdxgt{f zP*XVR8^?@q{JVj`s>=ggHuZ5|y$Zi5M`2O%zoDSKB4yQY}m ztEA-o0$swu{H%Fzwul=<3c}gmNwa~$nsEls!(h`OHSkdwv8v`PonXHUcpIbaRKVN# z{EY*)TnBg?c%b-Ua^KxRq5ikM5^EyRvf-br^7dbD&wt=CeMpc~HMMejn-76i#IJbP z&6iYYIF9>}TokWeGu2bZ>5~-887**+O7?_Vs>y-Ut=f#B7h!QjSiJu*;p9INm}yg<(vvec zOx4-y!m#a+voG>zR?fPhodPz@({$x} zO^JD(V^zllI*=TJOz8CT4UQI#d)8&XtmuS>M8&vhTs#Ah34>r{;BsVHxrPs~FbjKL z#I&iSI6sfBrS10A+igeAeT_Cd12GS33HF$i%^V$bj$4b6X~O@bs!RTQ1^*b}eN4Bd z?vL~}DNo#$$okG!|Mb_!MSuH&fAZ{f{DQ7xZMThqnF9zxOgmR2;4AFp)76TCaOsJ} z1o5;$Se)}HvL5vw?EpDDIRiG!E@dv`OB|(^Y5R7 zKiGPX?m1CkDH?p zcbZzzQ@vgzDJ+VILXO z)ZYFi@e=>tbacKma@Ui1F>>ql+;5*w4=T53?&?zL5~p{MD;abH%=4urNcAJF-IFvoJ%_8>u zc~wtpoc8HeEreLf>rGwwpON0gh3%X)k8{FZfD7O|!}#NV*(JdE8gk{2PT5;?vk+0s>5lZ9(dTGJvWeX4O*+4q{1#cxwpL@gaBRAj6VfRA*AAKpI+}*W-Z3s+b(ys zoj;!+yS-3VDww(Dez@C4BtTSqXLiY3u1IeVd_P$#PTmDUvX5?pguC%SLrL@>0*`M~ z)2;b(tmxcXfkCiA8_L+4zMDJ2V7rFrDw}b?85 zw>{eUX>@dV+RL-LdBc#CT+#JJD#!-e;O+7S5Oi%pJ?MS2Tc06fmI%6i{8v@LVOBG7wiL{>QRp;XZOsLvNXhC&yvg47cS_zHc^VK7 z;_oH$P`#TLKMQ%5hJ970IimTp$9alj!wUlGl@O4&hHqv*J(t)zC7ks*r6pPX0N$o{ zc>2L&YU5$c13JAL&V@dq9Vw4*%R?beuEqL%QM4w*qEdQj zJdmGH)g6(9pEE)l*C{#(b_T<=xvw@$z8(l>PF^2krahFd-(nqnEj;xk!rnHrXE`II zJl4li=n8GTQuwMd+U#n6r?tVb$X9fT@&_=qvb0AQ9rtubj)F{W5>CohL!7Q-7`e_Qc#g7V8J^P@#=gP z`{TQ5k&l%iJB4NKYw-G47(>#2KK_U14G+SWtDPdM1g0m;TZni?iH|_c_hM{BnQp?U zL|G^y6K#qOe6XyTa*Vi;Qhp|tuNQ6yqg3@v7S7Rm5-p*!2IC3zx;Bg|2zn(m*aIaR z^;JeEh{wW@0aV{y`7}n6o-L*hbUw1VDy5v!mg7~PpiF{pzkB&Ou?fGdHAFc3eJR&% z3E#miV@nFNN+!Buu4|3vU(S{^1Q@yr~LX3kRH0!invMlnBerKn4{%gGHa_DrNYAEwX()E%OI@F)e7? z4J#x$gB(BTQ*1kSi!60`lso?k9cI_^yq8{7UFNV4Z zkuLeAgWh$}!jHC#V6XS0NIs!a)%%%B`4keqL+1Tngi%e*kB)FjF+ zp0qT;RyPy#4aWNLCniz-THHOxO(&<2E41sh$FZwNa`Xy)ek*kh5Y5btg}w2_=NJJxp#uRn z`bMU+a}uS{a=#C?r3~&$XGafAUYYGfT%G)}6UBnG5ow52K5b~$k&;D>s-H4C5u;x? zlQ%@9c*_9XP~1WscptaDMWA#5XpXyl@&n-2VYOJ@BMWI(dzZ={{=wbzeEl% z-S3}E@T`CL2R8N~nSc8)txs2aJ4l9wZP|aJX4eS$`=Vn^K_bUur*b?cA)(^HtocZ;S7bq|s9c;_OLtj2_DofwZdZwNs|X zOZ}q3uPMj$1*E;#Fs|lBiZ~gEV?kf_*Uolo=ipV(nn85U{NBn3yo$bB0@LYt#ERf} zMHwEe(5w>=pVCRH5FtZ(&=Hg3Ms8g|+*BdpAe zWDaZU6|!r|bX{*bb|i_|iv(WhH#9PP03;*;T^(;+61!xjKhNlxp3}RSXDQWv{!nAX zQ_wJ*q7b(hjdavDr=4~ZLdCfaZ9GsstL*)vM@UI>>*Qb;cIonlvz8%e%+HO;HK6(S!lie!U{g2r1OMO zSakM*q{gBcLw()iBR|^63#buqDwc#4@7IW1taf`^{!t@dXt9Iy-mekQE$dmTnqzJx zX~I5k=%IpJmk9PHd%dtYJ0eMXjkYkQvz3vih=G8e;<)tXAQfFYah$MwV(cTQePlnn z!yJlQ42xY&7?A$F&kL%Fm+w<8+6!0KLltrN@@3(b?PQ2G4g!}f1w(Ye&9kQHIE1o3 zE^?D_4_!vRl+Rkb*^G7)^0M(wT&~$H zWbsjxjR;K|+lF6JZHd=s>Y(NI83Hv-FLzAT&=C<=|24tL9-r6_DQ;?D(PO>2f`XSs zhLM#(+Qd}%&8M}+s!MRA;~@61^s|I2*7W%4I-(-AAk#kn9vRxAKx!XQ?*jj9Cz^p< zLm{pRS&B?*#D+;6vf`|;k(Gma`kI!#SCexKO>;}#Fk5cEiEGC=xaDLrL7fc}23BVZ zrOXV(VJo(zI!Vw_P|j{6=Bj3lwF5Emo@3|N*q<}Y#|RSl?=SfHav2tZYR(vNbE&p} z?IFn#yU~JkrGcb}(|RGHRc@y;R})JBLv`&Djx6?Oc_4`}!mI@Q$Yv3pMpu6)O=2M} zF5;@KtSE8r1eS%USK+;F2%>GiWZ;I_)4PnrX)f}1`D+8oW?^&j^bwK5UTxzosE1O0 zN-0wT49?T_8`9W&G`@RYq2OG!%%lEr8@HJ+jfQH+TaIOp7(ot6NuE?!J>^~d!HLIW z2!Xa=W3i?#{xowhW82fQN&5Wo5p6_9W1jfS@-Ne=9bFd2HO{Z;uv-NfMR-9uUsBXc zhS0{tm>KO{sI6>fM7kYi*|^mB$@yX^;J`>Y<2x!ZUvfw4pz!BwuexShVoiXgA_Vfr z?Q6^XK=j-p%^O}g)h|0IBZ~QOx%W3ez)^ z-p7hh$g^@^y*)VN#=t#$cF_3N_&x4!+l8bqlOYlrIH5_4l>4}&)V?|QfJHg&_`w%c zA7e5+>#3@Ri;uY?XqjPA9);5d>Qs+xlDcg}2HtzT`6VZ9HeQ+@l&Z5DS0@53<7{>c ze7_mjp5F@5Q{=6%%_YrahraB^BVpaf%3|GysTY|hsU1)|Rkb*!{I`f${&=+~v`cJx zjX3=i{B*hII8ISLNjyjpla}okfg4qmz8jK!xK_HahN+(wUvuM_oNJ(1{j9)Fn_mNc z5n^G`q{erjiXwiVPH0gt8ImVX%^kO1jiV%)#Hmb$Q*TY7z0vi(5)z&(8xNbdd9u%X z#8rxKYd7VsL(&3}=Y!Yi);5{j#S(CLS)9+5MSV}pyLjW;N*K}lrn>e>))Q9}GgR;6nti{U%x1bkP zWu1oOZdTkMmaYQ9JSNq}r9K*St2P#>iZ0gldctB{-PM@6RI`g}osvBUSIR6`0Tc{A z0IL(|IW(cond$@Wpcr?$2mRRanQc=g8*8C$0M8}_Buk$G$;CK15fL5E8%|CT{|#^D z;h|G^dV*nxb7~dJ^$UY@MY|)HVC6NU)w~IcNDXH8Yu!2vqXz{M;--b>w6Ah+V#gtY zibKIy-Zv(tM>Zj6wmRM)uIK=n+bFOXqK1~|1adYY-mi+f!Hll8qbF7tM3QTS2c~Xe zdMfSSbwM-IGA2W~R-Y(!?D(a!UaQ-D9`s>3;`$9^vke23A+VxbDZR8-n0nMc!GM1$ z%WTqjbCbS1e~{=Y9!a3=Xc382kFVhfD9J+10AmXUC}9f9fsB?HM$(2Fyd)|<6x?c&t5DmHcRQSB4_9;oe`=k~N<#e35P+nmHSq}W zIl3-a#;IDpt8tFC;z4h$+fThJ+@{oOxNX<1-rJgMSP<>IZ#jjmiorA#jEvl@_+1;uw%0@d&ILy|>` z+@{Sdt>*5Q-R|1<7#A1wPm9;vJJ%&?SDX}G90&4S(!JRo=jI`YpZ3SO_|kpzpK;Hn zg;VCZib-q4c!^jqs-9L9kZ2!RptF?hKg(H}%zcyX_7mP(PLEkrN3_;j&6 zU{?W8486~09q2e0+_a)$T`m8Oqc3NOV~QG^Z~`~_(af~-mK|2c&IC6|9CbBlT@Cj2 z@*bzU+`RE6auwPo)-cjM7`o7WHj=$wRGOU{N?>=Fn#NN$4JX=dA4Ez9V7jO-3SI`H zMjQRgi9?s$#=7-`XFROxZstphRj@oZr*0(9x^yh40Z@E}onMl=1{&~apQ4*7AW7C< zXPL4?DlBy6LHi=MOzcSy%fo+xnUi^`{6TizrHURS2X8V^4x_ln#b_HfJ-ic19PvGe zd^2YM(E2L1-$7@dcP?TzdR|N!)XU7#>I*y`3mGjSA^?h0!_}b8wBG7U^|DP1#?MQ; z(ska!76<9p#Zu*^0is&UlnKEY46COsJ1B8iP!xJK9OtB-Q2jV6sM{1?Q|;OU094HT zzoym^XEl124 zlEYyLdH4{uyn{>bE0aV$K0! z)|y5dj0G_u1hs3GSBQ9OV3nTt=))B0pp;4U>0=~DQ`H>9HB8TzS3vdkCpud#Sx?Tb zyknRUACF|&UE|Ky4s4DWPM1)F(g4;caY>8eL7xM^r)qa_oA@{#il1%&!o(DqEm2!M ztb(nu%$%G;$cm9SB-7DLR_#iz=K)(1Ymm>**NWvUde{f$aBe1xfp22yv(_# zXP|*!BB=IuCP7KhgqXTeW*QGb8at_~%mTAb4z?Rz)JKXJx-BY09soVUw|4D=vSQ+2 z4fRi?4tY48@9ytlaJ%Mui?>$J#dWacXl`Pc>3qg(zFr14FfU?$nMMJ?ewdfK(jweV zK|mm1)TiJ;bypaNP%6h_KToOtoWhb^5qLa6@2LHbErH1_BaNIqgEhoR=R^<1Q6iup zV$D+T+O6AtoXxzQ(a8rXhj=8eDXcwUEfPpUx-M7khbamVj6|N+Q%1+8lv9P#`p9<+ z_;b$S!8csrN2d03u(>6Gw#vSmb;I4VRO6^)V5bPUAl635PRMO>DyV@X=8O_hJw*q`((nyZp&DOms zW2Gq`8%DkErI;&}wXUH${nkfNDetRM7@Ws~cg_MBJi-8(zz#Kf5avncKQ^$LyKGEU z!ts#VcKSu*c1ad*rIQXKu=$jp(kmfPY1P#ZAszgcgEy}K{kQwi%mI4goCx5SqtI<< z^7dKU9ZVqlFz$Vp_U?VgU<|<0PQr8pB<)~}ISvy!Nt)k*M6u(+6e6Vra>;g~swk3|SJoTmf{)-tGwBuvr~igm~@-#A3rRDDmHxiYgqk(Cn>fn&Fgo>{d2 z=@k_oy6X0>At_o)TF2mJ&VF9BNA1$MSo&9x_Sg0Wrwl=PfJCz9j8@BjHkF2p^lt!Y zAkWgxO2=cwG;Ga4^?&nkgl+^zl75}G~1EQ*(yDYoC{>k() zzR2&(+SA2#)oB3s(Ez^a*EkS_rI$)K!rc&8ME6-qzZ`#@C@k0wM%i}j>I;!1BqV;g zvww5^M-kgj>2^%=UYJ!vKkdNfcZ(2uqY=awdW%x@{u;QWtLZpiVrClbtybjBB6Wem zEcH@Nhd;sH`w>O9r_A!;ZO!r6fZN~U!S^u=IbW6pXa^QmHt?tapZf?Xs(RJC(s>VS zL!iSCcGw`C%0R}AHV4f+TU*)%>xz1S=NL8aEi}J55wDz?C_FItFE07v_zz$w{~1H@ zU;E4t--rJp1~8qaj9Tn&OmV2*Uu>}OmY4ytboYLh!;Lu**c$;A@3sh17 zob4ee338(5=qXZOIW83AA#=mYLKhwGDOP{b(Aqpz-uib~m_Pra|L1TY)Y9MLxqRAe z?*J8OmiX6U{C@BpW%E@V2%i5oS26MZct3ca0>n3eUj4@LNo`40;QPsb@cd8x|MjJW zHxP%b-oq*J{i$x1E)7pByGqvl?cV+5g6FL`5sWR@us}| zdGI_(;;a0uL^l~F(i9Ev$IhWqeYj~nFP)2Lw$m zeWK76WF+RIeZ;#;W$>a58@r_6WOBmHImS`R;H5XZk!^in5Xe;ja}G{p_BRfak6M#9 zZlK6kvj#hIIbE8NGaKCvGo;-XhGyWbY`k(E8>dw7g`e+6jYp9EXje8To4&sgEYw$t zC!hy|bkzrh3_@BJ50>`a6d`ecQdeKs!gNEif&X)Tj}d>eMA5Cji6!`XihK*ANDUF5 zE`&*YB41=YBLjY**iN@381R|caq~}0+_2ye?#a;9!4CBa2xmRAd+abjRl4~Ecp3cA z8&LnV}j{lkJwEM|2Y%|$cMjE z{(oyBH)|mB4Tna5QVnU9@Rxyo4IS|%VdALnQiQ4tkJRlK&=q zw-1#1=K)|iL@m*42C2mdpAFT>2D2+Ho(w(eZ@|d-zEY{)RWwoOokkvqJGp!5>a?om z{lm=vsH9#8lIM%{8$23HR=5^^9u|a(JJy$ly?Ds?nx}W=Yr_=x{>BOCkKlLlMh#Z{ zeE(*tx?+e)7y0nhPaDRi;`wYS!sq_1eUIcsP|5^C7#lUbQMm{JyOto{mwqPCdL@j3 z@d0A!ms@@pbHU5<0rH}h3~F9B7B(E8^XRC6g0Ux)3SB0NbCE%OWdbs%J9VuN)#8pZ zt*kT@mg$z+STv$5D7*Fy7pw$eMayuJqWR}XEVM>d|_+21JF zIS23*bJi`wnp)hI26gFahD>Gy>pj1m9BI0;=^MvE9f;~wayHcsl@lvg>J!#XE@@wF zB^!s+o|{nP5B9eZ)DhVR!*y5D8E6d)XFZ962R>!Ls)%{Ibmc2G;hktv4+@8`IOS*N z>5=`%13i)f7J}}*W0*+5b*P-V_uB!T&?3uZ>eJbq@|3Ns%cYa20`*eu)pSV6t00Fe z_J&4lKj%4TM-s^+nSEjU7G_tVLqo4iK=&P6uH0VM2S`gClCG7Q^;8J%%g82s{wQ># zH6Cngu{(ttjB+e@&L6Uh} z`P;u?NV#{xHPl#kKlO@HFDk|xLm})0O(2ArZ)LBn45m$!lw^YP@;2|W&R!A5Hq~8J zx^Vvp54>*S#s>x2tle)MhA4OIQEeC6nx0?I$ZfohroY?N7$M;y)!o>AX$*ByxR;P3 z$FM8bE?9QY=}ofC^E?|!ExiHyfJJ5cm^t-LI>#CCwO>4wA7o!wyNc*rSEV9syLFm? z$PNxpz0~4I`lKpQEz;?pMpvGs`4o%96t@nXALOak-Rn4YJ|p8%#!=oVZUO#9_CiE< zr_cZLBmZqHv41}u{cab)1@M0ViIn{VKk$P@o#ylHC+k;vzpkwUOy8(kGh&#NTtS@a_Y}D*~>Itq3yR}8LxM5gt|G|n+{cgVqyy0NC zIpp^++Y6Ax877NPepTfLF`$B~fhzGYKu;K$pR8P5Wl2GF*bGg+(%Bm-b^Gz3)bam0 z7WuyooBa#v>i@efbmWo`E%~;j!r+;Dl#z5a-)qOjDUA@O(%V2{xl#^`$2{9iJyF-B z(HXw!!cy7LQx84kG50YrncSC?GK+mLUk<7BE|gEloxd-@|HU?CapqGloWUm*&j7{1 zWh#sjZQS{7wJj3Pcg_t`^^?Gw;pIdv6jqHjY)*c+0fPl#@tBj|4&V%V+TJ&A*S*;q_3)w(mv?Y&ny)yY4ZJ7hgrZ0%XY z-Pi5rYY~Msi#1D@)S7MAt^YyZd%!idrR&4-prRsrL=ovqmCz0)KtM#LcPSyXfC3Ro zNKmQ}(4!6rp$Qm}E`*v;q=XWhgYAOJm2a!OBA`(k3e`UnnXx3I;^uYaoplAx zh5Ib7$jrQDwOFf3U!X~_KNN19Sb4U`5KimPf?dok(a%u|7txhWfy831GGav;sUk~I ztr_A#mB>n!Hv^uWr4X8aHOl%E{>gZtsrB6DVr7G}gox2A>wOaow#A$N@rfYrZ=gVZO&&ipFlU z55*kIPS3~Ax>Pq&fb+Mp%2iI%K~J>mTh0VWX$$rSa=+V`9E*UxIQ5|1DuY(jQ)0Tp zE0tNHkId~+&ZCO6qB_$_KsS?qU2Y+5V?he9$S&9iMj1|!>_1lG(xqv@pK(XfyK2;{ zbH0t$w*0vC2Ad?kfRLU{l9#?p2sPcq-2kM}pniHnD3fPOo9Bw2_E3lGj8&7zoBj3rOuMqNht; z&I>xW%h{$!w{h96DVR1qN^x<*;o7qUKfLSL*pfhLHO_)e!rjjAZ_XP_1Te2FauPEM zr7qL8gN$U7%$8fR(Y}+OUhBC)v;AjD%oCbG-V7FPipVWj5BHJJt-72T= z_x`!{+`Ys){2ZD^7zBE!FIX|!z_RVJO6dU+stxR=(H%By?RkLC;&^|ucbmuxqSQ$W$W4p=RHc|(K` zq4x6BotE+CM{H3@N|F>x@|j9@oeloI%{5$Yv|f?3TnWkO={}4q>Yt)2m&a|J-0K2bYOo-2X`7B7XxIC$%}h{cKzO zR)O8292p^gB(|qA`Kmh1*=e031`^B;p+{dmf`msVzMInflNLQ}Gyq5$Wqq?T%NNm- z>L_m|$+*s*7iWhQ-V-V*(bKnCPA#x5d$uD)swLR;R9^1cSvdYT@K8>(~3Oz1TZlkikXR>rsH;JsS& zJK;UCwAKee_D-DbhO3DTJA=Bk3<@rAC*-+V6(Q}ee~8PR4hWF8Bo-|sw|;Vqc{#Hx z>IGw$t#dNh_76Ac7#z;7s~t`U`dKC1)nd-^rOL!lU07t_Hj)#+LxQncIV2>TK$;Va zIwsNc#5emQ^g5Z~%5~dbmd@jew@EL%RJc2&O`R0yrRvPbD($u%aBKH7a=vW&pOHR^ zMh1*VDL^z&osMqp3|XEVM|bZ!mFeUuv_m9cUxx}so0R!kolo~}6HnO}5n9trtc0*v zi42R33Tvj5<+^KC%B*hn**-g;m)}qT+UPcQO7_OopXtRBA0#|*=V0QKu5Zt5kJ}})sQORl~W%(YT@6i3Kl!WO~ z9+C?8>#U3MRC}lN*j-qXg`L~>k=jfJAG^oxC|SXDckwT0AB@d_sve!FJ)U9NDcUQY zN%x7I7>nw7jnz|`kz=#y#NswK6LJZ?fp+;mSD}R-Lo+3jBUg?5~t+G;j*} za-?nx8GK(+daT}|5g%pD1Jj>fw-Q_ zy2LNXzP@H+EbibaI_Zyk>g0)z$_Xw&x6LvCmQ@%A&rZw2T6%#&C&sfaum(kZb2e67 zs)9~fx-jnbefLCBjz?TFJgF;^zt`dUyA7KU zw_Tt1#@s}tR4Xc7#{>VVZk&Ii$LQ}ql=07McQ-(*F%&S?4Cnmu(qYGlj$4x<~zMoCQT`% zCZRKLdEA909ATnWKMBT*k8@XySFy7zoaQBS&YjjdIjojdd)MD5R8sRwM>e5lBHl&v zHL3W`R)dLnO-lln<`kgN170%RHr5!}#Jozbk}maxzt1UdtEt^HJi@Lb!2#rgXIqEr znKe+71v$O}x^zZzn#hMA_iCT(j8$0VP%%7(w~NoVum)ltraH)}YewH}ID0!Q&nRP1 zY_a=YpXQX1*SVP1+)|@(!K_d5CFW(^|7|ZPtm0-K){E{5N1wkW8%FkHw7c(i#?H1uBo2Gh=9Yht!%op^Z9XUH@u3e#c4{8r-p zv-I7F1p|*{6^?ikP@JFJw2ae~fc(P8uAV*6e%|^x0%$o%0L~JL9u|xoq>ynFGnFsa zRKbh{D<_Mhd`HN97?LX-;rdr&@n5SrzE6NFYI(VepCim$HEL^G>;}ADA+1=y3VqQ+ zmqvEmNMEAJfBnUkC=sni`52ifZ*$Z);ltdfoa%fn5F4w2@Y4|!Sn)W$5l0^zWim zKQ!{sI-GZyKHU^i!0$!$@svNGNKy5I>wg0bVoyA<+rEQqE3x50d5leKkqCrfxM$UQ zvbL3P`zqEhJ9dia=N6r4P|J1H6U4Kd43N5Q11>BlY7NXUveqRlt9@g@y7j-dO8>@Q zKZ(5@02u|qA8Mi+Uw@6`F6&ljf0D5F0&=rW(|igCTsVJusaGyhP}qqT;*rdAzvazL zrg^(<`EL)hgJ9PGlJxk$GwGiqpL%4&KJz7-yT3+sa9ENZU$9yUb0ofLu1w-FVo*+x zKMV05NA=Gtyk?B}AA5ej10?^(ocyz^e)KQ>4J0-|bUT9V@KVA2E4rrg2x?yWGMcT| zvM4lpIOcF+tWv6AuGlnEDcM+70Biz{r7wm32)I57CI5ht{tyPl) z-^0(pA-#XZU;pL0{k|Mcend`ABPEcIh-mz*{4)kfzUXoHDqV~4Ts5n(~=5(vcH zsMYT-XZ=hOuTW0|7nqLZD%8Zh?DL4x+h~b)~7A#=;SWYc2a_&|YxaHI4Lc#~7ObfwQ>=(LMWignMDmO#p zH}%PR6RtgarOSQ_DTL#QSO4dW{Wzp;XQ{QIjM={|(OSucZmK!XzF)&HC|X|AR<_>v z^`!1lr$~no(P#_rGXE-0JQ=R29|2K+?8pwgv07{^!Hn&m=Vb+zJj-H0V zswn0s4{qTA=A^-Ly=27GlXd!GQ|C4~xs^4|Z=G*O&~g(`#@2_AB#0J@R}%KmSv?{R zKk`4Vb-k5WWXA|bBOh}jmt^CXo7|P}bZdoN`MC>JmWlq^jAEwG6OI9gLG`&A3AT3Y z`zMg9sz}nX=4*pl=r5yg>k5jfc~!HMi@3vIYn@8h3-{xt&-VK?Z(|0k+}|<33M4mtnog%?EP~ z&8~5eZ-7;5|JOIlIXsW@efAtW{qCC18KulO5yd6^9=4~rsDQP-XN}@G#gY;Y4s`Fe z$07&8kE*J029ghp=jjpV3r5M)oDEWs9yOJ=mME6q@r*r&TE-_=Zz?dT*D5~~yW1nQ zL{C>!t3uA58e&%QyxgC-|9TEy5Tl|q(Z{6^JJOnO8RlSndH$noA1UuZ&TI)P(;Tkh z8l@AQh^l(ES!_>IOB)l+@!gv)=dS-e;#@H@e%O4;@?(B(I8RJ)b98z83=ooT9>gDYx@L>MOc6PYvgbZ!NZV}Ws?yHg%2(|)~%x{7Qo{>z5D zRg7$MYb&+#eqyBVH$Z$!UX?nnvyfxwQKl~s-R-p8uC&jy&}Uzk>K^cZU(I@?nB9gC zsbyYjpB7pm!qzQ&6Ex#t<MvY z+fbF20Xa`BG@^>*pC;`M^K(aWH!?^@(KXEvqAJ^cR~B*mn-R%~vHl^3lVL^tF^2QNB>2rT{lT33 zm665vTl+s?IRF1~s4vBaHXWr+N83txZ#2jxDyZEm>9ehj`t!kIvbzdUEpSl+Xz1?<%{IG1!Vlh;t+0aD)xy7hVqQ7O{CRUd)E-WnMF>Egs@fcezlMz}n`Yxot z3P?XPuH2X8VR*Z!h4F@q(jOg*Z9r?wbb1-0)W2K`%;|%SLcPXkG>|yR8Fm9H&V27H zvlbu@1rH4Qk{3^<@aad*Gw$&Om5}_whiIYYE0l_1w}jyjO=&gD zLS1sqV+C9ZZ6M7??)TKRQHM#(M#>srgnQqcA@8!|?9kZACCUr(}gD4Y$gNBo$fsV7Urg!{~L~)!57@S@Gg&7Hg(DGmeSmmBpC!-P|$00=9)&9e?+j z6CJA(-sAp#?CKRvP z+)%kGwrrt#Ew9n#OW`t7_!D_psetXCpe?CK5v$l4VI-p3@oDhd##bI3&SV-U+5PJ>(KOw^!RG40I^b)R$~6D2g#EX%T!mtINWspjDL30x@Z>YYK4AV7s$a`*G;D z3BhX9Bt}GOr!5e#N4vaOZap30>6|f-6iK!+{E46-6cVzmYF9;&W>L@g5;wiyaq(@z zU=Yj$p2|zoil$I?np7`DxXa{(BgB(t!5xg`YXULq?5rBp?HeHfYW=1MBc;}K$GJ2> z`)lN0ohZR8LV7)Q$H@LP9m9}(WNJ^gYLjEN-AhPljVIB+wq>OvP7HpEAQX#2AlKOq zg-}_Qx@_+A7N9&2T>BtV=;unsPs_FM{p;4<=F}fFrnjvbd;{<|l-~FhEgLFW)nadQ zFAqLu#ipH2?(cY09a|U36NR^`ZDw|7>T1jHzv)?m&ywl!hFP?&hHkW`w0TzE_Rwcp zB>e(4WU|*a)QL)O+$_s9DL{THcW|qGT;7e~LuKuWt@Tm;=`B*pvz)e6aX5K`l4X>A zLa+JGOc6amS(L@*Cvcuybxva8J--{qpF5C6v&uy|WXyH_dqEpdc2s)I`m`E*JNj>V zeqObWgsR*jnT!~s+t%)j`fl8P2)D`^lKd4OcT`q+cT>%cY%Z%d>KfClE#9rRf!?^X zIVT-!{|j>2xNS_)x59CYVE4ug6JC(JPWgF7K}6+=7LcLu)`?iGp-mgdUt9mm<2N8D zd3f$|hSHu<<}_zViP^cg7!cH@@bq$n>sA$xl{teO#A*-CA^0458%m z8wh**eFKYG54ghh7cFM&DbF5v2AKA~D>2F~27>Y!Y%9|mqYTJdb7)7v&maUNSr2xJ zG*h;0<(W;A%syFpa{$fGCSidimMZ&BMu-B-grS9X??S2)$@FYqmk4hExkFYTQa(i^ zykD7(73)bfV$;{$>S{=(qo#;lZpQ78Z$@9xZotW%u%da+VDQW2y|~4g7%b%dm@|OzSAlI?_*okPaS3*Gd2Og!|w6SWC!CbB1B@ zr1!e&bGA>mY-m*=QqL+U1kw`gr7QBuUGwavCoXpT9AM6~QDL!~PHq&8cK$veBb~ho zH)i0U01@^a+#55zo}G>Fn|&{rGdD-zRjn0QZtaM7jcRwO$)VqXfZLsj%36iUTh`~U zje7PTSv)F!gcahGRY>6hL5T|!)B4_p7Ba;Y)#?M64njd5;%ZW?6#t&b6@j|--D^DDk(tjv`FA!dK=F9 zL7&vk+FG2Zy3Y3KjKBM?5y9askiImAeU|<46g#!%@LOdK2Ex(S?PebARdLUpoYc>~ zUM+JK&Zr5Uq5aEtO;R1P8iPZO*sA$9U^RXo1*$)-4Y;4V3YEkk%bP@LJd36)J3hy(mD9{&0=X z0b7zaG0TUYZ%q{6bcBZnltqhV(IW4&c8kK+P7fyHhxEfOB^TZZ9gx6LhD zgz@3kyStWtjg1ht#?aF^nObAX$l|jAO3DGxGy#5h>ZKiYJ$x+`&n5 zG7+#u2_#u$Y^#eb)ps!4Z23<6E1sfD$;My&Rv|`SbMZDQ!@2TVg$9=;whZVe%Y0EU z6lYaSaZ;!tdSQ5Lf00RNIA0h9W7C*7;jZX)jST<0X^t=Xo#}1UC+p5n&mMY{Q4Ir1 z#x}t$)C>-)C&atKMlWwsqCTzT5R&!-#NU~zp&&j^&A zUaj4d9g>(K6&o!gcuOaxl$O+d_K9X>Xh_=_?2(fp8gjiyUnu71607An;d+9Nuqu67 zvg~|A|K%+|U0%=)VntNQ`!~TkglgSlfoGK$|JWq|T~6$e0ZLb{OMy_Ag3ymjft}XA zbc>S@#}S0ss7_Dm*b{drFfR*`5bFX50x(@_7#*^9i2N&Kp#N@+(II{cx8bQ|^J!m- z7rSczVX_UI#88{bS$j6q_dMYNEm6RG?Ng6O$iX8K{-vLbN3vr3w+(eW>z#mgtZj-V~%F|C6k`vtA&<# zUCZZyu@qyE46?qi(TpH))KL6Rgjhww(uCE8CU9)x;C-6}Oj5aD@Qmhq0I-+A15-pA zaYGO@pyK83^x!_a*qdXjPt$@9-TL6_tml|h+u_nkfajOmF%m$aRVL=T^2K>Yeb)xQ z@K&!Xjxw%&Z*%*kx6t)tZ>9YpvA2DyLAT5xh} zvIqdXAgy`Q#;Q2MH5y5WKC@3`x=a-RyxX=^Y@5qf;BIFAIXxqazV+y^yIV2%=XcXE zX3y2F^PDuU#YAIZk&T}fZQ*lUee6!|Qu96tpMpx-7J$+>mbLGL+v>5zx*LFt3g|y6 zJ3ICyZ5h78E-P@yLxo$(sCs*^_6C#U`n;_Xt57xxEhTV`O!Mi zwL`c?HjF_utr?=i>ZQd{m9wUp@DUijx|R;w|Lqv z7u+9NZCzj`XX0WFV2&JKbgzsIiW+TUzy$N%iPrh(=0tAQnDl+|TW>(fpR+6M z_)&dr$zux-Vy)7xUd2wbX{xwT1P<6cM}yb>(!b6xzkCe^y;9&@vl&IsT>awQCPWz_rV zTSYLT!J`amV)Jfhu}+Q6hv(Uc_i4fTA!?R6WftOAKElz%&T^J` z7xu2e&i?2)Il`elgeQ^r3jjM)!}hwm-|Th=^;5K^)ajrTHpxfT9>fL(Z5+Nlh2?6- z4<|I@aSEDfTB6h(St|ef2l1auT^bV|EQa@O5Q)YFB+wPiexy?wlc9=m);HnKbkb>X zO44f*{Rv$^ybr7qIe3Wt#fQrx=Qd&c_==Y#R@Heca!D&69ZJT z5|ri=f(b(v$*SsU2uz7Y7uK*MJt5_>OV!QsC3C0>9HrVgY{LTlcfj0Ggi{y>V$$IO zVdudz($RC6sQ{)ZW#~ugIVC#HJ4Kno7s^0v0zXAIv8HhKP2I8q|LJDFi?Vn%ZGB^yaNYCWrpwi6uM{oeVtix zpfNvLFq{?db)N_+pSEc(`iJFKbso02x>N z6q*OTlFHUYUfTGW)@VKI?AZX>- z8Z=-N)>~2U?9J*iXXE6ZG;3`F?==AGmpkoo#b-=ed=e^bebWY#M2niLLpA zh1)ojn>4=X6{KG92TA<{H?;T0gGRLX4j0$vbi(CLD)!V4Xp3{N*rKg@q_Ix|{nuztsrL8TI<=$2j~;2SOEGnk@K1Ees3PsuKhpm|KND}q0giNL zRNbmvujQj`HPSc0wRQ6v$6e_c`)!e1s>^$Pdtn8?PK*NNSmE_F`Np{X*$>prcU}B) z2R#tz!*3;NgO)}$6wEZ!gS8mF?7vvc0e;+;~X8wE2y zB8U~-V|3n_nrpMmgMlwc)`?oBorBMzEoRT=d2n-%DO$T_3#A}0$>>6>ZSX@!{;jin!xFaI*qIyjevp3dvvFW00BGiV-Tqb)Ei;6lSxZjQ>9+F@yT z0=J@;QJ9aP)RPO;7z8iV%1A^!sTlb7id+XO*XB{WZ}*nO)U0XFach>$Loi z+%XK9t(U6*@x}%umPS$6aY#E2=rQyUAt4A}u4XzTQRVcTW|1 zu613G3cXLdIdNRGBQiY1Op@uRRz|>^GgVmzRu37 zEH+dD1{G21X-41yiCg@HiBjDx57;v7t?r$mz4z`UJmantE&rHj%h80UR7Mkr4iVfzkB$O!+%<~1$ z)?V(h)3<6j5({%{(ZJH>2aq5=n09>OB6KhYAmDh zWe#Pr;PH_v!LmV>?(7*#lxJE{Xc6v$2tV~x7D~>GbC89M-}m;|<9VLf1{4saf-shZ zoZ!9kVY^yS(KM>TX475DOSErU>c@c*i(yIl*s`>3)kwDA)v_{|OYy=+=if7(DKyuF zsyUf!<#20jC?B0;U$|K+(-oI{dt1E(*I2RFG;I^sj1y0@N$Oq8?=9jR93si7FaYV7AV>}$Q0JCyP9kckBeU`xRduJYWeUw;>qAw>W9vUZe`n*a$$iilrTOmvL>n$V`mwt@W9<$W_sWMtymIzKU! zVpVQI_Chzd&z0wX_4L|Hz3@zPiSa&o>a2f-Y@26s7jkj*ZHOAgpJZa(z-~mNo7u1k zBKi93W<4_93!1(&e13nj|31v)5=(0^WbgszwJi=kesS9eI1Cpi6o?C14Bk!wx**_z ztvF8)0+`oI7EM6_f#~GnRO#I6swUL6-3Zm`YYe9EAAsS1C=~YWf5I-N1%Efm&3+P$ z_?nnsXHX0r3e9hg9oR{f+{}U+f@a2zXt$&F;(&y*0#Re5!KB*7HaX!)wAk(J?Eu5+ zF%<;!$o*xYjN*O-G%vNA=uYjpmY|Pv^*JFHuYU_`?K?;o9N4t(?ielbM{B@Rd7`z} zJ%li}=f6jI|H3l+$BI8e6gMv6ETAgWzt|RRFw5l8yNZAf&ZJ?}>5) z2|~E9jpjN#h}>0JzP#ct1XVn%X?(wo`fdk7P_9UnkgMM$+H(&~9gq>2TM&RiVEW^Y zCoYdiiLbfyE{K@em{@LS<=CRPq2d|(I3RenIAm27vWHGM_tDNVWhXez`cIeemx)51(w*&t3n?LXjcoywQAVmk-x~A>`U;S@@ zm}j=ig{#yKUhJa3+`kU5rIz)x_PoE7(ihvB4eAU8nj*+SwPGV<>UNRgEh=-9T6!ez z28ay!jwG`4zD=hhCUc?8rr{iQXCCc{pS>=A9?V(apsna#Y35A;x{c(#f`pHAT4_XA;Q zxMyKT=PHkNHzW7S80s{?U}EN$(tX%e_HMM!bT|p}x%CUqmyxdO&mwfTh=+J~^M}MQ zSFZ3ts6D~e_mrCCcNn_Rx~fa(cNn^rDyv2q;sAzzdNhXtLpL)hYHQIM#l2x9vuVCZ zfq5B;($;=oOtnp@q`X`_j@?EQq|P-f37Gk76i{8At7wMbx zL-N_dJ)}~0`6n-?<$WXrwtpqNGY?5Z5QDWs=~R+N|OD6JOt@~?cChcXe3 z?6A1W4-iXuc4m8?+|`8$h(%?KA^TggnZW!UM#TMtF3;+F0YOL$PnRd6g`0aA_pZd6 zXNJOHPKTTWy@-(%Zlu^!iwj20sie*)-lR?qchI6cxWGfmaWY!*D)_>d>tUjq8o?%P zC+_+l*Lx0jEjNQM-;$e}M(gWO1?Xd0sZaPsK@T!Aox(n*=;U7bv-ZfppUhwVuetFw z(*l&?%Tm-_G*YM9>X;o-fH{B0DS8%S%rcVGB0Ol_+&v;?KH(0;L!E9)0>Vw#vm4#~ zpwDLpmYzzs!e5&=Y2Ir#faMLI2nEoZxAMUOfa&3njaeffrrh{8caivf?mNaX)*N zu&42Cypf))7bA){zF(RoJ+1A7$Z9vT5pqPNN{x5Br2Fag;dQbIF}vP%F4MghQag^P ztlaJdAg4A$kEq9Nx2J^jwvYH|tSIiiaDCc^vt5Xx^E~aCZC~N)ZT1|qZhjrg{ zB;;#%sLG2A*-k~J$v2>_8inI#D!h{%2ljP?EyZ0Xvr+Ut)y!C3;fx?>>)e4>V4VIr zls|;kk0=<9Tj{M29zvf-1^meKu4v12BCR)1p*O;2I){+`Dp1f1j!f7|Xn{a_`ubG! z5xQ4;z^g4H&4tn0m6(yNH;0M;t5NUN8InQZ7%1i5FmBVY@T~KwdRaiOi zm3((?6%%2{RPMp|?`wyXC2o-P(`GK^f>BKp7B}C-(3%W7~l!)2kjP zygXPcfy9$HFD>VsD4_>=`R%a%J<_TrO% zEi7yz+HZoxp+dn`iDlP6)ET?&oQ-j@Zt=?~bt3&tg%z?EE^r`PCKJSLBye(Nnwavy z@U18lu0#RRP8~9I$SKv*26nG!$p#^*D#?4)8P5SK(kL` zb2fpCk2{ATFAxRLLZyd?tnw-!$>PoA7KBkVCpMtQ#=7Vy%uE?F3hyH$fci^iA8Au~OP5@G1FBZN1Nh8J&B)zZ6)!vbIXcr* z3FXAxmkJ)~@uZ{rM8#n~k63F7T)*o);fXl=P(nV>7@WO;L)qF+K~zDJp& zJ~a*+mv>9=*Y_Xh?pwN+U1PcNQweAGL|si@T+o8+M1}5~aQA+lvCHGiV5OH^iqGIG zh~8Zl&rRwun?7#-2<3iTrerS~JgzVTy&EVkW8(#KGy>5eb_Juw???pR` zyEGuCCf%d+qc(;H>s5wKK%S=ERaL^eN6J<~w+5AQ-ad2w(rH?kg65C1BvgrY6kiEF z9sO}0*dDQ2&TPnQ%M%y`iNfac7>vgbP!h$H3ML_D_j+o>zdU?FlN5Pw)&zNe`*km+ zr-gl`J=QvyAQEe3BTy8E$XWxRy_3}(^408~(tCrA64TG4`VB zrEuSK{ah^a!A;st`e(lZybd16ew8L1qXRXM|F^;hez1i9zW{-l^eO)a(5am}^~w@u zus`&vx!iW!W=nAgR9l=yFdWHuYk9ZNCnb8XsKDb#nzd<4sJ;$6C7@u0g%8Pl0)b8hqOsVz4{0;Zy3&KGIRTgboSiFO z`^6t}|4Q{bRp^^zPRt>EEZ00+DWB&jT_u0z)J(0^?223@>es1!*}aS%e8lbYlj6#G zIeke+WgJ?AXm)=hr4}|74NTAvjTcP3;z1UR7iy1pw0^MdUlV0EXcVeE2kT+cpK3-w zAWfdDyg4$zNV#bzNl&wmcNu@PJrUUDS43DEqEVJDGo8A{r=~r4`FlH`?YMLo6hFJr zgH*GnaMhYqz~OU6{m?;FVS<*SRXYYO-$Ul;duv41TwRr^Zl1=Tc-BO*ER#gOTQo1j zs7jl^%AT+w^(aGYmfdT0oucLoW1%%&m?^)?Wz5JdxYL~w^p|+cKjvQjjpT>zcQzI7 zcdyNVX<;F^_mS$^mZ)LD3QZG;@%0nUL&_qg4Nx=z?~s-4nA8{To8ci4q1tUP6o&Ar zJZX{i2}0#coKb(SZ)_IpWTvg^1M$dsg1tPcbzR+9a46FAj41b(JBVL?Lr&LDtp0RcXR?Ae7dc6C6xngpE#=_B+SRS27^H zCdS%^vRT52f{+iontC*@CTf?_)R=N*(%ewe!>{I@5m%21#pXwzEQ|XD85qq)4@#77 zo!neL$!1?5-|6wm%9>)Hl{JA77rW#!3<4PeOmlqy}09JOorwcMD5g}(z#|_z>*}>mb zJ0;8i;edhfhhn6QtM+{OwXaIek8T{?g?=ciW)|@iKun(}FYPhRdcB(8ipMr%>mTOy zoqiwoZ2f?^?}wt`4{iUG4<#b96(yGel{-;xU3}ss9~qk#ula5xvfo-bf%%?H8I9ZO zq?BE8e^+~okY59jG{QY2g%eNu^)CnfzglMK0a|VdJekf}`M9+pa$A8#TZ5!XD*M#$ zw}WY4wvbe1Gc?o}7tTV0yK?U=X%llNpgIl2KMn2uHje+=Vbxwr7XL+sA~!F&9^Vk4 zB9ai_)9XUNE@&fRsx0ORL7hkkN6RdFJoK(C&>S?mx${FukNrTW8v^-Pir~6*NB6>R z(S|e6w^AnzC*TpYS955{h=X=;cIz)=O{8(Tgc$FH@-Kdu|l_Fz3oyZd41lSwDb`Z}m? z>@R3j*82V!WnZNpMLbXbw$jMv=e%MK%5d<0WWGWI_Ynei&^0}~+~#f?93;srWQe^W z;AnDi_Y(l+BLoCZ7+|t9fSou0@~Jo!((0aQ$KgPzwgZwgkEophcZB!UEMuag8hBha z{flepj-1?Qx-er5?1e`Z$F=>E4RJ=M347r9SIIVkIEKLRhaT6>N9$v*rr!WFJ)-yA zwvDVD-{wJ})zNEiO^c<~st%K$1UTr*6(cRh2zS?6e-v$ai+s8(_N zaf+m`giE~?DZP=>qB|DM{kwFg#cW-%uc;W||z+rLd%gNlE<{qZR(7UHnZf_0Q z>>U+#%V~A_QXz}MTYU1h6CrX$e7ad|UN<#TlzlF=M8UzePb(8}nxPYM=ll@_ttDs* z%!dhaKEHRpuKh)e(WqJtMfu4%*KScp)G&o>&S?TO)WX*fda?VtGD2fr^av%4-&}di z(L>^qP~L5%hl5aUhOhVv|8*2-__i? zVO#bZ`^aaJaUG5o4=Olohuz+d?mICd4-;Q=HYV?W5z!vfH+wW+>jk^=Rc%#jM3$nx z3|>{qD=rBQjB26`BxX^b%(Gub_UDR_Mr87yjK3jKS-OP9#jHd*L?D(<(P9Eo7xp;? zq86dDTH?_JovzBYt+KfiYC4$(^zE>IT;InzRKVI7O9Gx@9`uGuUOCIuL?WI-?zrdz5vAhrL7+ z#$5{1Nj7psc6Lo~^=AePPw&zkJaHW2n8f$?HyUM>rahl83*B4+6%exV9{qP)kNmxN zmsk9MXO5`R)*ERyM&5+u^VnNBENpWkR>khN*j-a1~O^3 zxesYe2+jw-4X}1;1czO%>LGa#U7pAzD@&QtK{ofzEp(EM>|EC*VpJiW9;t#j#+w3R zp1ivc-MEisP{|E3h-vqvx5#z)?YPtt`oxT%c+^_3)j~~7M!&p27{P1Yau}t}q zXv?O>hBW@=a?At?!VuBMPrd&J&^BaNMjZPBv8)aEQ+yWa7(vjhTYZ$N_6;CCG$Qv6 z;6v~esQLzIYwBEI{swsZmQpu7gZZ_ztq)n>QqCP&|SDx@O$wXcRLyIoK6^s7g>>z{`w4!Lun@oe>tciY{Cz~~gsL!D!>GjCE6NT)bT zXN<+|*vqCRoqE)w`6j8UDll(Go4otR>a)}fpM}`hL!MhVJ zTa4IHQ+t!pX*=_LByNPes+3gNYHRgi|o=qkM+mfpL&j%w!O(vMnB%hmYbYa0`{a?C2dXU&2KAouFE6FwvlS zDr8tKaF}F<7InpPstw*>Kiez4+r?0oAS&m~6b`-*8UF#KZN6o4C7qMu%o96^+*2rQ5UheigRj?@2Yj+UQi5Qp5;SJ^luW-MNk+(NDWa zk83(L2sFMI`rce zB1nzjgOIONzmBqYE3U&P=VNuxFcP!PEI=XeIU%AufuS%lx3cPC_RIy21)t`T{MXF` z_7BVO@cn0v8#+Cf(@~<2dr&3ALblCEAzJ!8uXA^K|mVO}IfP_P3 zLqWXFy7R(1-E;L(_%p2qqfqREL7RMTl;hc{G%!hVR;m}e91cQ zh9T|SFb{^SU{wq`c!uFpOfC%ini&HspFbiPuw_$XeVK+7@!KU(Z7&Nr-K_5$r1jry z-vaYdqRuQ?rj&rVT2?t~cq(9s(d9B%;5UF<0UmkP2{~>rd^lH%M#y)Saz0UHstNJ1 zWWT9bgT6y~bV)aDI}l`BJ0%Azh}F3}>9+;yt>ykxPq7dT*BQZS7d~pk-G7HjT(}Bd zW%szftEoMoJCx{S@mf4~|wWcr#`F#h#p zgZ#eQzHG~bYJ=4Mc>*>;@ljiXPx&6!oADrOofr~xEV6fTSE+%#S7@87AlGU}H@D1- zJxD03BGfm^rbJ>vT55y_4$uWk+{>v6YXHA+Rxg9(#KcDOh4}%=iNtsB$9IwwhOZ}F zgF$klp>ZIkByeft*MGut`iGlj{x*05j&}0!bcf$Y9c;NdAWoc+1JBSl`GN) zaI~}M-HWndSw@|yw3dsjC){0H%k{P=Tm$at<^;cb^~AsJ{~#&QR9~Oz`pMd^!e*-h zlv65s<~zB0czg!XT=&bL#%^r(IV;u1 zXRCa1J@#(py+P>lsI(V6O>kx+=BMJ<)oPIyQr@2C%3S#|=Y*%{+g9(+G`JRqxzCS| zYn?r6uy`%a)4N{c>Wj)>6YsR-{(MggRxo~!TTy{Cv!@}*5S#08`9yNHbtucTjzT8m zGbG);wIQ2lw=)QCQrXbe$BKQU5Z5!nMi0^cTELze< zM8(E!f9b!XRBrbMk>71SDA-(Jek}0fRHc--rEAu=_Qx4v%1^|3zUuOKtr~SnZd=Q9 z%z3W4Qtij{YmY0Il$>U;!k_v%YMc=HvE)jBvyAN(>)ccGu&CBk?f#>Ql=ow&PAS-5 zv`||kXXIe?4`xJ8R`G{b5gn8tUT2 zm_bFb{6%RUxQp{$&x$uD&&7rln4E`0KN@;`v~}1PfJ$|aOe;KaES2_@NF2N z4mfu7DD%-H$C#O!j~_pF;^aBjlPoMJIoZyhKF7<&&&SKf!*fwcO7x%zoId5>#N5BdAt?zw2dJj-|>wC>Ha{!;q_pRUlXgvpH-}_!X@d|LJ4*+17 z{C-w|)6a)3;vO(MLx29g8M)DmKNU({n*J5Qf2M4HcKsFLC-$-W|A)P|fU0ZB7DYD% z2pT-N1$TFc;O-8=-Q5Wm+?@cy9ReE(!QI{6Ay{yiybb5{eSL1HyKj&2{{Q2T@pi4X zYVE37wMu5qnsb(InU&@aF8iE`T6OaYKu z0xxgBeLPo|=pPt}<_18T0RYej+Q3woC>je-g zTE_s-X*vsk1W;+JZRZBX^P~QFa%`33*7FV56Beb73*%>9zJtd1y zuv?u(i}zgqujsyjy+7omJ|CTI6wWGTX^M{aTGZ81a=cT);@LL>4w%m)e6VOZJ>5HY zJls9%9l1{h{s3W&tRE=j3_5ww`2bT~x;p<3@3U{Zs8R+(7VvPg=Nf$W0z`5FUTT!O z3_!8+;sU}$@PCQEN=RUM0xzIEUjV#Kpa$@a7qCg0Y8H(EFg4(%j;8RCVq%i#59-La zm&hyF0r1!2#mJeNM}DtoVFJ~g*AY%Isl-+4S-g2!)&-S z9Bf52DRI8yqi?8;rQL0EnhPzO-KGN#8G!OkewXq3C?s$!$sT z5I^6^W!#U(XN{ei_8iVH-Dn)%!7KJpZX9J9!8SGStWV}+d78j^?tn54r6T|yI_D*~ zn^kz_2LNEYs+g&mVOMy09UXG|?9K=9&uRY+0V%I05?|5@yXov=+8|v}aU+u@@VDf? zWB|DURF^N!LQNf@0IFQj4-y{$>G|^ZPae5#V7hHDen>?CY!HI6`~aZIw#$r*1Bi}X z(WmpMhN)?iTm19Cyr4s|8K?s8h|e5?E?W?pXgNH}aSd!9 zS7cKk-`@S4mPunO+uk3&hn|(viX$ONnt{A$eOqgDUc_tmONq#R# z@RF@jr$1<<(3k(B-v%#)@5T53KK^eB{NEDzcO~!&#M?3>0l*-@AOMgM;2;|k6a*Xq z_6hUwMNbUZgOhd5=FCtE+Pca z%kpOTJYKOKU6ZI@#!c24D%VB?-qxe72j@~*`tqkmDP^A=l|wNSz0HL|h93)G5OH)h zo8^u!1PJmJ6SQR5t1i>B79V;|T<%nG<3w<)f-@931~5m=v!mL?gv#je&8Q)r>C(~S zBt%hjExu}1@_zW5SB9b<^;OKE{6n!$O`ql$^Rd9#8R$dbQ?v*{)1ZH1K3&PNNZ+n& z{MN|O82tiZ4KH_LdJB=EcaL7ZIi$T6Ppz|6l=JO!)wdmZKMeG+@iD;hf~%Hwp_e_z zOBv|_;!7r54Xl;nelih=mw7#{zjV}zi&)&jn$wB~oT+fxf~$_i4;)l*|K5u{o>o>N za}ax&!t-d(`wIXcZTjK-V)+Ub@leMKiX<{Zq)(n?V&*cxcveVf0h*t@46ch2*WHk` z%TF!53XLd%T1ttcNbc8Q5`{x(`Nbp&Wgq#9)ujC0X{HQHjr=z=U|vgA7AluGzxK?m zCue!rx#>3e^@xRK4YpU;l%p0wdxV#^boyOPUab?gEaD`83E(8UN6xo%ena~3XfMS< z$g?$a7{UrY68jKNvWT?cVnc@`S(bD%)ajqRkSObu?TLQ3r>L1T_y^EjVNqn8&r*db zdtKk{>3;W8jBPmoV3O4BiJ719fva8jFnFd?+O?*xN?B4hF2Bzx)BPL4tWQ6vsE|8N zQMdPzs@Tb+uigwD-HN8pFV4iTo{Fm{lOw8y`=b~<27F4%e5%R(1&D47vSwN^t{F5> znxrkzlCDer^KX1Fb?YItdeTJs-@E>Apfwx4`yZh}bA8xRF zq_Aj=s^b1?J@`FQXQc#>?lpd`-+pH@-$F`Iv`{RxH=joBn3PR&CAmyl;7NdSqtz4| z6x6H%$`Rt9?@YWI0i#_Z0zv`_d~Xs33ny#A@i=!XPRuUJUCQBO=cas!P+>Q=H&i*a zY7HwYGu!+}bsxHZ+@SsKm@|fd-PVQTcW| zji!Z4hwd5UtBu%kk5Q{GAEIjOlhlvJXn*9J^J2J|oX0X-t&}|%)-lk%FEurNlK32H z{z1BfF$#nn!_=q6MOv=q;wJvrn&iI#nEsdt2l}d*TV@9Jq$xeq)o*L_)n9Rc*O$Ds zR*OEc#q2ILkA)j9No@k7^_z0C{v}C-OkeA7$trQDu0%CBHiXT6<$L{oK)`oUzNOZ2q7sHI+-5h8mrOu9*$apvSSa zNfk3B^%Wh(an;Ic{OZZ#8NZ?!*#~|7(2rzusIzIQ>d*^Af>Azg6Ly&tyFvCO%AH^SQKCY9uuE$id9TSwS9d20Z8C{fWsI0+` z`4j~V$qmCZ2KKxn6fT&oB=YOW1oYyisr;n6C{=|fToDo}dg zae_0Nn%cgO!3^snB42Fj|2d7~=^RK5gy>=xHG2Q9{=V;~0AY0+)b604U#6C~glK55 z)cve_83Nx5Jr(MWYL4wDHCk_lQw9REr zhcxNl@W)mI_FJ?Ioi6~VCk!cmsD*JSK@&|Heo~}4vRE$1&I7{DQs!2xmP^qtItrBO zWNv%1M?p&Nng^a+sC}rY3}h{9$MaMe)O_1e+@o=r38!aEPV%nvp#S*B>+@%kPgC#o zwY8r>yNhxS^xhItVJ9dmHdv8Vrm6X@fS1x#MV6q zEATKv0E~7JWXn(>q~n>d=Q(FnE6$`|hY6Hhl(8D65T`DD9v2vczs#)Bl%_)EhEG|oG3sjg}@o!0A-cC4hcZ(gB7 zKEI{cvBIYK?fP{{zx&N}XlYXpZ~lw{Hgdgku6gC_J2q;pK4Ep;?FMP16Ho)X`Ib#a zFCP@@V1G|zc2P!6uo)LNu^!iwaelS>bMesLza@Ux?9mqkf~5Po^eTpA zK%MBdtxV^TobTKV%yX}Vw|V~8j_uEXZrZH|hh1~O>lZ=2Nzdm}PDzduB zUoFGkdwd%yIGTSTvml~dh>zl>Ya=fBM?F5mxp38DXM8fOpAD?V6wSzx-)vYg+cQ_H z8ph9usD9LJC2lb+OUeg`7q9FZIa7pCYv2eLG4^|!v)tzNvW$33(#!TS+t#JqK56kXU8I1_|0YB^#i-h+qpcw z-lE+dqWXE(B5D>?$Ph2<_JyKZnj?q2Ba%dtJCz;AMl?lMOiM|n$xM43hWX6ma|F|T z8et^EK#L*yd2?GTp-nM)$Ed5_BAK@wCU%xiy3?sat&w~+)5K|IF$-x-*#*jE%Nw!VT?4XFrLvpxc3Y7n>RR?#EYm?FS1KTe^|GvcFht1wz`DhJi!anjmgye}EZEZR_3=FvN zpze;1b$h#S-~LAql$7deJ{ZV?W`7q>o!0m-5k%G!;5A`WqwHVpUw)Y?6SPP?KKStq zpy$@Xt2k7pUG;S3`Q1cZGh+1h&7Sg9ZXsF#3m=N-6AqBuz2|S}RxO^JVh}9`o$;IHU3342?i9$E7^gBWxv2@&Y%clSTg(-$I(wmTws@0*IUV%#+7o^(#Tqcv2YYRmNJ z-*<6>kD;h=4vGKe@)v+)W`mnNY1;0sOYMv$kxxhFhQzXm??$@#ijn+6VWQN}+^Pa% z)PsfZWd$PBjueUOHJP#28DPK#w|GEV{}w$YYz8H`wx( zyt6(e{0yGjyk@L5PZ{+?mCOt`NzpJR>_|;5Ws}fCHcK#pHID4Kj0XKA2RD52G@y*G zY3T5$&vLlT>lF~}lmG>wDs-`WC8Qf^Io`ocntZ8qSM|(Yo{L3N_DVtH)T~FEWo_t9 z!;L`*a)g7n*(MAtB3G>N8}*H-NoPX)$uEJF2}r|5?67r|qwsN&RLuu7hFJ4+L7*<$ z2E=sU1=7eg_Fl<})+QQ0SmBvZkCYQ+)n_dX1Kk>#>$kB@O|4Y1oTE5l;mD$}wnBqv z$%6$c+S@)vBRB@zw5zy-tDliYTOx}^3gcrcgBZ4u=N{jqNgF91;}Dmp>(=AU^NDQ~ z8^yp@I>4!S_wMW&d7tH#0Y>t_@|u7Ca{~iSg8B{d1d&pu_cXr%SEmG-WTgJ+zcFYh zZNq*fdcBA2?r))!pjCfslzPC(yI;EUz1UM}e4mf?E)Oc$*-<&NnHQB7<+*W51@Ap# zmU=aQ_6OF!ii@AI2?)OE)nKd47u5~VVc%7D0;yXN!%)= zg#!CJj5`3$2thm;{ghmwrWqxc_Eaf)tToTwbj@(thU-jzWPWgNym>;78>P8jzn*N< z)$JtbXER|EsuWwpW5;u(#kR85xKj%yFbg)>e4GiLK(l@q{YH}^7vd@t%F2Z#NRp(2 za9Nj|$S`+T?O&=7){u2^r^KZtJ+K>8i{oI{&9HD&DLm zpLCU{q4g@M4hFuTRWy~B6Mvm%z;7!3FNaF1c4|VGQ?oLu(#6u50L3cE615lRbrbqh zimBV7_kRB8UMi6VGY`RLzLH|pXGQq2XYMnd$2>H&nF(Q%AS=A?kdQHYKLjK%5kLV@ z1tA#Yfk;4xh!|m}D2fezWUvjM1-JJvau>F6|Rx)5^09(*wC=Dp%ep&eL(p$+I?SgwCApSqemA~Y2t>{?da z+d1b`LgrqUWPC{sU5qES4hjE=H&|X>zE>xuU~fQfuw!a9eK725EiaR8&`b^QdNvBK zN|x!CbuV!9729)me)W<+2sQl#76a*VS{2HMnQ?agt{Jq7&B=U#t?DGAQm*~4l{XA(rE4_~uaK;q?TAb)faed&4lyU2<+JlD z4)TV0QMqm#`fdlVt9MQHcn?O=#Iu%#Y@9hwmt+w?x|$GDJLvaBz#6|Mb)#SVVi1c@ zEev2SuUx1!9xKU?T<7N>J79t>cexZD9xAd$RX}wM8RI7BQ3@V-g;ngE&#zq6H2?es z*v1KzUYXS#Tlt?{kCM@ZUaB?hN&oIjgc5Y!@fG{x<&I_T-J*ovIXL|&R8h4StyRLF z7=G=QHEwZ$4}JMP*Ig<*9JDs7GSvFwl^c9&S+4hdR@6No!9W$R=pmElEAruZ!FALw zd_>>w492EhU_v*IL-?{g$Iziax)=q9!Cuy&Ji}B$5NjK^0uC5_#>e<)ZC2VFp z)WK_NLN$f-Rq(YAs2j@`4U}Yr2~JK;5G-URW6LoTr#PFU^aiz9TC{==V?skH`tNU6 zljXidWStwPwanaJ)NJRk`d7oHzBgq6Ycduw)vp<)mLlzdf&FGJhSe&S~$iNPrigZOcV4;iAMeaWnP#hd%N~mrJ|rTXyes z)M46!Nwm1;GXNJeHE-Hh;FxAlkX&Dy@9RwY6VFT<>d0-pylf7CBF}O%o1bM$KJx4s z*VS;^f_W}D!L;esW?tChIZdNPl2h$jq*nSs3EBgNiQQrKg^P-lne+GBG%nQAes3pS zk>8rHvt7+y$w`QYF z=3%YyIm=3xY-2=boi?Bnm}8F66Wpz~Detb_1F<0^t+6-IALuhz!`&i1lO$#Wqe~c~ zG2F@SDu)q>)h2M{mK97tbkOd_HSZ{#SCNc86C!k;h@D8YdLnY)BKISDfc{j)swvmn zSgfti=QTr(c=w|hY3T&pShvv5Iiq2Kq|9J-X(Yd__y3tkNz^&FZ-jSg^xtAE`r&xe zKd3G9K*#dPc~$YRA3PwC66T@dC&qsV`LE-7_AP_e^U8aa-QQb#NGCW!<`Lul{0R!m zBD~b79jp_pZDX9rKHOzIgGbUo@(30{o8j%4JBmI$W*+J=HPQ_dkI-Z#bQd1rEt?+t{TTkI`4Bnrk zies(L5}Z4`yltl_Zs`>9>p+#z^z0oO-7SB1*;Fn}ucCkQD0K4S7hs@31UUFyTYLC4 zsp*EbYPjrtrBOIpD!mA!C7Z#!)ApT?``^|ZF178J?kYHJy#E0}O&tDSov*cM;Rk>g#hLFM$0OtS=P2LH*8 zh$*L5zyg|KDTeZdzS~uIEBU?GpPN%hp&5;q4}Xd31ploz59Wp;av?XcB-Ym?W`Mzh z?ak`Z)am?>YfK#6)K&HyN+QnSF>uz2kcnvE_zlOK<&wzloX1u23*9%b>Me5JCD}-; zbZPW%9xy^uv@8oa`a|>*n_-EmW%5%G+OQ}%OL^9&04PzJhx~zPo9z<3N8t}sGwqRE z<|Y+bU$=6T`c`NI(-a#-y)(l{tCX*OPW(Q-!my`0J5)=tMU97!babW`{xAXWz@aS(zq1A5Ue@$%Sb6u1$ZtJpq zpt!P!XlFDr7ii{_@6W%3Lrq_aLvHDn8(J!1ewe6>$+B!+f9XX*GZLF^spXgT=-W5- zF}xeNFb&Jc2U_!2aN%y1z2HpO>;mcFnia6x70F9aGSE|VPTybJH|=dE*uL5slyU9R zZqPg<9*?94ZLFyPR{K6JDiEyb-IQ%7#?M>+TswOL6_uuZ2ilUoHPG?U`u*SNjFv z>sE5Tf*UvS{0Zc}*2ugs8}*(sZ8>0GbxuA0K6JhO_a3ug!=GkaKnJ#s@o~Q;`JaRU zMYYexX`r2V-1ije#JpJbH+JQWgw2vs&iRLkdupsgh`4SbX*&Osql8v&mG-z>W9@|Q z_WXN6$ixvs?oXsw7W{MsUakk52p@}UpH6@xaD&9PyX%Sp^~a9nUw|s(s_YS;&Kl47 zWc@vp>D6FCd?YLdJ+5Mt6~>-NnE0o|pSVs<3oac+yA3`^4CS1@@a33#Zi_ayRS3TT zz+(5G_0h&GNa`2gsZ=h?IIHn!V|xs#vr%z)z4z9W$b(HRXYmgFJz3nw=sC|!LW_kk zve{!xw;JAiEGsnCJQM6tHSHW;o1%GlsoYTN(NG__9%=+=eqxnsXlAXEGM5+2pjp`6`dUXBRB{#(q1N0txLiK3>P4 zsJT^(1tvlr(h`@9V-W*cb4P^X8mE=RH$V@B^}*t~##_FndW;AgViQZl6tIEH+~&NU ztQihT2inbjy~>RjbL$z-$MxmrgQfO*FK0m=t@U8)BVw6&(`g=?j>hKZe>-&1sA=b} ztT=2mCTgAII>G3PB>HnU*8ydxTT|{V<4d1+_z}UK@1D{xK=Pw>IX=o%O)&gY1W(@) zy)i8{r`s`1qvKM|`RRn9)QJv0JqG@cVAkco8gwbzWj#WkwOG zlztpCF6+Y2Nb!A|o=kRz5i|byS!mPkY>;2Y zJr8@Ct?ApnTXB9;w+XS04)e8q|8qS252imWUwh(ZiD)iQVmLz&8Uo|t6q?*!l>i!L z8?^B(mCKsGPyrGy+fK(x`;(EuLlf2@0*@ax{7R3U>GU{rf8vG*W4>Zm`qrlOlj+Ar zP<-ViNjS_&%Z#o{(DP-7FL5YJvYFBMON|zKnLjC?N}2e5Jh$e)R+3vAGsmh}ndH+d zm3F~l?ym>+B1nmuWYCcy7BX_`r3VomhG!SAwA4cctrK#kIjKEs(&Ygz|0P0N-Xs+L z!FxgW$Knw+JtcFQndy%FYt?3qY#s zapc>wy!IXO=drov{yD`FGiF0`33E(3l!+B`06+ASy8Edy=tLpt)*utm(>LhK^-=Dk z6xZN^mzkgeB=3HmXE_ZpOTCETn^JWbTJHe0ffIKmsr@R2x@H}*$Bzdv=J+zyhV>9+ z^a^C9-lsmt@pq(nc2xvg15UJ8R3jh!E<^FMk|ND_C(C1+Wq zhK3`xSRF{~R>A6|&m4g?{rx*T{J2jID`=~HiWtIXYz_RHo{@9QNNvsciG+n;{mb1s6 zf!$)c<7d8fcg!dSh|UKhZbKqsyUH1Wbyhol zGDpY^$>_&*RELhDwiys5pM?a;t>!cAGScG-h@@8yn%r83Gc}(JTx8)MeRI@gl)Amm z+gS90i`lhN)zxHsM}##(fCry=LI)RbFMygRUJO;3JEV5jV|rZB7#qJL~zY}Y!n4)t;RIW_lucczpWdgxh!Wp4+zDI4IsHma+te9J}*UAM!CB0C*RKX1iYTc>?!iabQVv3=|hE=sD+BSCA9?6D^g?pdx6QE-H! z$2iRCefREY>}|wpdV@r3d>8V4@=gA;r7+4m3HDtyN|G0E$=fx*#OC4%bo%5Ri{Y!_ zt%cY!bDJ%)71DFnO7U2^lDc(AmWmp)=2QY$5%yG@u6&MhqRcr%NMo8?$6)SgQK4`>9GJ zj2DMnGlc*nH<`Ra48iKijIc?LNFED^ckr|sPE^HI6gLLWOKkWw_VwsNg! z3iWY2M14_|*y9_eAB}?s)vR`n^qZrhvUOuXlmK~a$crdVuZrrb?X z4t?_d?t?PI_GtZJ_p|7lfEc#BxXq}-yV~BFnsN1pD#^`!#Db|t)4*J}wwT$W5QnvH zi0n93sxJz><}rma2I+*vW2=nO%{c8VCbHXbNMZG2S;QGLOC*uiwo*;fA}8mNm}+c; zawd#T)mKTiuv?>tfsq+Y>(qSUDeiF5<*?f?K#kRR6E=qLM^1PNxt8_w6oxK`MpMQn z5l2_lN$y|^pVHZfwQ^1dSxuRVPSfS*No(6n^EdmY z->@pk8P(0rZ1uGd1-bm8xkL~0UZ@9oKrQUl zfPN^qM%bpBlR?`h;pFOGf&J4wzG#h`Kx5{chkeepaeendn?~`&jUS(n*vOcMbH39I z2wT2qH-Rc$wE~^DxDV4rH=GN-oZiD~u|LSId3bHm>e<6iO>9P+WRke(zfJrhD0BMC zc;I9?&vT^gn%2b^gQ4#-w%XW)06O@`+t`(R2jhoIu7Et_U3sU7ru{duiBRLnd_8Q= zQLliu%Ua44-RzWlM6l;Rde_lZ_MZzq-ead9t zTM4^%96ZX=a*bof0vVA)K7QM}*iw^~z)KGow)b!xKb0T!5Mqif^$>F=jFk|Kpy(uy zrnHiQ)bus$8&N!a(zFR;6?jG zgPZ!*XXZXfnO$vg!0||#_qaVm4bJRCDMXo9w|^L==w777$}hkeyClMh6hE;*r-7!WA2rG9eNIlMZ6Y@- zm$)&)NSNprozhG``6S=u{lwOFr%B>Fky8^bHno{-@{oBsaNk}zID3yjcX_mblS~pj zk>{&aTIGw3_se+x&`^l!e!Z+Nb(iY==t~v-(dtpC{G+v+-0LT=7k)Ulot)r567Qc? z0X<6lhmWFBwS`l)p#2~IlRI@qh|0R~VHHHjWmf0tMgCE6`He)Q{hEzH^ZqGU;HFIc zuTsu$fd7z-rkotQ8YEU@AF)54YTtVmP!%SZZjq!<8|Qgim9sKgXx~s=Y;1F~qmY#= zESR|p{t%W$rRE4^ZnE__XK~A_(#j9rVTuy6!DsQY-P7izji&DQUNBwr)PQCdAMz5m z`;uH`Z#=G=X89R0%#tliEoztWta0~Hb}F_zGl=*#WHV^9y_|9Gh4+HXDLUWK=I;}t z)+spPGA6OPfmUj5GN0Zso0Q43Omva^TtyVeQ}EYF&?sg`E~u3P&kV|Sk*^ZQzKsZV zOfI*x`Hv|jR5N_+bFK11{j54KsS~GoaG%6k$`%tPVdT2&H5t?|(;IObWOJ`FeyN^% z1uP^o%|(sk85E-TL)f?_gg%;?O%nSuqg#U{Ws`&%JTj_7yU?sWYE*}|qs}Nrx`QFF zT_eL5CshFTkggH~_Ys-%MB`@4YFSKeO{)D0Bet~6jTmUr`J&VMk?0%^;bN`+r?R>s zX|-J=AL;5lmZ8T-qhA1jac>h%e(+=&>63<2`4I*ZQW6pbTt z^K$Ldjq@#q(Hy3T_3`O+@^X7QQ~C#i<>kFx{bvYgHBrdw=H?b zYvlW;*t#<2HM-KG#v?Tz!@9YJX>u@*&3YQDKR)1#=Y$-$Bo_UANTF5>^iF3PQHo_` z!T2ik1(<+{79oHFxuk`5+HIUf$<*TXowpRDqAJGx%{Bni8pf4PJ?DC%UhGMi~8Ec zErnhy=m!&Ud+v#r3ouhKPRV?+xdBQVO}M;iZ(1Ko&f&5nFg2MRr5eJt`VrY2MS@2dB!)8Fw@!*l>4Hw2Strs5L zbyCZlp!-3+*Fulml>ym4XS3~Nt?rg4Y#Sx#153X1<-f@zFH7t`2HpVVHjYCqk(_)mW+h-!kOI+2$ZRYY0<*N|C^ zjh|mnc_X2%k)qpFGWmq;3p@OT^a}uYc+RB%cEaFTR>U|A26M@H0ySVJV!%=+z5OS9 z7#^)V^MRrUS)&hosm{Q`FF?J3VQ+U(!!a+?E7qi#lZE6;l^AgzMTD1|faJYK7k z6~&V^y@A{{Eq=&(fJ|#~ycp&(RDY{fg-ERq55ety$ec#Vw^8Y*U5X7b*WoU6gSGyC?XM<(j8l`Q`tC4D^Sj6BVJ3LDA^I|FCvyFtVug z>Xu#^q{3>2tJNtT z7#KQ26+<(c&M0<&EU}2N#&w8MONLL(QQwSix4}`phPj=B(pCu6d4jf9>_*j)OvQjn zy;W#8`Y%B!3OWa@21$=B<|~0ekS7)zH@?Pbx&lW-3hC<@O(nCM1yFh&BRU2$9XBJv zu5rF+OxS&C#BX4n;zy>LPU_F*b&sO;8ZjJ}=?42#3u_q`h8|VVsZF~q+$(bbcfe3M z=J*jOP0@UfCCO-QQ21VX#pII}Qywoxc-N8uF=BC_zvVBX0 zWdIDhp-Xx&>?q`l67%PUNU4Pjq#cQdV}SP2Kn(U7pva3Bvn$(BraHwtz0OI%AI`=; z(bdD$?RwD`5T^+mVo991lqzIFY~vz_%%7}@U`=E{cdPdon{)M5mV<6B_Xv%eH z+!{FD03DaS=7Qobb*Dmv9NI#c<0(?YOUK$|tvy*E)EU)}#hU3`L-Wbh!q78Vc`>X; zuXg^ysGC?(w12A3%=(HA7>~Y?M5`-j0LPP5%00mbei~VYkfh}ud6+959(cF}5{tB~ ztj?GjYd!%J#d!G5G+-x)>@tNcP(5Q9A9GD8J49n7&lMZdst0YVR^osmR?g}IsD z^Yo>r1iP9VJ9d=Smg{bYRL8f|&alBqp6bzLrK+z7&x1~q4{bKGG7Dp_6?96A-o!F% zJ>|xaN@&$3I2VByGq0Y(CyPl*Un#(-dHjr$&de+#XwuWLQ+D2IRlORt`YQf)$-O`m z)9_;+rf`q145PrA=HUo}kr_;y=&%@;cdpTxSb&a8lgvmt5nfAgPR8<5NQt$sh)IHV zoh$?`e8ic9BROU z8)yyEVVP`9y*Bq55Ex&1v)tp(Rn_AHPPctW{306zZVpGrew1Q^6 z!EVqU+%O%`SZ_V_{iMG$f2P*s!?U} zh6jAEXx+Q!WBX!<5&x~F*rTg3B1pV<>k(@a8j?{pF?DIz;ppoAR%Wf$(hczu38qO{ zQNQ~{anImYo}g5xuA&U)7?E4wazUsKVPxq(*K&*;S_(UAP;A@3zvr`E81Wppd)OfSwMLdv_J9bB=TD zC@e}h%jEhC*s~`p_O;wfb&q+KYBkZZS_V_hGoH|HX5uqQW# zb4Le`g{WyvYC(4Rw3T@|`Dm)>F*CQ%C5 z!ogKRI#lv=(Nb1n+3C#LH4Y3P30!7_F@pBUYO%;oYSPy)tZpt^sU;>S_q`r|KR#2& z!OrZ!zWmbAHi|q~RI`&yzW&|F>q`&zfGakwVoRwVZt>lX|NQRLu>AEO>i<}6%b|;Z zGj#H&P!aif{U~*A``-svelKzq_`JoDSbefx#+7gzz&Wp;hT8wvS7|T){xo#-QTH!^ z!rB^N^>p~XhDCt$zrEgXfG^RB?)Zv62LcU*nrNYKg5roKW`PpP2^7ttmm1l>P(*6$ zj4-;ibwH(NjQqUkqUN%_qtuR`F0P<-K2d8?O1$vJo!Sg1jwiKQkHCR2Zs1%Pjs54I z%`ZUuR$03#upzapi?PaRWmZVoD0Pe6<=c(Y!v3rSIox~VkQLKHUS&iYh_ehR#%47h zX3zpT9;R@W?v-y8#L!E@66#VxlAuXF%`B>($VgpNY=$0Gg+5U!$pfQ@6d zZ6|#6ik@o%Tc#)`*AqLq?_{n|DtT6*1Kv?t=xp^YYD44GZv>ee&$jYEu2jM(EvLKV zs>so+{lV*`lw|5wCVsJ{&stj_V!af@5N2ThnzY(+mCgVkB`h4dl32(^UUO4rXEz?I z#-}EXtZvxJSu-kjO>LFO14F0dU1MwvY~l(RPuwBvvhSAtfR0j?U>&_v0+d6eCHeU3 zz5Pl~;8qx?O?*RJx2ShYsUwd<*JRHS4PwBD!?I!8&$jb7TT5_p?pi?qcN)&Xs&WfF;Lw+`RxMPFa z*6USTn^3LcXAFaX-m~p|FqB=xn}$OzrVB9GRxy1Gw=o%t<10s1tKRyJ4oyV6p@jnP z5V_m_z*l-(&yYIei2_IZ=xY{Y3CAii1{!?lCNW&H`ywQ~(G(dzMt!0PTCUSVt*r-= z|Hzq$EFMB|Q-6;Zu|}74znj@@!}R;F#QA7j+W2C`?n^* z<*=XCO=bS?0Oo09$OP2#4H^<0%$x|!S2;xq&c7uo$E9{? zMB`tksyNWvk)aNLi0FTi$P7vCuFf-Kmt>s=zW?vUo0C5V*R{YGDl!oto?yAYgLiP_ zT(qWTAA5IM(R68>7Wg_Q*aI4OHdspR$xKa$GeF~z%tk}$Qb>4AO{~gMj8IQWAf@Ke zB9>mRZa!5YHiJG!DJ#=`ML08C&;7=;IBWT*`U^CTCmP!2P~9iHz01W)#g_JEe1D_Z zc{C#_@2*kxKe$zdP(H8LxVlKlwvz zvrG=yJdH7ea^IIXBy5a5U&4Cws;X}%64^-}ZNmoa#at^7yIMB6i{75$Bu9vZGL4hB zi5PN}jd{RcSh%E|7W=vw1P>GDk5D@nPh5W4GCxpHsw$V!EUu}gy3OTnGA9pA{ibK3 z`8sgO1GMAY@=305F)mOhqf05fES5LdkS!M;046{3_G5`rd6d6sp0!TJCEfeEbBlm{ z_&z3`_MSxSkax1kIu+MHbHFw5%=iRa+a<@DRLgGmX*eE14^chF7wJ zF-r;18ETruNCfUkfw3%*{CNFhk2a--fr_FXnc2m~kZGa86!}a?D)sF@Fo8XVj>J%h zG`oA^t9Fvdw6yLWYFNSk_$2NKQQ~1wQK+2$K7JepZ3oq9Fje#Iw~worgkkBgDhABx zMonLDK?%T@%jQ}}`$s@SW$8jepi{T|+80>JSalH>ZdOyne597^nE1Aboc)>#m28*U zk@~y-x+0;C=F*oPiFah`6TQu{R92{1$FI2(Zx`Ys3k~xTm%t?7!!&gZfKx!T)y}Yw zH^S+mH{y~3A-T!A(nXgw>sOZJ8R-%NE0od<7}=TSi!RjT&kx??%|&1hf1OCtY^7jx zNCBp;z`;hV=Ayg6L|(@y@AlT~^;*Nd;?!={Xl!sWPGC{;Ys@X3CqWiAX_vNo5gHA_YX_;HfIU~ z#J7zcVnA}rU83%_I>@FpJbBIW7H2pqd?D;V9>~{&%p?(K?S6t8; zt+pVf3h_5~ar`2QH1H5Z{-lZ_uz9Wl8fD@|g6*5t_mM>NujS`&e5#==YU@|xB#!dr zrx`KdOd3F+G6v~#1tI*mCc}3=_DNBnd$u0T6P3vf8U_uVTe#QqEM!{Cu@$B(4HxfB z{mnsG9`~J@G-}ob|`VHWpAxX==LyeCu-^~Rd z$Wndd@9#9-`plqg!7W@3+F}aqu8w0$alj}t!9(3mNZ>q-njKY0*U_y^gW*ep@*+|# zq>+&BawqED0HivCrG>{6Vp<4;kFD#Ygg_}+xwV{L`?&%XVjr@S8K`~ingRn3?T8cn z$^)K&u2=OY=le`jl|#VJG% z%@$=vV$oQ_yyIZ{ungKZLrmgOBb}wU83FDMXJzZ+b4wBU^jh(&^4{%}N+qxUjhQNm zbXk^BNxj5R^q6f2E#T}!UBjZ)#us~$#7Wy(5*C^*!t&dxTdea6=OR|iuZtQPu%y|6 z*}=mLvy2B?Q+Cy7Q+t@Z#A%VlxND48_pJvSy*C_Q%AxUR;IE({835X39DMv^ZBt{bmmcbaVygI3lT;{-~J%sC}+HUAV9BW zHxO-t{k=(wCj+gEn*E_&`ij<|t}9@Yb>Y#n_HNelvSRi?r*fuIuiT|o^T?<6znoVO zbfggB?#BdhKr17^l&~_Lo>^!ot0Hdx7Wyxd)X=s<{jkMbEeio>s#-LLNL8bz--@Nf zIiL~EO72~Mn_x#Subr>4y^L4x6VHMo=%Rk0JJ!=eM$by7JXbJr=q>&YxT*xkxXEIi zNuV$m#|0_A9F)?|GjO$(N6b^Q&?3_AE@iqte5up`P zu~zBm=~r!E+E-FXGU7K3+xTS^29G2MZ5Qx^`n2T_bzqA9jr-^`U$^jlpz7P8kN4VJM$$v`JEX#=nBueZ zN%2w+Z&8d$My#!C{62rQ!0f5iOjKG@PqpmH5g(<7N3;H5!67jAc_kSlW;>2>MXFpX z2A=doW@Zrj(f}CloETL=P;VnRE8{>6wL{_>y`i&QKyYecwV`VCb`u2|*;IUav3T>H z)vmg`D%@xL;*kVGR8BcoLmj&rg^5O;;~eO?@K9MkYZ4)%P%+f6$RpuX;`-3q- z#u4*}MYo`2DcB&vS|l$5X1=?^10%gHjCml)QotH-Wth1G;g{=Gv!VP1lx17bzeJl~ zJb;0tw+)Iz6TiZ%d*mJd3Etn6f*9@)5yz~1pAci3VRNFOL}ChQd!nEKVTxd0X%GD- zU#hGU$tk#&*hP^T;*4TV90h#*^RPonJ8Bi@yZl335@D#lt9#znOByXW{w3>&JbD%h zVS52ul`RvWZqa~-sB82l{@g#?`s0`OfY&8*ap%*LQfp~+m(<>2cp#v}3lNfbJ1oT^0C?>UxLVPXg?2hw)l4NdRlbqvmu)75S8iU7m})WK=nqeNF?^9Y! z?vHEFG>V`Uax%_zCJ-1UeSULyZ8wi!!lg=wI}$hrM^rpeabBylYtX1OP<6jvHd0i^ zQwlcXKDI5vb(cWBS}~$b7gy>h#zw&kw^wq^rRg6-RP^Y*dP#vw>ON z?Sf7y#Oco0p+P%$iILq+*6rRUaZED=Si6t^P2){rh!C(t>j!4^mb|{`; z91&y17UgU+sJn9NAHnOEm8!GRQw`~y4oxqsd4-h#OcX6ROi4IuJ|JPmt3;9Z27NXE zJ69PGn|zrDQ?-w{M$8AJ>^fI?9v9ziaHI0ZgE#yv?<5?bJJvS8+>dEfEfWON|BJo1 zjH+u{7DgBD?(R--hu|LE-QC@SEZkj!1`h=H;O+!>_uwu`2#~kP-r0Mf^WF2l`@Q%6 zyfN^C?rN#-*|Vy;R=1|@ZPntDe)UY7VX;S-?3sV+$`eE5!(Zq$GUJN@s4EWx z1f^l2!&lSu#@lsGVW-LeW#)e^LmB!}ODrPb6qVA#{!_VuMm2+GYWe8=zRh)`w@!QI zZ^Rs8uH2?bf(f_KA-OPqqo8)7<=ubC3Zf-iH*zO;^YpKy1dJ{k3&KMJSV)p!2`Z5} zoqht6!zOD%pUiS`+JO|~yNQ)9k;KjKH{45ROA9B|q2TDoBo(oex`pYSrSvSMCD=a_ z6R4tRjjSN!E9GGKgYd$2qy?qvxmIe8>QzF~)X*dKFrh>+N9r#iMf4D7z`+9JRs*;} z5)LYv9%2KqfQ9ut0%UWg``si;W+01SAyYF){i`{eJzVB^{ETvu{*WRM32G)4=s^4) z6#&{&0naW^h6|y4N%F&*2wQAQVuau@g{t0ZspRYVKr`-wJ)c5=dGs_butkh3z{YL+ zUK^=RW3K(olYHokN|3S^a2HCB0!{$V8B|-N1RGs7G$QA{9<5jSQPBl88cyQ_Nw|2# z+?$&y7i%?a)U$n#&*|By-Der)E>T5JnT(;#{QASSk1~os+`5+~TE`sAhd1bO+d?ZD zHGE_;n(;NX6onBo5l=+WN`#rV-S6{=Z$zplFZ5J>`4D(MrEiOWPbP~*TfWkKBfGmf zeV&I*a~tQh0cXqOQZ^XpF^gUdm&v5YKS>zT0970&Wx$w`*PksbaZA&7u5+`1l8F_m zpv~xI!%GNcwQ=!4%;vkt>i9VD_A3spT5>tg*A@iSW_ngCmaC4@xWU8eRTJgtk4f`(@EXo0*n$_caH~OF6g^9 zz0a_Cl&-65OzUyx*MGu%e5cfnOWnACsfUm~$|?t~fAgq$nXzE%j*yCa9Ej|wb3+Cf z9aDR$CRZCz=rZ&E6qAXJU_QdaW!IM1nh}poT7r`mR@NET%p?+_XRjGt-v@iTQjR-Z+;yN{dAO4kfF56{d|0D!QSCN{}ug4ocdUTgPmY_mjMqj6EZa6hBBA@1pGxXlg~22{^k~9g*9`j$Q`wk98o_lv+b^ zn2rq*F@+=EsqgAunl$Hzc%GKQoH>5q1{Yv*pm>P}G|qbJ#scWI`40zE*>+y;-iT4A zS0RcbQ}%el-Q$M^xoo!-Do{#8o@|HWnRKHn)y6oMgoN#r^(J8USA5ZufwFYJ1=6b} zpT26>JMV6ymZKz39tun^DJ*|1rYzDLn6ice*hqaE1<*=1H}`kE6Y!sx#qT$pP;fA;&f^C3n`Ls zK=Pgfq?BX{<(ccX5<2X*5QW}Zld}>}!RXPaCxEL&pd4W7bn9{B;s@3&bC&TP!@uhe ze<>3&Eay5a*x;4{56F;`O_FwP#eXXpe`WeZ<4`(3Au~nG?*g490c2{%v&CwnB+mFx zLf&t&P4vzBMQMPY0P}?iz;5+9D2$8k(s!6a5w#t#tj7rZ)Jyw8aSU zyaa6|TI)c@0*`EHos1FC`*?|AvN5ddT~K{N2u1%#=rI7Q z`(;!u^{e-W*6w7 zZVCwPEo3vJR`IkHv$w%a@R~bYbmklYoc5^|$j>nW3SF9r$Bv}BVe0HPx|Jl&xSI4` zhOSc-8M8r73!~m@fmAWkI^@AN-&wy?#dVuo2It8T%G?SeZU;5Rm+dSIgHCis8Go76 z3b+hb4^^*HKt?d&V@w_lQ??-{vh1><1*vs(JmdV@b-x_zJ-(GLj+E3wH7@EZ*Jhlm zoJg!@GFk1R+T@L;#Fp+RrVr?xK?Id09ZRY@u5mU@IGihfPc;QLAOt;-`6B^SlcPO( zT$B7$sTvGe5d86({DGfAqq9nl&505chSmof_L(fYY+Ns}OiAiM*xt%|K5u~95uXwO znD)I?xUPq5(R-nQ+Qf>(oFwjMB$owHmO+yGk=LHh7D$32Zb3vuFslT;?JA_@}# zu1hjmCf4cfpJ9=+4^8&Y03mDn*8peC=0zAj*M$Q{ai6lCk1&|oY^qbiH{f#ThcA*P zgJ*Or_p?gqkJm_ZiJ!txPxTl#rz^Px(7qNCdewAk{R9Zv{nr{Kd!ZDAq(u2G^aM-c8#ORhjtsQd9v-(LjL(Q!JOkL8yXTsDpmx9514_zw#%-4v$KfgrV?xm`QhS^vPM zZDPRCbE$XTO8gK=k+RAvj$Vz=hcOxGk{3se30lGTLqysl73{ot zm?<3?8|wL}7tBDjhs|Nkru4a0P*-TmiH)<-PZN6u6?XXe#X8_cI?98`pz=f7kM%#x zZ-0nndSOgYv?#0ZLOV*$NN%y)@4~k$^V=x@Z{)t;qFjnd7dGk+$q$$YQ~}2E|6qnu zhPA`$!`@$5j6@}dIu zuGsN;dAwG&a^#VUGf=W{<2FyUQJmkoyOEFOb#}Fa3@ZeT` z@Te?9^Sc@?8on)1F7|A~z{V@+(<6tm7;UtdzxuL6-BwM$F6OVcYIcAgPJjNs@s|)c zC1uCq1dkUk8TZydQ{})7YGjy&0P8%10|)A>3My)lvBy_?@GYuOo*f-FS{!DY2WW)@ zP#%mt>8XoANEi25su_uB4=^R3x=8Rb9VBd^z=?M%*M6v)H|dCi_vLjLB>xNW6~Cmo$q-zq#*Mwwd`U*aQrx8lApzwEY@RY z6WlQl90ko=c=TrZ4hlIlRqZ zwzhKKO2Q_kHc2U(2Smzu6mhFo=pk%fFDB(Av8Y+U?Y^BNx!eRotr|KY0S-vcyM>~m zhL*)E%o}>0n+4*4NeWrRHAv_EukC05Koe7P3B7^@dk%s_8eJ+{f_wUJ(6p&K&yzg) zzpOGK%?PZ!8vMTsA4H%_t1_f|gaNQ9Hw$pK9VjT7D-2c)6aTdpupRz=Qi1T3E@Wd2 z=$_#4apCln?_dB`@C;aFkj>{Ajbq}~S*tY`86_@_1UDUwmklLCf=T*gcDEy=0X+0p zHA0AsSY|wiMEE#U%eYeTn6R~{)uw#1zwntZ zw6)7}v0{brfxXHXV}zzFnFH5dK;}`EXZ#9Kp|ASHAQVj41>2?o@d|OT!FBazTZqh( z1}yD^@$}8=cMYqP!n75vm=FD z!zET@5F<-yugAygk_?14&)=gH7YRm7 z^HpAM(Y`#Is$HW|XJx7dPhjs~uT z_r_CisR?(vzGNSQbw@+CVj0f|+Xhz>Mnb%o?bk(3Gaa@?pL}W~@)&zwJ8KG^?y z*Wtg!cvC9*72A6!*>}45hwcw^cuZQQe9_Q{-5YJkjze9l$xBC=kZy+<~?tlBAt=Y)_C$u-MEV zfqT*5nP8yJ!+UVhautkyYo%rBT2-0ToWwNNLfmEy%jFMtF{1j!fR zfGYIX@Ja{&px33{8{ps_a^K`u*{Q(+wAoeV zvC30MIMzyX_D_4*ztE_xoD|z55&Z;!j+Bc3>zW>rxA*_wLU+JFTO9lA>2dL&xUZnC zwwKWRPvlR)^S==OYuf+Qryu``@c*W+XG)TPr^*F2*8eBq33LzQOE~xm@P3H{Hh%(g zZ~njuJ^T^B{676zI_PE{P}bk!&x}6-AgZq4$bSL7deI0!R$_6MA|2`Uet( zdlvc)g2?^`|IeYndjALMuLg91ni_BlYV@x@y(ED8)%6n)YkQD;@#W?DS3)%wA?TfZ zn$Uc~fcpCWk0M@vKX3hNRPL`n|ABtt!b^Apxyb$jz5M>gu)k6NT?o`vp}+I~!GF+T zUx4ZXRdDcE$GRTwHefd4{^ApeiG0;eGrEeuiJt?$#{Y)@nk|2^`j3>q=F6YG_?)27#*mw_yb}?XMRKl=>X-C)+?Q>nbuH0T?d+t|8zi z&fiX!>(3YB*L$k{I}J41euF~)oLGMr_A>Ur)BiCVAlyHg*7bLe|1;=cr!8o9{Hn_k z)Q)uQkdfbOBnY4V^-Z2^z{Rh3|DOZk_q2)fQY9#%^Y5z1e}n(huwQh)Q~p1jSHBDV zpZI?`@IM^*9}fHv2mXfx{|g6x`6Pp!k|Dvsp`ZW|0C0#GpJXz?A3n(}O8GsPsHDP) zwNBGlM%(|m#YqUH65XW&T%$Q?$nnNFZcjh#Z|>X_0iK%nb_X4*R-9~+$t)ZYGFm2p zI_%j=(OLi`1I|!r4*V802;OiXH3KFs8zUqsD!dyjR-yy-rW8@Ho9e-Ki#L624#(z0 z4V$Qe8Y~k9O6heGvIVhiGy4&8YS7qQ4)Z?&zPxEj{jt!=d?d(~lIX>-BS{&HKX~#$ zB2ZDL_fiP1yo(Yk?xuL+;AG&JD-L}T4LAlgxeT}*rZovU3)Xz;ba6 z=ck4`F=Q(?sfzfd%~yEmK_@EGW+;P?$7YgI(a$&KhBrwyd2i1-^b&rcIY1s;LZFNj zNg~+JLqaO%Gl?P&;Sf}g0HctK0)jyhC&Lx^P?fT@!LZ-fS|je60>1_ekADQZGcNB% ziOKd*JV|F_(_}rKAYJB93DEEXcSmvNK(guUPVi>?I2t0`i4N)sUH$r9d*{*jhZOi2 z6g)Fi45`EuQX@so3w$tR98i_DH~y4ngs{MLRNDj4(PaH`reql;ek72>l_&buq!%+muqJr*`AxrPbHK57go?yV$I|vsO&fhOkDDTggLZ8HHzzu5U z!?0U7MVE;b=(4V4pp7s%vt)7Y!7Gm&I)ZLNiWa$4KXU)BxM`U3bobwjgg?Vmh<}d? zvVtR_THF`%^H=@)--xFBiP8o89-U;Y({ucS*Ez=Dl7JNUt)YJUvOM}*!d6rq77o9F zT}S=9T9kL^^Ja_YPZX1i1YfzPM66(8hKtVU&D{sMX9RAqx?Jrcv4KEe2{b~g=db>V z4|uaFQ3!G2C@>wakC5f%KtwUpZxfRIGSctC(|N@U!n&ep9$ zsF#w?8jHbBA!@?%hKO2oo;HXSOA>uKehW{!tchPwpmTmOMf@J-uI>6@YG`;bUF$Eb zoCnMu{|mMs)?OL#!i^zC{yXl4aSfQ`lmpb&vR2qYyk@sAUtz>M=iVfUUVn2ltsF)G zjDDNX5KfpbTJP(F=1h&|n6l<>+zgx{>gLxp$wcR&2`3=O^WviTI&F&o8_F$m4T)1X z!h#yuc47k$U;8V~5DjIVcVmN-vA36rWaPKGEdDZvN6o(M>#K?rIG+6c0=egcZ>S)_ z&?zQ5rZARJ1F$P=%MUb?C*7#w?72L1pu@HdNC zZ?|-+uKb!o%A%JMHbC7CTC=BG2JWsD#q@{Qx72ctN}WcV`Erelar&5co{_E9lxa0o z35V}Pp9%e%N)nxq+7>>=I6(R!Se8BNfb#vBozr}%M8=*FE=nlVTW}IW5#do0rx4m?8xl8nbRVX8VWaSPtkE(ydpP}MHaEjr7C7k zv_71eHEMlP-&=^jcoUL2b>>`BTG&{hk;x-dY@I^Oub0tSAt1_WiKcw($Ej=KCkSod z^<1&w+y%KC#t&mY5IV?k6~s;&tjY=H$k?B*>NyE1dj&2!n|9*bE1?Z&=JUs(dPzfE zT&}7oa&aykBP$nKBBk7vi9I*plpG|@1J%+SR9!V_P!SW7YxYtuzO#96p|ukl?hV2S z;gGHi^bmHqa>s?#CJiexGcWU1h6}s&qa++tAmEI2^PoV7B=fFvpkwk(r*=-b-{;n@b(WHAVcn@^0>1Vj`*SCso!Me2p z<@8u5adFQ?K6fXJ)dn3tcT-q^#SboF8)LcUL}q4yrjbg8dJG zw=e_0vi_p*bqWSgiEtos+~uau)xQ7scATp#@XJsz2?ky8{hA=wJvjNZquxlVHZ~G~*~!FTIlp zy#r(8e5d-HfZhBcvoQxD>nbH_Pvh>vcaVr5j&p28bp^4ijonz2>ECa7zxXuc> zdU>Y$US{O}*-jsNFD$Vh6ns27a1(*@7SF}v)UHMt2E8kbE{2}~m~U1jb1X-2a#x58 zuxd|Rkiiia*?^)k`t!XSVLf>SPd*e<3|!tRrX{c2*{ciPdB#q+0U-+)D*4`NCEX43b75<)EINrjZ0ZV(PjN%Va zV=TC&a`+o*Ifsl17T`Cfm?AyqO675OpVw!w6y&UmOr4)>|7_l~xEN~?f7+t^kI|RU zhvE@CjpGX}Ekc9}5q_!5Lc1r=oI7O$RjjxxqkSj^b1WZ|aU_!HKd*^p3tk!W1V0DnIA$j;t4b zFcF|={?6GXeTs6F?e#Y70Wt_vGV%(QLjP*>UGkdS=#T2+Tw(w7g?!fl!-)bK$O^Wz@FGZEo;TKd%GMz~xhu_f$q` z$a|*A!oH!;Wb$;qzq(c@vP3e=bNLnN77mg&7GtkY7Gk^&^wn9cVNR}L&c8Q|d|9l2 zt-x-U5z%m^VC6z}$Wr0UyTay>#S~BczCCV7Rqquh3-9JwOnupp$?grK|041E&I%32 zAiRze@EthkVQ(l4b!oY?@TZ(ssZ*1L0EIP$*@?s!Nwp^+#KLu?7FanW_=c!Q(dk>` zUjkiaZk{)4Aw%8nx54!?Qriz*N&zJ&M}-avsDk8G1ew7ryR)8^$O?(#Fk<2J`vJyj zSSny8oh;x-(Lx63D}13f#e}&8_6}4|!R>^CMD*xurt225Maqc+G$+yDVUzZ?*v4ZS zX~Y@EM!Vd$9aTR$%jDB-h=85C6rC?OK-Qis3)4${WC!+s@fm%?@^dI*3d7ii8>99 zz5ycuWv8|l!Cuc3P#W0`V;U(Tq+ z(}0UeYg*KD?A-V2T)>`bj?bFIU`f~r%yW}EmMAm>F=|Ypg4EqC`Zec5*HiQ!dYJPZAtj~yXuz!e&;=O;MEZAhvO=l~LiebXLER_y8g+xY z*1bSI4V9ylhooBfNVx_lC671@2vFM2gk-;_nay$dmS!jkTIL-=CVmT^Xc*Z?? z7_Q@CO{%f^DSH^=$!bw}cf_RJdtTGMxS_keB2cPI+0?6a9zL^(=Chs7-5juGm3U~y z9hH^j@7`h{>RVr|!?lN*O-K-0UGLw2J|5gdAt z)`!o-H}#W;qcZwHi>C(WfD_BoDNw6+z{y|=Fjp8h=*eDFSMr-&=TkCfa3Sgpe{Cxu z*;M`RtQMr9XTmAXe@D4o+TWFYHTuwL*aR|Q6ieH5!0^G6>ev$-G7}JcK4sW5-EJ>+ zsOr<7Kr95GAD)|;1!~Cgcu%KnF}vW~Ld4LM<9l)igU!oyP}iLwhMtAhekpH6Vb^9P zM}g%+mqKK-3E^0$4W*XFyvaXbL`G(NcK(%8o2Ud!!4aU6bvfXMIEHNBN@lU z1(||zzVg;j0_hBQBmFotCMS;|Y0DRmdZ$yvMxJ!}OLUtf~0h_z+b)ev~nwRHV_ zi+nZ@R4@{E8o%B2(c(Y=)FfL9e?a$8w=bmC5+ghsdR}AQGI5{&XvUU~ss=g@m$gL2 ziPoB)Ee9Wv-j^@ZO;?Z9FvDVX#|)QLb_e{se68_4q#!jdVs4J|9oT}tW3c(ft&6R} z718qiJPfjrch-qKm?C)MiA&O^;;RuEDn;fkL%P;%x1Z{fq2#AM3(!r3MPbRy78$dw zA97*m5DMOR;qML7$(v^p*n1pk>5U}q;r5R!`f=r9)?@Kt!OkJ6Qi;H>ATa7_4>s%8 z*um;1LKC|^8k`|)|h{72^04AL{du$7P_g#&M}tUsx+8% z7L6&SJ8nO00afcri-ARq*`)$a@*Kf)LmVe5pUsYA1fnaKEIGEuV?2`$D=4*>{Vh27 zVH2$_&?p)WF-bR1SZoNFm|z%#EL^;_VtWQp>BNI$(;4woV1#TbmJWI7r4$<@58mfc zYwOsMSWSW4+5KtIE#;xSc0H2Yj~=q#s`~s`V~5{16|p%e4U(@P<+kvbI!T%)`7+3i zX=2ZAy}X`s;_{{HnKk7Pj(zOVOU4R-Xug4UiM>4j!dmd)jPkjLYq{dWaTu?k2OpD* zyrjY>nnwEmT)qK8QPdO7ZsX4V-}b=i5NDkSf?4XO*kj^2*+1DxfXu&P2M%`V-Z;Ug z|FIhs6pxK1(9h(h+sxRmgE|cbEC*mVlpBrhx3peM8@!> zd&@J#MzkGd&8V8I7{KkEOBGFbHL+-V?RB{{##qs0?a>+`gwtiLlBl zp%+NGScT##lPfmg6HlW2$T2bsy;~F1zT4cvGZv@KTn~11Yj5^)U4)KL{Vp_#5}!^9 zChx(_{4O?^;HWH-tl&1=H%(z%1IfkwHeMi}|EuSeh)onte=EnHq0HB{Yf}Xc`pSu4 zTG&`}mHn;4oRon> zX%ZJ6P}@B)&kc$7;FeOUfAu$#D+sHeUhN5f7weFCPcsFvB>3ttt>7-swg{;tmQ#b6i`)ZHRswg<@o`O4e zHB>04ttp?e{9I6=0^zlGK~3neKx*#*t2mB!whZ?KOaGqd+o^2fdZWN~*!6L+Gkf8J z)6zj!o|&!vSq>-?6&T6ul#CWArg>F@agGY86k?G%>6;<^F(`T`fChfC7PeOd*PyZ9 zS;=dZK3?KIGy=3c4y<5+PBWAA7zw^n90z9G>$>{x;nqg%*NNus#dJ<8>&np3Q_kqA z>$g@bq$4!uWmpszfh;2nLy#k31iZ7|;&~imXkvX(6CCkdIx$=XV6Kda<(DKW-vcI@ zV;#h}7@3)f5xhCKlODKJQN5|mTU{m6EZW+b4L1v4fpH0l zIT&H1sXMu)Az)}9`-dgcJceddK0Oc5UWtT{VI%u)GHF*LscA9kahblCFw$mds7^Qe z#0>ec`xlCxSw!z^$se!+E{a`Dptur+RYq9zMbTk2U|rH2apVLWuZ&K47>)E})%Vhm zn)mh{Mwg(SS*UFgRf8^yaMaL<6r(PF_(D*B6i+yFdW2D=Ku+%Gxm&*-I!c@yIX`FR zA#^Oo?&YFkW`m{22@^2vaq^b!!yzPQN z0b{?sF#pYE6QqDl!iOaTsGPp>35iB_9!yAQC+ztU^$1zNxOduTMg?mi!Z&(4J7IkN zW$Vg{GwQyqy^~A- z#PkL9J!-G-nm7DPLTDw=+?dfOQYv&BGLsPu%Mb!9p zR*pYL@%OkMe7lxu6{kJEiqHGL=e@b;MA|5UvGY2W&k*qA+{aYB980~#Haz#7=PAd& zH}SMh&^;F)JtggI-Csi{&2bXNGW=-*Sa{~=>92jq{$Pv&PMu(Zh-3dt&6vrz>9=%3 zXzTKErXfv4BP2Jm>dyv>16aT!t30YS)5I9L4reJnx)uQQSdV=8-Gj#`4~T7F>-5IW z#Vd1+$jfFw-4=9(i)rDm8}5y$B{Yw3u5s^qB7%hr+$pw%?_fcf9d^Vc2b0F2qXdsl zOvZK^aeDSuW-_ggJqlc`j}=zXQ-O38U6Sq_*S=T>*i*c7C<7AnZ>fJ8l};A5qR4q0 zi4^u%7d^b+3RofLr4$8}IHoH^G$wvmd?bGRTS-yf`NItLLf9!M0+gNN7TbI_Qp)=j zP)59?$ovm8HP@#1&8Z?2$1FM?bnwXyM6w2$Y93qbGWinf9VAM@<3DWQ1R78U_82iO z&s_K~_H2UcSO*xWgZYE$xC;OP5+#C;3`w`T#(val>aFMTw@ag^E`^E+q}QOMN6=ls zu++Pu9b#mLDU~r`GrDk1#jV>k!AfbShnCXiX~AXbA+oEF^BFo<2Jb^gOziQP9%u#& z4}gaI&e|ZQptZs>CwD+{6)1mwI&OBbL9vaOUq{gSQ;qVMq6vSM2GiJc=f&BUk|uo1 zBUsIF#fBw8Y8&jB=Y6yrAm8v}nEIjirBwJMor648bS&xF=f1|8;Xu2=x8TL270yVv z-SX39J?$BG2O*6OdXWKz%4QPe(Qnwunq2d{HYuc$$~2)kGKQshxw4d!?OEZU6{RDE zv)SeOvdG`SLtt15x)t41PL;L52s`TIC6b1bf6;?}#mb?IFb9E)MVO*Im=yhBECN0- zL1-yMaQluZ5B6ilrhez=1Eh5NQ*Tb#5arLNA*9~W!RYHXLBHj; zCn>YFHx3Dwqrdy$+M6%@P80wGG60;yl$zEcCEb1XpArYCdo4`!?mqZ=zeRq4$2XYY z*IyjF=H;$IKvwI;c`_{@#K*2IJM%PT?w3~na76F`!&K*j^5KVX{oLw36NCnjC%HFM zY4{4oIR_?yz28fjOA$lXxx5KZyyvDg`W-AVfuxjkt)Z#wm>)>F>Ci3-Z9&XXtf-W-5s%=bp%~O94=}`$MpQ5>MD|)AYH8PIa|Iu zU=5{4@L_(r0H+CmD6?u#V4PL1LKTyio(7=d83?`8nxw)^?s)Tir z#G=M;n$lT&<2XZ=FM0~pluvd(1F*`V^ie#Tot$ICTw11#=|9S+?0qnrcz88VW{i94 z?qgQCvl__7`+4D&MQLdUGC>E7?Ce|;A}umkew;h)H+e1}Sj3wGc1DN6Thg7~huOjr zGAM{>CcSU-!Q1Of5xczXu`Dsd`GEc&J>(T995reM>a8VwOfgL{(Rwu=urPUyRV*+7 zEHoEj>Q2@a`%>q~fMdQ0a;q#lgo|rIlg+#Z8_OAIRjp$04Qum&dK^fE8L5}WBBR=} z7!UZW1I5^v<%rK)ei)Q>PX6dWno7_8D!y7;Qv?VdEd|+!w zeTBAusfjxtWMzmh+Mg#E^vTzfnLGxQD~+K^B)eW~TkwPMv<@25m(@dJb0}I!;d6}6 zh}uR7FxS+)T@$b-4zpe;8w5}Hee*XPFDvsRI$aNqnMgP(m_b~Mo_LM|1B+#Zyb{tA zOM($C!e{r7)%dUyQcU03Ty^77sT&$q0G zl+RMNYrdJQ+=Q01LWBHBw}2ojjNG}qPKZa(`MeS=rd-gyE5araW`USIB&2anPCCmvBVb<&5a5x=mP$d$MO<`QNK3QjSmz$RsZR8!r6Hg)mmPGVoI zG;MwNn(|Xz`$VExjOhx>iH0C$>E(*6W4$y6ZiFVruutAkj|1bqavse$$9i=P+;E+C zRUK?}P{ZrDYjK+2t`&l)+zf`qFm(~5yY~+)2RE@;;B9KXecSE6ZOW@fBHWoEa>WJxMfpuAC*R7*0ayl{?RuXl3qWPL@uyqsG?h2HbQ(s07`VwS_3mlL z<<0H#*#7$un=ml!2+1nK(0}GtstsM))EB?Y;YY7oOOL1IKaj#(47H0 z!1RtbMx-B!bIUBhZ8Rq}Wm6ba2qIStSZqzR^?I^-IP1xZ6qQ$aSK7AviPbZe#@ z-cq2o|r0nHNIP{pCDk=hnB8YZ&MoWVcbkU_)>gr%j$KKzl)IK6<<{gNH zKu8ph?eCgS`~*-WspE^OAM#GIVCGF-fA?Ct=^D@~svYI$7Yxs7a8fU)zwfGNj?rZ8 zRe#HA9ZHH{2Jg`F)Ra!lrJ67tLpke=ewP6Y2E;9Q4HYD9kP`v_oM&k70`j-&<%nj( ziB)jNEV!0}Tx-YgOTa0Onu&Zz?2f;_hL^UaX|bqOi$uhXyx+~x#0J*sOD(_iG_G4WbkH|YN(m1x)BI|%K?YNWk*#}>#ZV1uW3KJ$R ziPCMyn|-kxohIzz{E_|8QegwGEe8fB`1m=4NbddlE=J(sL!ccYd8%%@&-=wbznlf}=_)^dL zK?S+MXc+tq(AItU)Bwsxnvd&vuUt5b3Wf?{MAG?-c9~)gX9i}@`9NZTvF*J=e85J4 z;RP;3oiUf=;dFZZdlzI>Bd*qs{+UtfJo1e$LxbAF0W}FN`tZ(A1d|Pyp|I;!p*y@Y zsoADbUwo>`5tCB(Ujrb<8iMY!OY(~n>f&FO(udpX>Z`L#c`^C^1Q1J;!jtp!t-Ihq zuMWLySe1}XKOz?2zI+t52kGb_o6oIl9-80KqUZMH$J`}c9q`D#`Ou2h%U005cy6pK)^D>4T8sENnU&M=*;~n>8dDA;m;0f(8XYP=Ec$Y$PvaM8q}*h9u=4 zI4KwqQQo!DrM(W%_>*J?MdNb~bZPbW)B-fOrs0(NW=GN&TY4(H6EG}|oUYNnN)=E&iKZMpIYvZ?YQkAZ$c()mr~CaX3_=1b5XJ5yY~nzDdz2VNi=ZRTd2x}omK z{@DV^{KbECbakyw!4wNkW7>Q&S5b5cb?rEPW&7KwrBYi4O3IURaZ8N0wN!FY!f{fEEIixq2v(e3e!X*d2Spm^x#GQ7EinX8+Nxv~8V=F3@p6H1D$J7Bc5db_%#wD-Zsy|VrjBOjf`agW(tBl} z>AZ>Gl|=6RT7Ah2B*HqO>qebAZ$f#CFeQu}y_TeJgn~f%?(ylBV3dSRQ-!r0F##k5 zY^F=1gugGQ%$<`%!R>DI5h48C?3gj=p6B+PI+DW-m3SW~ zqs8(A&G0BOh3WcjYA=%f6e-Lcmc`NQN|x2|OSOnGvL9D_c%)VU@6vG6V5ND|0U0tL zh#bfwrAFa?F>gb%!Vq|kc|=8Xqy+Sh5Jbopw|Ae%cCKs6D-I?SNUsnkJR>jz!l!>Sr?VV(!`X)N4%;S8&7gSL~#yhO#} z)@Z96MicbRv1HK2qN_s@pO~`IS4i-t>lB;yMy{mdX*xYK0mC(;3F0BGyNQm%yv6)J z*-tEfj|a8fA_4=UJLI3SsFchvGnC_k$kDh^WnzJ>1DS;`Rq&aaF5JG=^peV1MpgL9;j=f?)|AS5Jaed~S!}~V6f^3N(Y=CR53EX}Cis^*H!;Y$m@-^bfmxH+5)c`anYAj3C3;RGd>eKJSZK)sKT*_x8@& z&CjO|htE?iTq0ch$lPFA(FQAY_p%u;Pk5tKqE@G$%u%e~b7@bsXuqdEzwi~AzFBcr zul4I63SFy*rZDgh;WF2rL=JU|veS|cJVzt)Ds34>6{U!A zzE+?4-gU%-&H_w)e|UYTTV0y;6CB=8Bk3{wDahoLR@zQr)T&pH(nUG1!5hJ^Et+ca z*1 z|JFPyISJ?xcZ7*!JwDS0hM)bIHoNxCE?T-OWiW|p^R;s2$#ayg_YS0fWk5&cZ~n z{!a&NR0OcSKRzsEzS)Z+ww$Z?k*;XOY(dgLL(;gH$-#*pD?{8BoziZi2&5`wZp|@` zPp#$qnvGg8NHrumqu#WD0fY70rlj5tj43y$`%Ck8*<+hiU9mkuV$L*=GuY#>`J3jb z6~VP)tcXUp!DkBGhz%+sOO2yi<_+h8HPJ`%J5#Z8-hu~tW%z5cEW!Sq?^~f17Fo^9 zF?NkvQj5rPqFS^j=zW zgnM8^N`niMGj+`;Oj~=c2%FQ@j}85cgUP}m)|vS}pHT8$OpD&vgc9KyNDDBtuBLGR zH*NkumsRmfDJvWMGxV-rH(m!})3jKs&QoSa0iWw{CJ?=~G<6n#9T{JFMVa@s;%y?aOh8Qr%+_T$31H15`hu!-PeY?I&V;vzg>b)s|&{Sau(?u5bAO zJ7GT*mm-zygEDXu(VT zeUQ?^aKwRNOL~06X$-?CJK0@YsP8nM=)gF}RCShc$yJIFdnHTATZsRQv2y^jW!u(t z*|xdMwr$(CZQHJ0u3ffm+qSJ;wyS!d``)|n-tN==dPQVJX3m+pV&xbS^UwMHYfM)? zr*2~MYx?yRmK0=fOU0X0Y4Ny*NYfIY2n)ZUZb|bE%CJVpnUZ0G?UB%})EEJny__9^ zUOtiYnqvaE?4iM{*GT+O6{Iy5J%(UPVMm=XwTj0S5c!Ahmww$X`7hTl&coI22JW+^ zA{?KEc5N%g6<_E3dG?kFc||PT8uLBA3V}HND5EkOx=)NMG0!C{DtKCg`q4Ek{HqAt zPY9b<)1M@^(t>n_%5gRTKlL=mCb6Y4i+ubs11tbye85wm=4ZCr<1G-K4MCNdw;C~* z9CR~c-X_&!ZQ=`~S*OT?=0>~~9Xjfa4A<$aZzk=dQCaUEDDtGosyp;!YVV|2jnC5> zeMU7eBi)j5RSJF~g(lznwlIM9wkqDfrU?$*kTWSSU|FIRYZOg&rBJL}2-K%qfS)L& zd8X$4S%BdZ@>mTr%u#c-FeLX9bvKsZZk=B+ovr(A{Z#9^LQmyQyS-!G z1`WEZ$1b)uM*r4|D_x3h9dpy0(L#IVbfm=fIk{}vL;)$hOsqg;`KErL<0zF&0`?Pn zbiW+jt7D^v&m>_?{0CJ-dP@4)XYEJiqVrBDOGmO1QVL_GWO;;!x%ma9oDNpTUbi*5 z3B>mUO*FJg)~{>mg==&!wDw2-c2~1suxamUv%$DOSKEF`45b#`{y08XBXiKx$q-!W z`BWmz$Y*cr`uUrw;r4ZsTKGOJFcFtLbpw9l^O|n5g_Hv9ct$!r;H!$rwiswo3Bdhr z3R{je&TRP?SHO2QWFb80^t#%s7pb|6qc5qLOHBc5{|`a6r70Kp-U{0_Q!?7d zuP9Y-3=IJ^i1|Ld0R;RY|FF!*4-eX&>ia24B*Lo|aqybAF@y%}&fWY&F)j{8Le7n$ z#Lw^Je6a{0|8ppNcw2jTVaD(C<=|TO`;cwx?4-v}S`VMMP;Ee;?)Kp^^-qYL7_S~4 zTddrAd_E71zTRHW&Vpxkz%piYq*F;h&MXILw7Hz#?^p1%ry8oIBKw4;kZZPk;*GO9 z9@vSM6(l5)Ozh0uF16pz?98OxZk)JAtUQ@IJ#UT2uLNgCuCJTpAirX+dJ0*00uA(B z*cxlUYgGL54EWxn#9(cf=p85&482(rTCIdwBJEdJi8q%b#M&yDe7!bVK5OLs@egfJ zd~I6pYud1B0a-rK+=Q5A{-XV6ys z48bVK2ev+sfexv&@?a+?a08uSENJVW_VQ4R&J}7ZRFjNtjuR!%0&=>r`EjO@^;J70K`njYfMif1V8=ViyhpW;_ z41k~O<70Ipd7l8Qn6M3SII0SfLyQ;&m!*8$`vB`=qWaNf_bepL-i=F zaw?r*4pWu`H}9M$)0R0;YP0P8k@{-P{#^9%)qyBwW=*tQIf})y)A*R4+l}TT+B6#~ zXo@X~mc>>YL|?$-E7DZ+h6q+JVKP}oC5VHNcTWkmkRi(2dRl$q+T~V#{ATtVWv*xe z^-#5^{t>d#QqXC)QQg@Sp;rbOusrIw79KBoJ_eBZ zMrjAJO5|;&wfv8Z0ZSVxWp;PT?t~$qa;zV;fuaSP0Mo%8yr5fHiE^I0Kp~+jo3z8& z7_H+r(Ju$f%Od+Qo2uQ3U&(uPKMS)kr{$1sl{zLOxiQB6=jnK=OBxkF*0@?z- z*(hRQNrCn!tY}M-Y)Kt+vYt(oRZLIcn^kU1drlxq0Y=FAG%_n@IW|MiI$RqAsOD14jEu@iC7b1h%mjj$FD(fUj-Ms<2=~bSA<+4^HQ}H zlH_qPsCJT+wA!Vj(iz6C`y)A0{cKBM7?sfpSqlteq_t?z+ys1zs&rNOA2KE?an&ac z_e>kZu+fWMkyO|@9$_XtU@X7OjoA}z^-P&8uH^u?CQKtC1MPy+zvtxdjO)7O1y2SV ziKJOjfJ-sZ9q%bv%IOw+FZ2GE(;Z2^6K@WaiB#*BtJVBY6*gqaz$** z1F$gS^74nD&9wIXWjEBwj3}T(JAC}THV_h`(T8#@NY>fUv^X@_bO)FKReA{-W5&ho z_hnbEl5`r+1Y|+Ev(lyzOsL|E6=kQzIN(h+B4dha`-4VeFp5*erXybucQJKC(K4a4 z&EoMW0J^NaUQD~Yu1Wd^gOV{PU#1=fx?XFZZ|WS&wg4q|$zY2`b7JX>3SVR;K~Jj$ z&K8~8rHnckDg8ZZU}mnV&~|vl3Y3bTtH*2Y;!tyv4Sthve)qA(c_9#NRp02lSZlxip z9rUD&xrl)7R946GG>w3M8l+%ZcKBkPHKKKB4}@bT~#Tq z0>3n*AuKZL7|HkWo>6-9R|xzx>GVc@HEE2hRS4i8+Z?Z|SCG0ozbU8-9ZJV9{8R2q zs4`2|j5EOm+aGz!NPpgq0#Ya|MIm*Dr@D83~ z#4MH(#jir0%=Fo|o*!sEdx@57jvh8oXJ+HIi1P*m#^e`adr!6I&^ky~f6x28E!$9B>b&jAl@!(S%j{w@}5YdMCtE z19s4m*60#;bFPKT{sspa<UoC`E8buuz1S41Ps zzNqfddk9#ZH)FX|mlRNmb-5dMVNWE)7 zL6E=g?yNr=nJQ*m`%u5RKu%-9A0iv(&!@=tcuTig3KOTq8DaIVE%)(M3Bm4_KQrpT z6z_Oa9-0lt^58(FxmWXU&|4nMJF%@Ffzf86%xo)bgwDj&%e`OCX?zc$ysJB%;=@s} z=jTD1t9+O^$BznmS6nqea{|~r?TIHP;o=oRvf;luicSV}zD4$AO%^85?0bf$RQH3I zI&);d0VVa<-2PV1{iV_VA?KJGnEol}nCKb)4>`v~&-ni#=PorRDu~$-x_k8YoOPd&o@$=>A>3NCQ9Xg%AeuodMu{+kk*!wKGmVLT2 zl^gECy|mEWjy+}$VWw~U_^BtO;JeJdu*x!1@AS%ZqNizN<90N6eoz_bdXR9Mk8Rp+D)tS!KA{b*@I`auVr>AN({{Lr8rlUn zLvQV}`kVfeC#>aqr^lnMyT`koD%ryW_DAxoK53$)IG4=v9Orq8S{SsA&go|+SDUl- z+f<-5HT==t6>}DoOI{}>vb2Y+Vw}d}tHV@DH8-(L_FVysMrK1zGpnU9bWzsgVVyNMR9^ z3}IDb{|ZGT>UNPr8_;)lNIoNQsTpf_@`>}K2DFqz=Om+L_;MBHz?tqdqd}z(u1ZE}CMeL#z*o~jn+#RvX9gW(O4I5< z6eR}NxU$p!Wo0OlA3p^V&3hC$CGc+)3)%I}OREyZ;u2UqmaysSndCYsziB-sGk!g_ z(9e|uvCja-81^=LsEk`0antZ2l^MowY-U^#d=fdHX!rze8zxL?lzA!TZJ=Kocl}zN zU9Hs!GRwm(E)h~`I9C?UkJ5ESPcl4^z2$;F8d z4UKLq2W6@)Pap3vv^ioZ+ra~dbinnFNO!}4puT|l;X0XQmHz(Bsi_Rli2u^jlN_$3 z-UC&Q2v9?<+mCyzZnhPqBdcuQUdEf~qS`Ks12;tz*ngsg3o!wVJNt>!v$m$2kvS4d zU*QT>>L0pkXceM3tHoGFaB={p5AMlo!iES>n;8ap13;l6jOTO6+LIXiL?ao$KfGO`JXke?cv)T=AMrzw{jbNoM;FV%^+LWoHcT4P8Lq)p(7ik7S zjyg#WP(x{E5;}nIS(T{jv>FKb&JR_>y#bL$e(Sn7@W$T_q435_NUcqy{a+FVXpT5b zpr9@~8;mWkjqVT@-0pZMm{R4Sswrr^hA3(3NIzT;t@Jl>j=HT6hL9Nk6o%Yoy3)6q zHP6@Wim+K>-37l*)TfQ%+dBT4E@}dNk!+vWkG6}y4-Wye$;=q3!gO&HC!C?TGH3l6 zipwtu${ykyD6SP#6$JRpIR+0gOAl!tM<4ga*%J5fIUQ zDcGzT$2)qoZO!M+rt%`K5OH$awG7J3On{@qf;M5LAQCN2MH}S*U*s+)`! zmC&Y+eW@YzN9OhB$~omLj`45msn1aHpVvb(hwW!C>R@%q0oPsy_*G>y)FkS@MJb-3 zn#8{O$cL)GbtzKlx^*J6guJu9B`MI*npYwIEFMj&wgMZVkKB> zNVN31A}MOs8y*eOkuh3FA_N3|3NZUarNSr^8Oq+~e(XJ|yU{yvDj@qe7{H(w8X$@w zoRog?Epu`AZZcWvf`vwd!-YtIe-R~nf6r>J&Z1i~6hZuSE6YvOREY=PLs==(pqkGR zCKXH~7(^8Fo`GHE93q;bv|3OpN$Vj@lQMeUpnZ?3WPuGgwU=%%5!mT!n_zUr614at zHHv9T)0CJQxX;D`gsBx6!K#XRXowrs)aiWfVFg+QC4>mW_;8~uq%D#bfFd7?6>RBd ze$ew9jHsnDf=3j~9#U+JUAsJz5*4R_pOSk0RGkH`FtbI{$Py<61=$gD8h#24L3jJv zAs}jQy{aKZvE~HADta$x)|@8Ip|-kx2Qv&D79cq67Pio8Dq*V&W@D7ROcaHDlsTe{ zJY{*ERWErq$z}z%V0VlU6-`O*iodW@ywEznqbF5FbM1mW7{W)Ah!n;mWO?VsajrF_ zWnG2wX+D0Qfm{SGnyY&7`u4K~r-&UYlr$=1=4a$~pTwyqvOJRAgY%rPr;)*vE*_R<`yl0Y_>1w0-+KMm$s_#9#{(&ojYWkQF-g7*5WN@;`<(S_FVZbG#r54U@U{3E^JM|&txfRQF-m2)m^HGqNDl3xhyL<096`2crAnuDlRj)aBW{5-_VQ-AU1H43p#FYR1=prO9QTdyg-#K|qQ6z0v zBUI9PUPmBF$dFND3tl93+8xOqo_MYf#FN~Y9*tc-7BK_Q4CM`mk;zmDTKq&rV^*+C zz0dm5{o9Q%>%#?3Tnd?kQ)DQ3<`mtnN=~IHZfozX@A;TQh(q*|5UQ?TRa4;&Rj-h% zcn^=_gak(znyE`5O#~m3T83)#k0i`7 zjp&)2&$*VH;qq>xMV~R>e>6?;tyBhvaAm6SR{bti%vUClOmNKha?mGM!v1b!Nk&6M z7nP7Q2%@sKKgt4jqTr2bCbd|n#?tfDKXSrMWF`?HVS(yAL*_&(xq~4hEK#Gl-G3BF zJx`s)KQz+y%Zti=D*Q}f3eiR zCS>#ZkfE5qx>`4H+3 z){d}p_#WHQUut#}qmsQ}3!=3A$Q&Q{m+y;~h6>!kuaP~rgXNqARvfXLYFv;!c7ne7 z0S8~EdGIgd4BXJho099P4#|K-7PT20*3oppA6O0?3M;FWW!q;MR{>WyXUE?L7Rpxi z_4>Co7%G|ow!FjTRVLM_yXNN}Yn}~idas73?8i3!1%=V>{l1>Twu-K2-;;7-$K~O5 zh(hw6gQ^wMM9sqmAFSSRKNEa~uIE}#-ydAw0IL#Y_=+*M^6Y9`&Z50G-aDVk9#HK% zWFlqANH6F}RlK}8jFetp;Wk!^crz0=CosPfrevMngsqEj_%^0=5I2gX3m4tlkt0`a zi&pzC)fHja>ZAvs$cdOy;I>rxAbCeY_DX#5KA4eV!mRC5E#qj-4uwgBymgOOKcEpe zO00RObVE4(Tzq-Wk>{ByGP4pRFBQa+4lX|=?Gi#auACz1TX;@JY$VHF zx~d%jyK!Jb82j2A75@yXZ`c)9(9I$7w~!%zOB;3VYUaP`CmbY)UD0KWxQuaH4^3axJx3T9DmW zMJjh*GAEPse9%YJ0v*q~75D_@Suy6e#}}j}ee-#l_vDoKG#egu?Of012DRNbgO57g1eXLc&W53@rj=O@YZeR90RAAmi(FE_*TLi4Y*><_#&b2 zp7%y7nBd1lSu<%4SN;8r+w$_ZLDj`-2R8O~bxqrJbyZD`-&f0{OQIF2Cinfa(pZO` zPm{~d&ch<&YhQP&)%Q^!eETz8dx%q#D?HDjM^6XS_}jDgs*zdH#v?qI!)L^>&wW1F zFPIevFbF!fCQc9SS{-LekdAbx{^r>kSEo9*r#r^G0Yh130XB zCo1sw-fz6@NhcIQ^tCWJQC!%eB;L5p!Hp`}_ckWYK3-sI;I1Z}Z|Fo^SQ!~fl@!_9U04s) zy(d$;-Ftz+0Vkfh6e~Ol4Li6^_)JSzbZ9Hp@|LDbmPSlYi=2pGQzqiTJb~?ZxIR(R ztdd_Wx35usRMcRC@hg%~0>pTC#ihHC2vnVS@}8{3s_+fN#oFxT8VlUl-Uzi0O@QkRI?I6en?DMsIpvc z>@}SlFJH26c<@HdYIyi%Pa#_1lZsl6`I;zC<*%27NOIq7d-%8&@_biO42jQct%=CM$*{pDvFxxwap$Uu{x+Kr1qjbR$xlhv$~qu+V?NA1Cw0H$q3Zn zNk3nOzhOH8zm2+qr@7ie8I+m z)t;&a{i&$WE}mLRNQ3K*hiN&_sDDY>8P46lNheZ9#a>t7=*Xk8s4uD02dyn&vrN1; zXpJXrG^0_E+@TR!%1g;bf}voi`()XYANsuy2zy&>H{o((Qi6ABNH?qEo+gXuT{FHK z>22wyGU<=VF|Tfe$+Z;hCRwd?VF=qD=7BS;N4E>_QTw{8{k3Q!I2!IsF@VBG& zf7zKB*jZTqWwib;R`nv>IWaMaJ?`-$S2{;*<*gF4dVuhmn>wEq>`0ENNIw1plaT5zO^Z#sAayGG1C1C$^$zQks zW4SV6Bw(WdOI#>I{ZR`4<p&o< z0M=+!%6I~Zttt#1W{qqZy`{yF-6eIG9EeHZci2gyJs=8ZFu3NS zKvg?k*g@H&;f#{FW}t^m+m$1@0P#B9#WDw1B8Dx>4edc3b@%~O5@)N=W6j{Z7sx9> zvW`YA%YC9Tg5H%&y;#(;>1xqKe`n^tLmWui&YPd6?+~+2V8K^lUS1w@>}dn)`Cd~3 zXZUNfgw%EULOEHHW`%MEeyeW_*F#YEmJBm3CR{0*D~X*W{2rpGC6dszvePbw)gJ0^ zli*(v>_4MTr{rSj{8#9e9bHWRaaPd4$>gtx{9Osp&fOe`z}Y#hu4I{y*7|4yer0sM!94vJ3MPQ}*ZFX!B!Q-1~Ue~amVO*#Iz z_l}8y{(sVt9Bgci|E3|;y}VH#oA`Rt*TfQKp3=eBdZ$grVU9(R0z;+75=W4*;<>}G z0^_Y++17@P-PYFlg;0S|h9E#u>L79qmzo7tNV$K!+y-b?=^jPeG|54)uWN!TlsBu? zx0(5JK?W#(wLX8jnYo!xU;o;<{&nr~Y3gb;$IExB51?-E?!|*R(#VYmunj;!dR>k& z!`ht{_kamt>ZDfK@!V(B;tSUc3cxJZ?)BF3v~|;g1Av=7h6~s;^4w6(aRh+bQV^RC zXzad^&CJdlcu*Fwz1qTRQKJ`rpm)%kM|SbpnTA*kU_8!x@5Qqd>0GzM#BSTmfPeS! zhA(ULhBRVMXX5dLdf2t^u>hd0X8cZk5r2*G`-VQ24@BQ8LF|SYpYzAkU77($vSxvd zr0iT#@fob>i=S)hwtN?$Tj{b8=flFe2{;=xbuE_uLnU{+bIi`2UzA{GD{g?<9s##= zx;azj(D^~?ZFX4dE?Lq#uvSgp6FZK4X;v-v)mzKGYOmWCMpEo=W{6Jit zyrTrDW|vID7o2WKJLMgo2kceIi2ZSwJxq;PEmQZDw!c?88U#a+;mQD5E4I(3SYR#e ziCb@hF$J}l?Y=sk@1K`tXN2Yfcmr71y_Y;qzBe}UE_aNCofuD70R&Y;(ns`?XkCBI z%^X6OFDduzCc-DOJ#w9TU+b#k0G&SWA$sEHJ$-QJgEPV&fnQo{Z7bo&-*56YBR+lo zU9>B+r*!-02=CYQLUKmT+s>0(?Sq$=TASeI4!-VMxjfFoIH)@rT1C1abr;Neg^d5`s0B)oVO7ZXf*2$k2IoQSI2$(Pq|@ zME+e0VOb_Ap+jX+D#=SO6z27kmyaBz6$(4Mrcinh$vaa;8}YciF3{|2e?vQ_PA-G| zyU@bwD=8%Vy@)8UT9-1ZiM2U;!=lqTQM{Zxs2AQB@HE!`>f#6|u3zBeJw~;|!CQ8r2N^gNG$;tMdEH|uybJJWKR#sw@Va4}xB_LRu9;nP8THG@0_fn|QZf2}?MyVTEv-Zaq z-#&hEnq+f#OP5K~maK;|*jRdmds<>wy0-8*prA95AEOSm3Q~bL8Au0jpg=XM=QP14 zk&G}((Ryx^ynwbK?2?H6lzNhZgO904g28ekQH!F(mVrPEg}fmDQy-!)=~u{dL|^jp z-0e&49@Omz0|Q?vDwYY~|3JUt(vMSS$_^Bx&xcWAii1Sv!og-E{S6o8~ zr45Axyo^Z36$iXtfwt($mtf7^~z^ z^H?w^lv5go)a6^Zuh}+c#<(6xOn*OSgI-81z11w2QT9w9eo^+|(9be^rXVYK5P&k~ z^%^jgx#WgcN=SIlWfdAMh_G=%mO~R(wA%+N8tMmY51Z4kO~_ne=qT9k2m5_p+U4XB z-^@6TH1mEG;6C#-+L7H0dh2;ZMP4BJ)wnmXLtTIEn8rju6fvanlAsIhr?=~}4)vtxuZwN|q< z#m|X?aC{}yu3UID1jqZD4#I+bZ_}e_Z$h;y#7PW8S5pxWFgA{_=QzFYUOp8U*O3Cg zO-4VPCgt&UF;>m@Z0<+5ySFn1_m6~!7PzbJ2lFx5$<&Smr&RCQ$Blqh8H{h~G^i+C z5+&(yY=a6JYu)bY>Xs^nw}Vif4lvtx zC&GK%kFS>uuP1eq{+~%CUBT~59mKa{@ObV{rvc#bGaLN(_Q-FHkUkUuH3gCd&Bui& z`BZHlp*T&R>yI9yL30RB*bS4|X!{}5i`WqYCd~D!nKV+)8>M=XB}lviArcPd@to`o zB=tsUF8vH#GNOcKok_{(#|V?+?IKkYIfAVc-!J!E1sZa4ByUq*p}w0-ZTAT>*lIf^ zT$ZozQ9U0o0hc?eqs6J)9(x)GYHq$_+J8z(Iv)+Q>@||>eWOgfLkxQ|#ImFW zYEY_?kO(kV0LrG8&o_6pl#MP>&eybS4V|h8Pn0Y3oBynjU%UcC&XL4EtQV%yYIZa% zQJs~Q`4#6dgnn%@LHC9J4$y4j{SyM`!e?>OTcxai}{xQ)eT2LNIg@%4*qh^wh z8JoIV2?>i;=yn@UQjMa4s;r*ICbijqwKvz!uOoPxpMzhtc03v0>4i-Uc^_tuKWRHZ z$3*hG`OCHNYq&plzv_kdrSNe!Tu#<`_|!WL$T&PW@yN0YLxM+-U%Z+}4z7pzbk@IK zxjOuucizNgaSPiV3gFkA@w1?cW{=4!ls6O`raSSA<1#+}=p8p&mmi3AR~$! zGy{z56QB75*@7`aPUbK;!kR4s4msVHsED*a8jng%(8a?=Wa&jzD|U=gMP;wWx;?9@ z0jNxz2&)Nf?Bl%Eh7UvI{f0{V(Jn2WSn4NfGOodcn3Ln^cB`B({x0u?#TEh`vE9;+ zpjQ+2yKq=r8jur?H(cRa)7j63$KEw}8`+GpB%*d1tU$S_Uv*{;I4&jwZ5Qb(3LIiC zL$QgX%r8wPZfcv)H{AguneRjIN?{Jf9`8ZJS#}YbCG;gLkGR_o@0Xc&v9OzU^R3@Y zE3qxyA2$I<@a%32nsg%8Y_o2l$h=DpF_g#y<`I!;G`*M{b5$%@5|NrR2x=_-6jkz+ z?Uwzqw0v_^kn?9CbqG9l4OH;aAZao)-AFsrlj1Ra^b7p8X$N%iziBR%(9yk9b*gl2 z@i^XPpoje5!^h=zs3zqPM;9v+1wd1rT{Jtirpg~$rP5v=Ahni@o=Ks9u0r{<@aMnF zP<{uzRMwA$TuN_|sO*zp|r5h-ftrX%-2 zT9P@^a!FhI|NI3Z<9>DY1rf)ff-#mO05C%1?z-#o^S7zHG;c!6t8F1ir`v%>q>~Bn z8~iJRf7T6Dry$g5)**F6@Y;ms8tTP$+u5e(RWOwD0xAe;TI{=&VF|PT=Vs(!0ZiBy zxl~E~Ec>+9Faz@JK{$B@^K8*9wXsl*pcDHEZHTG>)`g-u%X}PVBiM2;VaRe|2nvNW zQXyiPAlXlXHi$d32A_Qd^|S8>B{LANcuUmxnv zK057NJ4R+!LJJb?7m=Yug-E;|FO%=bU(pulb|X-4?}fG#LHlI=3>kNRLq^biU3KHh zIai-PhIxOH>rLu0>_zTPeU*|g9FZ)Pq$cSg=`yg8-{JA1J-&Q&WuMx3x1Kv9crWhY zq8NRVGX@cMR~0q|+uaR*V@NA1bShzV(0In{v(9|>{Os&(r1DYJ z-h!;y!i63!zRJrJF6oE7zIr?TFYj75B-on#n@AD6#cTLH+_;$q%nQh2d9hyPM|TEw zjJjO4!oFUN8$`L%)^0ki*cZe@ntL?ujPP2d0F(iqiVvbJ+`D(5{9h3G?W;jiv-WcA z-kBGYYV46W-gW%9Ae}mU@-V5P9&s~ayhgeG+ugbxA{cwC80>LuSfUz*BgjHDU4{|_ zXi<}tG&)_LE)im5k?21a12d#*NTMFaJ|rpg>r=L~LDOF2e>L%DXs$&pze2x=AV$X_ z_uY;M6Zuw>Pe_iVAY%;c{~%2X@5@fKZ|rbRZ~|Q1lU70p z=jRhXs|0ZLcufVB9`NG0iZF4%qlY&OQP>VT_t@+hVCNI8!7FEjAtV=&U`*E0(&JF1 zfr>P#6qxArVA9B~#8fYqF zQ;J}prV|rhxK#>lt!chn*9;=xvq&;hCMvin8nqMB#mGTli3Ewe|6q0^lKgN!EYLLB zvSBYsp0>=VIwBt|Z9>RudZ9!^&l{rEzAnRaQ@LRygl*Co1R8SRG zUJQC3)L4Y6Eqf+)2HzkLw?QV|We|~U>pV~@b`Uo95oe7u$R&)Qwpa7_ErffRe;{*Q zi&#WYKN9tT^L*x17vR>PCv>Yqlr-KBQm^bWStGkJ4qB z3Xk5AQy5DMd-5c!KFxDQVh3s@wzY}uWz z-7UvLp36{Aa3u94*L4WILJ&DG=)7?^KGNWcED9dsaRzU<;il4Q97meFSFjoSChgW? zW@Q+%Oe4D6BTG0D771~%!JpF1k3wR>c~2enF!vr9Z->|lGlWXfT}K7fbVE!FxsERi zm;Fkb{hhf=rCX#Vi85LAec-}a4H2_DSREc~bS4rFos6qD#^q-u5&X=m<7xMr@&npYXa%F5ZgF^7SLcJ4z|+IB8 zzp;4g2|m7l+qtA+s?}cD*9>xf?5LCpH87CeV8cT_SJ$uxY7OtjRl&K#{riT6DfW0A zJ1h3M6X+yU#<=@u3rp^?hdZ8g;==U3tZA4Mt%#^d?J zFI~NIy+Zi&mNU6?vBwO{!>pAC1A-`j7-IxfOwx@ov=%fpRyZqBEi4k51;q&KlsnC% ziUN;_!fk4Sjl`mALc#9y?M4@>MQPilaV;Ii5o5Q4L!o{`WMFX&Qg{>o7_I1tx^BT& z0!SdkkdSbpJ927Tk0s(9`J5I-Jtcd7FYX$rF64^N@Ql#@J~1gAFVIZVf4At zE2-N8X*=&XS5r;>K^m5mp;p%E&g1XMHqoHD2iS`g4@>pyV?b8Y@YD%~$D+=gjP)0L zI+#n6nt$fRKwDxd6SC&R{6Z{AU>n`=Iizt6osOMmOL#uKCOR1$83i|Vjy)`JBAO=R zOANZsiGWX_JJg4jbB_H=cE@H%JtWvUpQ&5(QmeacP0ev|7{{gH1Z@Kfgz>0zGpTvrdg`R+gh4mjB>z@Q>WMd;> zV`Tj2xxd<2S^s1EXTLwk|G5wKUw!|EcKsvo75|NP{UeF~opv$&jbn=8e{@W-va+%M zn`P?q6WkqjKd z*bdesB&@a$bb?3(LCDCNt97`BWV8`ktv~u$`i@f(_5-WG%uL;Cs%x{@uHXH-uRVIM z|I{&jzPPxUyqHX9I{C%nWGZ#CjAksf6)tqEf}P3rvcuzrFL z;O8ITY9TYS9;5xlGl7_Rj#&RxX~Sg~GkbTp0pYQi%=5cF<#_2G%hsOg0U8x(xGKnh zd(Z@FbH@LD(*?WbmzUXIfQ8{y_oXnYk&KmEsP4lIAd zHgYVwutYPtYUb9SvW{&W+tdj>h|u0ccuI2C&rI|wI&$hr)Hp01MpJ7G4UeJL@mm#S zQq>#>QyK61LkcCU5}6!^`$~<5lgX-z95%ncei7KHRAyQpFO3C`2{q;#?T|0JZ)CV! z0vy6ULX^V-a{t-c5qodJnuz5*xl<=kk{p3UzytnMg9i{>5xHEmIj0x)&PNnatj7X9 zBEF1B-)LH4wgOynVJX5xEM|OPpx~Y8AfeAvkS*v|XF5(G2lRrdIl#k#fIPW5l2gem z7x!~XW3e@Jq;j##Q%`O$b1Kcy?Grk&WOLT_U{3qz*~C2TP+KfdfKL#fsZU391Puj< zs=%FuyqS<4_)o-`KsH-}mV)P7nUpSaxHe~@$qsq4_8_bM+u8NJnmiBjwVj@&&>d z)=!W$A;cK?HBf8B=Gb>!E_4T|JE}*!RkBs}<44^O2lm^{!Jbgbuxi130DRhz`JKS4 zP&zNHuE_1so%hoj^m%FZgc685Vyn{XC@B%!k zP%Tg$Az>jS!6(57`7-U&qIWg2TYT!wFS$o+Ru> zsQ|cg#JuLd7J1|Nc4?0++qzD{6oF771x58IPi(eIcDC9nA4Ssh`)+< z!`-;k`l6in3u;I99EKu@9Rs1MIQj{s7Qh}ppJF^5RLsTQSo+em119f5&yAc4oT7&G zlh%n#56~s3`jXx5`U<~@?Vgw0(;kD+wF9v^xP|M*x6G+NP}bx=w~pjJ)FhI%aeO!! z@alr|>=HSnu5&w6aLTFof1}li;Mnqee1P+B(H=^^Qn%^?DVt!4Ne8b z1L#j%_eP2E6JGi6*zl9N_vWge9z+F1equdFL5~4wQnAy^;|9N|A>Gf-=Yh{%3R%q+ z=Vi{4=Yn&E(gvg8i{j^F&kekc4}z8gn+VQ$z|Wu+C#Z#32o;RV-mz-%+v2Wu%WrtF z`|}3jM`xW%?-8tzeZ$f4vk0xgc0sP{0H8d%HX>z(#P+NC!f{OQ!sXQuYS){YW32%0 zyz^$TJMZW0woff<<$W$bPsS^D}t_n~E@c81y`K14yo(4Fm$7KL7 zP>&0>gglHE-5uTaJ0l)b5)kpQs`>QPF3Nc>;Ru#PigkQ07yW$zhw`~ncU-y zu_$N?%ce)1(j&2Kv{w2x=vr-0@u8j94X9}4ikNM6&g$l6OM1BGMw*8!2Ki3y@t=P* zFnkM%yQeJKk@_^u?W_&7YV>yJ&K+9MJ@b~NKFy-%#zsg3-X(d{R_vSxSzia0IBS6h zxsfXym-OH(Axn*Z3H>Vl`&x2pX~>H8T8|}Xa?ZM)>sLV2gm(6z`R8TzhC=bDhdw}| zT5adTB{^9=HQ}7b=Bep>ylChA^ZJ5uEjaSYsNy}UORv~H4yOUw?5RLY@)?6zbPCOy zpR8F-OO!Jc5TZw0r9nxSBZ&5DoqsF}&5Y8d{{a$1-KbPIUqer|*NI5-v;(h=e)z6p(URGBUkcV(a1a;9q1&y?Q{B0V`Pu)~5BSD`x2D zMkOojKYVFm=s10gU4~yXirF(EHu8Sri2D)6v+d-dz%abdTDWxQPG!V1Ks7zXnZ^Y$ z9xYswrA_HUi=b!b!T-R}q4D%+4EMyL%BIi=fPZ?BaXTVn*nk`1k7DPj;%PwWcJ7>( zqfOhnVrTQfQ1{9lP0iW)GV->s2_{okOm5th3(uB3t-(;iLJ19}f%HbBH)s}ys_7*%iywYEj!-vy%Ci7= zziI#@7ABiv7_Ay0dYGzb6lEF3fw5dQ!0S)qW^5k9WIe1~k6mEImf?v?pBz9i;vn`= z|JwsM3zx)|%J_u%#Q2${hCq$bpk4?$0C6W`)ORMX!QnlS=6n`BfV=lhjEA3QDa|)x zc0)`W)}0K4lGA7@2|<4Phc6obf<;T0^qq+yeRhTzlj$F&v`~oDKEwzU#q-6nB{s5i z)&jsl`cN4kR#F~o^u->W)3ZG1+${QaJqtbwZW?lulmv{4N2y9ftgz;}pcxzGfLlj;BTE5FavLiNW`olz;0e~yzNAqi z2V^qmtUY9Ij9oFi?mR1}b~VJH2MoFu&{$d8>P8wXhjto@_}?1|r$nLy2}^vZI?=qt z#+}}MclN9udAlxoJB=Q|qvVa&$pm~0>#|ur>%%>5jj?2uX8O%Lp>I#19ee_Nc{)8- zz_2sDr+Za16cNUonX7Uj;4BExmaNokkPg&4Dd)7R8D68cY~<9lDK;WWpa~dA6eL7H zr>DDKThXYk02+elL1l-v9s#b}8epGtnkn6=*T1J8h(BDKcP@Z;5pA|`j|B8=O>;{Q zC9XXb-}Tz3W#plBXu*;m6yCWr2XF|Am^Td~L-NrcF*=i8;J+i5)7(NiyET-tYtdN_ zC@!lVnp(IvC#w;nkUUnGP;t=FR?^d|os@5ES`mYqaP4&O)T(wuhi?K}#Ya~)tN^;E zsoFG+HFa|s?w}H8(z`}TNRMdAqY>eK_8;xp7~9h%Zh<`jhq#uvxFJ90XZqd5Qo zzVFGySJ$Uf!eu?~S@X{hL&c6_L=Fk?LmZOO{dD2u{T z!aV~*p#|TLN25SYJy|_iJy$(ZJ!h~Q)c~xXg45VBS*|Qs9-J@`*;5*K=u})l-yn@Y zM747k$ZMK#04dP@uZ%6}6N;_Y0UYmd5CaCl128FqWFWJt262E*%B@U~*H zXtLmyWdUKV5y4A{V1cYY)f6OKT4dZpWMBs3)`F^f8F$OOWVpvTZYS}As^tXV2ogUb zG{mI|^#U0qtPpkyhlJyTAPkVJ`>ZP-4#a}$iKfj*n>NSj5m1k*$Dp-C!DE4%>K(%9 z*hT8$9is#Ef@k$u7tHGM0t*DK8;3sMi=4{9(Es#W+?ZZuFBus6d_4PWgxCcTdmIc) zAT~0NW$YN-w7Cg2HR9Ome+Z87J^{(BQUg$fWn;!RX5ljI^N*{93z;v<&F{K9&OMhe{CXPT{j8x+_)Pvxkc~5lk78cjA3^D9WD(aSG+7o|TeuBE zyQRe{rwt4p?YG;-MJ@p1^C^^(PS5%7w}r30Cqw*L_k`fs^hxeHp-JiU+{=RV)0^EJ zL(S>uisz=CBqswZ@?odl@2~f*@OAh&U%GRbdXGv}l@F&Y5;{O0MR@2?zp9c&m^O|> zRmDXr#`qRbI&bw)QiqNwG2Nen-Tt93b?oeG@W<@~Lw|%~l0^V~&dLkGXZB^nJODNteSmBl^M>*Jq>EE6wfUx zk4QCAoy18tBc^22Bg7gc&1xl!q=3x^=X6>i2~rUOrbUr_v}95+v%E4815#nOW>aj= zAY6_@*ydR5JYeht5c7cDN?B3tYpm&J}a8C%mu35!Uv6zr0*oUM7Vhh)3V zR&vP(WpbI#;>yE_HojUmuKYL^$uy{w4}c6041LM)jRJ9(!vPRaTMUV`^&s?AKSe?S zPQ-mqCqN=?J|xrTLv!8J4^wiVY`x8~YSw&e(}~Wbl$srLRaL=1Yb&I_w8L@H;jv>- zQzvc;??(z2Eu3f_;Kuc~iLB~NOKWPN!pmG`Y2(I~mHH)G!IGHfy7Im=TWiif=gi5I zC!XWY3AYF8a15WxMi0MP7XcFpQgUC(`bzuC)dgE}w&Zr_{!sa`?WTes72h)E0p$_f{rL|R^hJLW^%X#yvHqWJ0y!p- zYXU3|ZP08J$T5Lj6UZ1CdN1zItXeAP=h+lKq(#$s>*$Qo0C_Z?9W17J5((A>>w?RJ zPX%8Miq2pp*dBa8$VY-V21)RzfJSM6;f%J$y)?Rt+BRxJZGxhvFiiKH3@y;ZSZc?g^Ba($`C!PO>N%(9e|U z1bq~pgBpD^sL{8AD*dV;BS7@&BnxY_AUS)OW$0^=a*H6nz3El272zV9HBAP9Px@)v z44}yrQQAsVDmrL3dS63Ph?OM^DD8^UL#3pqw7Zm)QbL}KSfP;0x{sze16jlXT0#o! zr-jsXw2k{3v|Oi3zu(C|#HrEv&Viw?<6c@2r-PQlX`|^mMb_Knt_ElJ`v}*dIvC!9 zV+{)1w0Vw6Whp(4sc`L_t3sF6yYFU7XOnc8J_M2r*P3ISf#TA>-3k4AkX@iR!#{Lt zKak%k=f&gsqcU>@Z*kP6x>b+LiP?57j4TCG7z?A|l<9@rEJsclW#`y!a-kB&1^E_5 zjPYRM+Tq4D{E)KFTJ=JosF zmr2sRl;%fkdY#u?aN)TXc|UyN_PR;qi+-@+qMt5x_1L;vFI?~Qm4vT&_D2n^FI@EM z+xU$14V^7h&&UbnmCn3$?)38tBC#14tPRXxHor0_J;S5qmQA{F+0xyMABRS{8c0?( z@VdZP6NS+$q8Ma~GXc>ABmgD_8IEEYoy|cXrNBZ8%$qQqhWb0#2~fCNA?(ZLk{ zc^DQ_VBUlwQQjC_I1>;}Kms78q$Wp=QeYtk=1n+W*zU8<@ zLY9c7!_sZpZ3KN_8L}u53r1Mt31<Y$D>G+cGdg~@8=akL~$6412v%|Y}oTul%;WisaN;+_w#>! z_0@0E_~PGiQ-|E12oMsUP``O$= zVWD!it&M9DT9h`M;!o!#SGv{e1uk@$^Yo^SdR~(YjjIjb+;E%{s&Je!fl!-q7bRB` zBY%==gdXo_93cf5J4gXa{TRU5M8*c^=9Q0;Fp^YB16Gp~T7yNE#=alMVJ62=1{Pq4 z$@(}<*2iH`(n$@DTx4@VA&{HVU>oCe(ixw_I8)?cRN2ND9v@?K;*fO&)j$*2jC7Hi zF0!$7_cfrgAxdHyJ~R!JPfB7p$C^&YnuY^o1}9r{46p;J+2$$Bmc%U!gawwB!b%H| zn;IE`3-7VI7-MR+@_t6kc!M#eNTOB(!9qHHLLRS9%_!}f`oJ~6_yhJ`@YieKPaJ!? zcgIz|eOK=2B_5oA!?whq29NypGMtI+zk20Yzxl;0F9XlC0|fhz0IPiXBgS`n1Wxpj zht&b~FWkqT<*g)kmAc^ zzjmY`h$G1gr9=G(;PK_d*dn9&HtGjyTPT#P3s3|V-FJ~Vgt>1_5~zk0GM zg%~g{x%xyk8-ANcQVEJ9Fbsky&Ddw`*2h?%=&~rXA}O4xMqQ#KjGc;`j+`(O7F`PB zF#!m0soIV?r56o$k*hXsoOIK#2A_d%X&Cy5_X&p}zmpVO3~h!r7+@Vekd7Gp7PG+( zF3eHvPMb4RQ3}&C)A`K8bfM4=BYz->ky}$~O=?n<@lX&wS`s@#|LG68t7>YfCINVk zV=t&LxU1B|u~K?arN|h;?z7k0ud?&CuEnlxVQ#*!OtRa&E4Qp0k zwkz?;TR$Jdmj`a&(R0~__j>Op=U%kxvMa98_P)5bclGigkIww*4Tlo{{D?|+2jH{= z9RXgcl2NGusYVK^UXI$)CFm){-ve>(;qSeT)m76mL}_cd57X%yI$T$6yUSIg5KbLIbFF5nU$dl7wUXBPbfJkTro>f8)vXj=`qzvHl zzD(l30^FPlTT;S>6qq;R{s!69Es4CzlFFtURT%o(WMO5|YW@yqCW&l>vY+JE9hMqtLs@L}EU+8B>#&P zm*E^Pi}Pf0(R@*YLH;*n$-9pY-g)oa_a@uvC@9;XDo$3$>sPNm*c06&A1%DjnV`^<#Oy4 z#fJR&kRSW!hA2hwQ3fY;JVZJ|_k?;vLm@t7GwGDgq+B+gsP#42@+?X9AIMJ@&GH&Z zQ@q8Lg)B++pM@35qR;|aXx2>YXJH(Uh0tPI<_1T|KgPiHZB|BC1=5kKrdn44GDarE zs}8%0U3P^LWoC+sE`{NWHhw=)X$~0SG5gv$t4~x!rrif-hLWoa zDxF93qZJ@8fy_>aqj41GYA$^9ocrrkYroaCY2LgWCiefhf5yhTiY{`~VBhs)r_Wn( zNyvHZs2vW z%?_V{e5xhpR74-(k5kP?+1Tzjo62oAm0PDj@$3e7o(&I4a;>Fyh13CkbC<*;5Pa^D zdZa_rYmz8Yy*_O;iE53QR7GhNZ9GY*Q3k*??>Z-|i&Swd6Rt!S;|9bw#_ zHK{T!wCahY(BT=MsvbR2O`8#16*l8v=R(;Txs0Wh84Tr zLWbl*?bE&ZCB6Uppz@*nQjRCiq_{l3f~(~Y*m)L| z<`0(pWtYw6G0j->+ucwcpveah~hQ* z6R(Le-tX7xe~<7YpC-KcQiKr&7wX8due@oZ=82Ql3M! zg|S_B8uH1dAe+E7yw9p2g%h06r~5%PVY-i+Sd}T9xO6^}i6+2UQqiRU;zQe>oYlW| zL;dyD!hylR-_-QLj|Z2Ndv{#0;D(C^4+5+FG$6!PK+EYI^<2gwYP^6%$wI_xo~y

=j@&X`4_bFO<~45kX105C;0M@)ST98UxD$Tc20a_S*q zA~C9m(c>7%%^}iE^LqyQ&3QS>E1Haj2{@CJXeQv2N6rYBJ1%izCq+Fvb;TjxooAV#?(j=MnYa8p-Ok-gvPfBPb9C_mfCJ3m9n@Z_HWu)mA8;+z;@l5eA@GS7J@T~CP zN$%wCus@(aKu3t6vYxbZ>xHeh4tux#LEB!-K4q`X=CfU8`wQV5*~^{n&P$w}6I1nm zbPS?}S^>q{h3*05I*u&J>9nHZGNwb(Cn+g%kkjl)ac6@w*TE)=9NA&0w-M3M(C5i$ zDAyW`U?7*klQ?3mj&R(-dmJ}v4Ug0HI2r^|386rEvN1+!mlqESB0YIt`<$r|GQ5_(piz zd4hI`PSzg4n}E=yHXVh3I^DGy#Ph}^8?FG}yB$uan-3V%k5)Gmy{v|ohYDPV&}B|N zmb+=+NGhr6aK}~e$@t>QcM|{V{Pdb9{up^Gc*)YMAAR78^*7)v{rg|V8CZE7lS`kv zH@ucsC(W3fWUfh`qzGD+SI-(ch-0z~K})lmcg@NCoLB za5x1HrNF5pussEKq`=M;n3ms!)fCvB0=rURPYTITCI9Xe*p&j?jfpbZoG}BU{rmVF ztGzsrKgu7q{K@~JCcG(})QDf!ax8(cX5qM;%ycm=9dJy-Vh-@o%4>OeSKd8&B+u^; zIr4V7u#2Yz+QsInT#O;4-Q4A+9o$8AxqjNoU4-JPizy^sA|=)?O4}*Ix=d-rHGrG? z0w!rm&UOZLoqXKh5XjpV#$lFIIGIzJ79E;mb5EoUL7mmQwSbxus4Gc^?+54BwoLtKGjz=A>T2Lb z=TPmE%g^{xbI7uJJyEaC6~=CRnmJ^dRt4WHo5U4W2`O|E+nUChRI6m+#7w4kOU`D; zYHCKzX#4#1l&XD88SL&YeQ^D@A4M*H`R+&ia+aOhadZEY)w3_1z(;SHyL{!615fQ6 z%qMrXEuV191A{*zz2}}=f5#67-$pP7-VFqK5cnZGFmj{W7?|1O+TbO#)LGuM)w8|4 z)t2dWIFLV($t;hkx-0ST)m?oJ?x=il=%k^?ax};aZ9Q3~Ek=8Tu6dP1S_s2`C}1ZB z4%$uhuq!r(gN_Ef#?&C1!Ihk3Tq^?%{m0jFtBDmlZ^96cDMl2A15Lq+%Ti?yohzBE zZf;^hhKUH}P=WR`V>8-*;XMx909UrZ&EddE#z1b%dfS);8LKhm$1+z|DVy#iSy?WC zsZuLHnv-=mDZFV;+f9w1CtgZijW2lS?xxveuSi@Y9B{Z>_H8_v7#w_@!`EH1?D8}_ zZGp*&dE93}Su;@)DP%3M!fF+~#nwFUY-_Dov}6P`img#^aZZ(WocAp2G;f2n#JbM< zwert2$LO5m{4;aT%%7dVtN5N`X-H6{7jAI7nw-wW6!8^OBZC_ zh9LVnYeqlq-%Owd4q(_;&kwMkr>()i#fkG!cEm)Th)G!@24(R#L~@^XzUqA6IppLc z&KhSO@F?aO?^JbSH@d;ejEtff=7Ty%B7fw%Si;rOQC zT>s4Z54QZ_o}Ybo`-2x<`0x|wpZoBV(7e3T)k`aTuEo{w-iGmYw{@Rd|K+RaKE@UO z=Fqdhdj5sysU;^j^ttef@H%p$2%3OfbdLFE_szaLLw9CA$USU**#7jGH{5Ud{t)^@ z=9^`2jdOI!+5ma1FKb6`3B8UPjYl6OD^LuLCoAJ>T`qR!w&z}w`$aCFd$U|R0D)E% zyD>Ht<6<|X0NnS=R+U~5S3)nNUx)No_GMkoSNxQ$MEPVj;6yrv@S$oiJlSgtPV76M z87<5?Hdj44=a_ne{+~FeGrK36jxh$F>b=#$ql|THvAHXH|530Er-E#EhE1q9<$;OPc>K?fL_Pf?m>AD(56G=FP zGD$w0>0w5uaf?f}2Rt5TMR=m$DmLJXSur4o66efxXg=fWs(u?v->C#MFqivyM zgKf3reE0dDYuwMcKMZ{sJ|40?Yu)c5nTjfl;>+nFZ+d!2P7iUI$f0!3o~hEQraIv4 z25?|6EhnM{>%+vRjF=`;Mo?gr>e?HWF8}LL`E;rXA0(H8Ft6hAahq#z4Ovdw$t8p* z2S_g9?~TT^5StXLhHjxt;e*wTIMF#EHW9SLF*@cj^s~uHp|~ZirmGohrYimnWL9bD z10=)M0teN{Vy2WuO}MGEkxmz>sy!@8b^<(2S$`X`dF_mrc?DBUaZyyK3Z1m9XyrI+ zN;6_gh|W<<@Xt%9Dv3Yu{yV;S`1T7f`!Rmn^W|?|KRM%}=k8mU`NR{Gs#hJl`0$5o zHvI6%J3X(y{n-;s9)0G4tDDEdsJdwAW8MXrsG!vCS36&F2o}j2Ahn*^X=eqegco|2r7a824{wk*SXX)4(l!KFgwG?}#ckH} zojb(aq+8XO0`HKw#J8+}aE6ja8i6?9Y496&HTb(MY<`idbyW+oFe%%NXc_uMkGQ|V zvMVxd4tkoUXkUY?i|LYV$r;GxyqIjxrsz@kHK1LYFJ7CpcQEDRq&`SDZlHssfpq<% z7F5%LmFp#%^=E)`J~-TPIN=y?;$0(P+#b7^3B-0gAJWYpgcP#}CIS20X(|C)nIHA2 zlsvjrIvXi2+VJ{4+j_T5UjO>NZ=CmorysfS!bcvt_`yaD@Ipr?PUr`-ij+Yaz1}^RR638#;FeY!A)m`>t^phPcmTwx8PsJmzee+XOtO(!&ivib9I%G=SZsGx_Nb zB{MB8-A${(>g4&%bUU!pQh?e=(M}f7?H>W4or_N38~TsI!|LG}?Gxp0o%dqrS)ubX zc4pk_dC2p;?Je6M!m`B^a1@0&kCNv0cwTlmy$+Ap;j{xWjeBU;amPIl;&3?QY1k;n zekYG#r*ry1XyYzgAlGuWUA;uTQRUVDcuqdR`b+=@Y&Adv=A3+Bm*##3S0E?81!9ix zb?p7Fx%tS*x%m;Z^G(&rU=pdBI&c6@AZ{MrA&-s;K#Wl;G48jF5yn^#KquhXJUyKc zqtjuHrhI8bDBbRHz*xqo=`;3eY0h+>b&+(t)6H3Sf@o~*Pi zPB$EqD6g^Tr)jshUDp4^b&Ibnc;p81_Tc`yD}HbY%UiBL@ykKnt?s<`@O^jm*46mP z|2&@9wk&b-H!uF6_XDW*TcN)cfvhQ@2UvfxVZw8n0+Ka4%SayDD?!&V?G7DDt4324 z7yT|>4;+^6^r8P3^^;<;Lbzn5XQUkJ-7!S z$9x3W;5y7Um}WMY{~;Nj7()&EbCJa5;QTymDBv$cgD}ib+fnuPE-D+7@6z z=x7nmcX27Q)Q$%x+_diM*Vb=+|AM7Aj&?n`?cB#6+S0Wr(JK6O=e&8>4c&Hs;+tz{ zPZ<1$d*I07SKfT(<=+hrp|gfQ;nRiZNfc!OpC*B%{~kgpKOW#nbzD)zMIF`M)yJ#3 z>hzT}V$cO@o+jC-km{0}Vigq>?^p_ecLk`D%Vv02Y_VI4g7#2Rp}nZ6%04cwGCZMZ zW>J&9sc5~uwP?kdo%X8=?*Pf{5qnyJ&ftoR@)@T?p$CJH7VHZiEI1r|wcxjD?-s~Y zeK?cJ=Cs<~?qTbM3d%IsQ7Gb%1Y*TSunzoq%hHQHq9FBC(KR_Ps3+RjefIb9@6=m|Gz%9UEODOp*s5W0I zP3NqI&1y4(j&m}_4EoEIIR(?8*xGOjHoLX>c(J|4dqCyq0OKi?HIxzH>4kQgz`x>HS>GQaq zTBTMUsv`GP;VP;%+0PUsy0$iMY4GO-vP;aqSYnRUCB~G6tDz+KS@BhoM8q1Ah+fk$ z+-urh8|jR05FNDoMaJriY{iwx^s6H4m?Bf7ii~#^$Bs{#OK+Hb)_JQL2JV&sVro26NVc z-=FT)?ahYG^lRuKR>ejzDpVw8;!5_TCi`qCJChhTj36QVbE3c`IfyPSLnN+x_0#L0 zdS-gpjEW8Kti@%uS6^~oMo(bVYu8-;XuWFjXFrqfUwOEFS?R{sb@xRxE?+e5u`B0Z zI@jy4hjR0jO{30e+#J|^?W}n7S)_zVjK}X5q^kvUN@lD$yY7tbv>%_rpCp@v z=h=+oIjkS&AdX1Yf_QpD!}7mSA-p}$ zUT&Xi7b?6J>5IuiWxjVo`dYGDXtAvFu1G%=c|&;9^KS4%&xhVG{C^F8nDIemDB_Dm zVxekZb!b+oBeE+ZjV8JF(Y^_!!aj@C+NXJErY}|+>}%~GiXZ#F#wQ#qPJr(FJXdniEZx2a*OuWyFv%-B43lnm zuB4jgV1{mSV#Bl2tJ3?@ki?s79y3!GIA-b-v}|6Hkvxg%8tDSZ`jiEZ)INqO8dJ55 zRLRK1sKHqEQC)oe8sILeS_NLTetn>;S0{a_o}nrAcqgae`Wpx^dy`DV@2^u@ba=%GHzI~fxt+td zd%Sr1>K9@%CcN1=oC!dFHe(sM!=$(@xzD~6wQNIgKsM&;69bNyH58(#tI!<{RH1Re zV~h*TMAKa}-O~e0&|=pT_u_zhn|zy-xB`K|x?uEmxh*z1kR~`?stpk+lE4L2r_*AQWddaixZN%nl0$xfNS$QC^Nu25k~@^w@=eB#=+nKzIM;UI@t;Z=M07dgM*>qV1P}lQQ8H+nrf4nQT3Ct0LC;7 zoHIJM<057+_^k^d{SJqE_%NKR51UZx3D4?rE|}HhN?ADWRzO@ksV@`HgJ(s<&y3aL zNVhz63_s|z#f3Q4G2j@;q_~r=Bm36GUN~;Ixn+Si87676VP{D7x%zr?kG`JVZ9iqn+_&k$(Q`z#7n|~Q#C)j<*&KidxN3G z-~MrJKlkL<)A*+Aw3g}L+z+%oMAs!#uLsCZ()GS&GkZ~ggWWV-6-?w8O~8`0S2h8` z>@uPWSdtdZCLoy;#Yyv9$<*)2ax#uV7iAL=Z{|5SCNi>#oCGM&Nyr9-@nw$pavaau5wY2Mi91LRA{h~UPh3Gf4^hy|3P_P_ z_6vd%&xn*Ors=ezYvl~_hEiB%09VHCQan4STUc!@G1~&j!%^CWbPZJJ-q*8=GP0^c1oH&A)gD@8^$c)>u-R>1K!$NkZ z*REt@l&8{hmFZB`Oux$J_n4IDXN;xaPcFH6lQ57+MTJTOQ_TYl!`nvx_BFqPhh_s!m9s zw$c}AK!qh0Ku=Qze1E={qh$@48X(3$Q%4u!y%-CMy@2U`?DnuXn~nBfdstv>b66PG z`;_V$A1pD41XSZrgU%%aX>|#6%Ux*+1`NPkhdbjD( z#(}$Ud+I6O{y~_E@Ag5anF4H*V>gd;SlOT$$K|tA6m4 zv9)u4)He5t#IJ+{X&JLuCSE=KP$Kb2bLkV~#@2rN;79)|%A_3K<#4K`E0FP}-(G)g zFl*nr+W53p#mT7Ov4;4xwZbW>ersj${sw_90H%vw`YOk>MK68j75a6|SpAxvr!R)d zOY@gIg@~|QcwgY_;B;KzB0`7IEer`fMo1x?ZW>EdV$&KRLzVAF_z*e{$ogHrFTOS` zlu{S@v4y}$HVl*WRlooYnFwPn2S#)Gkv6kzrF=|Z5zJ;nI=@Zy!+l86tzQil<>mc! znF4K@jYA&`PYbW3Jp2&rNujVeoJLmU<8x#Wc5}J8D9i09c_@?lO`yv{#6=j3{!9m# zl_^>i5P(MVLz?VVbNgkbyw4AkG_~oHM17WjT&0VfO*Y<`cj7v}PbHDI{UnU0;*bx>D&Re`s``IN%N?Qth@Y6WA;ReF+a7PrqH zaOYd|ZTa?bwsH0f$L%g_fxEyn!`J9;^facmx?4T1Y3GUC?B}`8_nx12rG2OCI`?&+ zYrMB94_lv654sL`KT|&T{?k6Fe&roX&vbhN4o6Z|D3?@H9cTD9@ z>S8LLPMhj-yA{L*y&g}VTk*n;)8=&9@~jH<7R5tJpjD&^pma5zl%zkKPSOWR&0Z(e zNZdO>7RIeL?zo#QcR%YU?g2b`pA%=J+OR?&u{w)uwlTIk8&_`|vJq&2$$ceGs3B6* zAJ#5h6No_-4$_5}p#WQV8Bk9g4bt_!$3g-17=r-4kLjuwx(ZXKt1yMp0cPeyXO^iJ zrCL5btH-fmR!?A9`*9H2hCV^op-<>y@Wz-a%6f<1+gDkoWLH)Jk^N+ET9qq1tx6YU zH`89%1cFH8w`A2lK|048SK5M3r=qahWIp$FBaM8$?^H5HiBDIQP!ph>>`S~8i>qh& zT~WcB*!bMLvFu3fFa3$ONx5S#Y$#8xeMBwD4R3H}@CAdnZ@u)wZDhkYzkF(P;{w`C z?n8*DtG%q~7#r)-L?Kg_B?)mn6)zM^rWMJ|Q;1h}mrDz|vouAs6D4HlEhe*)RE1cQ zGtrj+SVs7|-(n%(ZI*1Ccy_A)x+dKqy?U;CvT4qVqru z+s}_+`&~)Xo6Bxb%#+>}-bB;UVqC#$XEC3p zYQC(jyb61nqt-DqFg0sh?zEZH8x}gwFLe0w3USm@lo2hg2#u?nlGhMu%s4x%p|D|Q zV?#@zC2vjPw$S+*ow-*At_WS1ac$O)Xwae7I}o>kT7W3d{4v&gE3rzxgJcGpf@YC} z{Zl4zN`x9_Ou$;KBSvBe@Env+4(=mi3>_*nr^t^o9s8Mt$=43TUo+|6 zd5sUZ-v9T`#dlX__wC9o%&2JSyz;Tc6GuKvT=eFf_=o?*B3`*!e-3rafy6^sEDPO+WUt@kcbfi(~?#WNHPa6uI!L6sGB`D(Z_}Rkt~87MEfB}bZY`b z?M8bb@gy?%or$nuf8vR+|3T}{1KqD1T zXpux2cuv*g4kMT73}d>+`_fBsY;zOp4DUsX&qJ$yRDT;MDo!S7DOjh2Wu>}!oKpev zd*!f0$h0)72JPLw+Y`Ec+w5iG@ul;pzWOS6$90=GluujizDt?5V&!$G)=>I*6-Y`E zz;G315I1Y53$S2w<_Z-;tsvAydLkqe$xbgzpPWu-K*b3jIvqOOH#^iMH`$jsn|$Yl z*2``7b~r0b1J}GC2hejV!8vBjm3?wGUPVRI(gHhtD*eRy%?1xr`tF~ z!yjzm@(B5E%bQX!(X~fjdF=(dHu%xR zd-!s61Sx1W#kRc)hor~E0bC!CVy>DHtYGTC1}I!L630su>X7cphFS>RV>Q+$vz7Oh zO3|}=OdUL?4|L(Zl9+UCQ)0Td@iKGk%6&)b7nfFz$S2Ftr87Z=e#iVQNT#C0sNi5aFHT#tP z6~O;wyQ&l_BG_G37N0x4T&5=i1gQ_M*tjZm#ib=Ps~i=;iP^GQvh&K34^D9RPW8&N_miXV^BA69Elx? zp^~Hn@JdCJ9=CK`h-CnW_r`^8 zfd~KrPetN5+xppW=~xJI#bDE569^bbn~Y`e$q8In6_qK5r)C?WFBt-O3jd$tfSdZ< zW^JA7bKB(k@so+RpB>GM1Y&=CIEoiILP( z-_KGUFxZXRenYu$>XL<|-$|0hPi}-#If=olIe#jONmaEa#Yn+1Jk{zPj^R#;ArHr( zelyJCjp#*s@k|p2kxy|eKdeA^3|l)mZOIt!6kC0HIEFMFLrF1l;D-f%S9VH_Pg0zJ zeqyHK(oCwK4PWLkqP~~nizx}4X5VhABx8mwy2?v5=3C!jZrXUpiBZU<+4Kj8`W?C> z%|r1L3c2F!UU6|4*+A~Yq5yJ0jlUDH)ov5%KwxuW!YjN>F%~)No=RNQZv2S)))DoM z*pXo~35I=!zBU$yp~8!c_(Fx8*|u^f-@ zkK~r~qRrwF!H3pTK9S4`O+5oY4Lz_pZlNUHm<<9=j&2tQ07wmxXvi}r~J9KYn>65qCb!hhoY*nL9$+LCS+X^Cy@tctpFQ+MOb zJa`&pC9F7{yc@Y>NzRj;c@Aox>yS7*w&mFehTe)-(s9)e)S-wCuy*YAh>Fz}RbsA% z{Cs7ZtIc(xYo|+bDLl{$+8lbroNkd)5<3C^^jS- zTk2f6-F1nJxagf#74Ql+5yS!UduT5{={dQE@e{#0Cz_f9gH4;^pAx~Qz;~Oj7*x^4 z&i{esisVqM=|N$7%<73ONV>bSYc`EMGxPySK_5W>f2|*lacXXJs+Udo&gv;&Fl@ad z552ZW8iQGQ)`D3*WvQku^3Vr+Bu#(l9_d)?X`1>zr$#e`k><5tX$;M#7mX(e^z4&4 zCSUibzU~_Opij|w4Y7qdrh>>Z^u|7S6)J`UXuuv1RSq?pOj%6dd0}&t>9jQ2Tfgs* z4i9W}@c5bi442R0S&4%O9;xBW9(j6q#TomaO7tImr0{nzT-iZ|!>lHr-XQ8mdt!sQ z)WSLK{}4`!oW(}DT2c3dPIPm6=H15xI7$)O!mvf$c7?b_&68CQ4RE~AtrMSqxVi-v zkfl?jD|a{a_TPCKy_f}iZiM#az;iq zwDxJz0kFP7?xT-we3UI)^xPs5h$$FyK(Hk6zyERjWk(!tQMBvd5~w ztegJOtlaPNSoZoLH?Oyvo#3sLy#f02-}Z#{=(JBY8Ia*o4bfrHsc;q%Mlc!3I4|lG z$T|@>rjaqQUO8BDUEPl#{WP&2Kl@(d-b;i7r=Gz*iEV?cN#y(ll?$BEkNyWZFqOn~ zxxhZ$OVlJ6W*H9TPMZ`+b7HH=6AK9Tb|{N68Bh{qql$~^|MxrH*qI$>;%RPq1E!Z?MWG?!|ng)M#De_z}KMxy`zt z4A_2YecACV^&Rd_%Wv#|P(M`M=ICg(A-BsJu!Be`($46hkW)m&jueH6h+zki@>tAJ z^{){{PLeGaEQ-(rIL_*Hst&syJDqmbijjrbt(;9&L?>}7>I>)v3sLis#fy-IBlZ`d zU*y?1ug%6O77ND_5s=zuLrR?+yJy-jwq+~MX3=tSTmja5e_X5=yP1o|DRGC!T}-m; zpz3G3E<9|k-(}o5Fyrcn>WO1)8Po89MDe-F7;c&j{eG3xxkF~djDCiT#8m#(1|Ii2 z0vT0STHn@;DqFU{ii3mR1E#9XC23j}&d#c`#M7%xs@%vN2ggiZe>iSq)klR4Xj~J) zsu+S{T;`_?ekH{+E+0Gb6^YybbpPn|;=I1!C4PXfefOOSiBCxZPJA_e%;d6f61Kr# zHbL8vio*NW}1A`BerC(1YeS>r0 zYi>hGbW)ufSIRzxiJRwTpVo4O=VUz4C5Bq03(0d9!f4X-z%+2Fbk8`Ez&QF21}u~%KKe@s(~ z(pqP`!tqNGamrp2micYAt8Bl7st@6X%Lz3twz;=%j2yhNW29{`yAOk4d<~!%pJzIz@Q_rBl z(mPbzPAlBqZsI;b9)`{{wpRe=6OY|%12Mt0J625l1VxM6F0o?k0r+eOwnAJo02e3o z3YThwaZ>N0`x}tv>`<{fKpOUI!U~sov)NL(3#Hs1ZK7CR zo#gH5FQgtjHd4m{)FtVpcF9jctp5fu_ANw)-ZHi!v%#~1R7Tl8^yMChLLVB|z;Eo! zs&W)(F^k}Rl~sn-jh^JmxRO(ZL z?c}EK;zmaw-Pvcj4_WB416I;B%4$5aE3qUf{OxNmaC$Qmt=tFvnMg(H_-Bm5w^>Py z6a^-dS>!yMSd&&0oE6-ac~7QL?kNw~WKQ)=4KMI42(R+23a`lQ&U{0B)BTb7sqM3X zT1c{Ov9u~uVVg;&*_M)4^0w^{fxq}Z4Sp0p1(n9zy`glglHp*lwb|+g}9B}8Y(0JbtiF5}^Io=mmbW@YyEVj?&ss+=pT#c2>EJlS9npyOL&ZfuTJ+Pz z7wxZK{EN-^4Q4%lZr6iPZQFW(qLs)K=i<>=x+ih@gExFVg?r-2k>_80ITa z*Of44SkUVXH?r9r{*4k&PU9n4`mshdD$yQe-RJ%jahmVUw$gKMCqYlc1+wn5L#z$I)>U=>-PL5(+c zBRn?2xtu~8Dz&dd9cW8NH@YHY7rH}ujQffGX|CV?qWv{=G~*u`E{8kAm65>}i3P5r zbS*O7-r!xF)(~7LY{QzHLB?7$#Rm@;iE2vVP z2=if2ri}|{@)kAfJPSqXTAxtFZ`S+p6lBu4(;wAjEGLaSWmdg%Fmu(i5yqXY5=~!C zOca0ttBLvp0VcCk_kPJcRn^9anbTn2V)L+BKO1LmzL)C#GS#lqaEwIf<0(G!{m-3| zc>cp1gCO+Ny48_PF1LsI*1}%i>x`cqK-j#i6O%w%cT*xL%l1!(d^G3i6 z#zTxjY0|7%v({TzSUarUR>3N#_70=JXgarPha&%Hy@dZZ!BX)ezsQjTFP=)kD0?Y?35>Aa-*m(1b}wMd6LbY6$|jdE3YO)zII9d20@L_xHngbk#Y4d=7vQ!V4hP8IYPJ`S2pmadZ4CEXg4E1BZfy$&5q1KW;%r72 zjiE-D(5j3jA;xwqAdY)-xX~m(nv=u4SF%Am>t3?+@UPB)`Sm#ki)Igs&=l%GtjJ({rTN9h{*ek9ZZTT|fl6gWIQk;R$&KNAzc zIsh!wDsC0u#ckpFy!;BTDt!t!Q<|Mo8=0CrEq?*mC@sraTyTxYkwa~U48v_5$TNYc z3FMnV4#O)wvJT{#K-2{Csb}|T6e_Ssb4f0jpEu4~o-;MCwq&W+kh3VS&AQ&c!Li2M z5;)I#zWsdXMe5evuDq+boz`pYJDu07SLR-xca!~A=dEd(hFCf(E9wqMLzZYEjv`bT za`UBQqo@T)kA2j6;cLPqoaeKT%FNHhd4f+!E`$;?M_Dp6eH5_ydeb%PQFmLr& zl^oN5;rOV$T!-B%WTj_hhGj|QIU?e`+-wK~W-L4^6sLXY#t;r2^Py3US6~B>iZxu1 zSKto33yUBr^u%qWGBuB9@*YKY>O#I_^{5y5i^@}HWO|4y<<8O{t-rv&x z^VO}ty3}#)4VRu>S5~&6VB+3wTVL(k@+mUr-RTbNHnM_oJXXQ96&LKO27C4tgFT~f zCwI`Xi79KoQukd?PLuO|a!y7{ng5nkR{p0dmYt@`%rrE#{Vxm+_czFv2^>GsGBEUU zpW9F8TRx6E0N{gg;^>L`=%?`|_e7p*fJIrd zh@wU0fQO>%4K>B;RTQhpi58CSe?mh!jbJaGm$X?$%n^jG10)!?D2jz6Ah|dONFZ*p zS?0%;ZaOoG_kxgbwP}c(Uq^0a8>#P&Q`y;T4q>|ICc`-)wPe&y8cATE-SJ!&-CSKa zwyS2|P6zeNN4kZbdV(o~u$!(=W@g|5+l_}Agws8ER5;D*@h_Owlb*8sj%>5o_yf>2 zxuFyKVpCl%WP1==U}%!z;OV4AaCoLKg^^163-@BHNCzvW4MbL|2_iZ_#a1jcv&rH8 z*Ii`d;46Q_S@pG(&%x<`9^6kha&r>XF1)a77k=tg-{21^ZaxdAOWArvU8hKrF2qcL zmpBr=sx=#TVBY#w+Zv9zML%7 ztya10$|~qk`AUU2PMNMO=C0y?$4T3ix4E|!j?R6?nbBc^a2>x>c$EK478D*=@NeBn29I;}=50D9Q=NJLsBlHM|gbxH>I7_Bs z)-e*+q;9E4;-mp`Rp0k&=Rt^5v!_-#KXc(r2Y1({@xg`d!vASA! zHxCDN393eOn3I!qmQs?{YPlNE>Ipy}4W}v?`JvyBZ!{$+9)toAo;a$x@B<*y&9Pq4WYr4 z$Atrfh2(dGPoBDseDqm@2garo-^)+nMdn9o9mB?aLBzadL3td`zL4J{Z?<;Yw%X74UyF9)>-ekW zORZPfuCib6|CQ?nkK2Ya1IPwB-7^}eROSfAain0GWE?ZQp0!}hBsW=$Vkxm>DY0WI zULay!&bXFSKE{cWQ*{#O0RBOLX~6a^S<~b&16@6I^#NJimup7KH6!Jk&T@0R(#%a6 zwX}E|N!vB{MbjTBWiJ^ypuS&IZjG93VpXZ{51n)akv;T5Z@LzuCOeu|LNB8YD_3enx9(dNcRpzXHsXlB?P4vX#rX4veu)AhMM4oiUr+b0P>y z^)1h(x`x2(JK8>a_Rwb=Htx7Saq{iA6DNPL@~RE%uDoW=+N&qb+_m7+ho89Yl83l( z;ce^hdFTCm*8Hfj`0&-w48f>$=*FMph3l@keEF&!SDYG}v#ajG?#mv1n2zojCgzb9 zAWy2s4oylvw1?^jGN=yVvOcuiA;UH9l6E`JL7d8I9LGKGy6ZYtr-LVtsVDXM2r7HS z_d6wX76M0!tGsetWtk|^#nvju@89z4IZL0p^t}8ta)5D3%zFlZi5;K6Gx*JGjXQ5W z_|rrrp^YrjHri-?B+n$DeFhOxpN$5w{@7)jt<(nXb*MJrNB-_ zf!^(iIEdqMw^3?JLcdjV?6jCA_v9cK-Ge@wUq%<8s$}p|px@bN05U${p~k{?|h#4dqPHt4BZD0Ca|63-S{e^W?A zcB?3*yPUhc*z5O)Y&LtIqU^Hbh_%LAXXWTDZ@iLi2CdKfGB(J{NTM~9t#V-d;8ceb0v`6o847bwnLS52ObVtbw*`X31f>x z(zhU_o4<_YclWrY0d7p((&lnnQ#Wmo89w^3z8@~#i;yk{yQ)92E_+<0a$JAeq#w=X zKmE;bzPjLc$IP4fW#8O$c+P4V`&JEoEW9hcfgC7|bxv$n$ceqG*BkbS!#uC@UaQ|4 z<{$CzbG+c-{Qf|gXc=)=ou|$p4=oXvSQe{`T+2O6{mTOlp~c~A{kIb}n8|VOOsger zgoZ9Hg*2v_8oGTAX;DqW($7*1kR=$fjC}<^H+K;{Ztf!ZnYmT_33IFVuXV2wQm8uv zXE;qR%W2}AGdXeKj8ZNu=||j{LGUyf>N3zaG=D}^3MfW)Cy_-Z`v6+G>+{=~j#Urii%_?I~2 zcYna)^FIB-uM@u`FXN5)uICaz`Q!VEd-nbkFa25KUx`<7Ifnjg{bAxm_?D$yAI@h! zkgN3-sYu|k@Hs);r5fIa30^O5eu$9)s%bFDeRwaAQJmLeJ+;=E}@W_D)7^C8gka;bXl&jh^?WmLWiZxdbx19Rm}HU zxIlhUrZ0mkU_MDvz~Qx|g0vW~K|tff1+^NI{)I(sPK? z5QvJVZRAJsJf`AxGyN_z^cI;7i^$jtkuB^I7v_yfccjlIGhMYIFKSDt>Dt&{LpG-6 zqG{Pe#Zbm?`D;olh%^5;mhzrH7a02vcRx&5q&sRf>Bh0Ji^RmooyKv z?zOm!*a}~_8>7tccI@N&wkj9S4w8ejN_F=>(Hvk?ODoxeQh;wI(T88@TC?`b8y9!~ z{JO*s@fnwnKWo;s%kED60dG7fI%VmEg|}RnctSYP_;kxT50>RW)4g`jim}{$mv7CS zneBz&+#}h>Z3=~fuD-yV)Nl`{WVrG~wEjMkn? zy@|d1i{!2!DTNqzFb^^|^)T;ZobmVMIx?@*vMNc)gmd#taB`#pC0yk?!et6;sb=d(qxJbBxY2`#_$_ zlje1~l02y^?jo*Tu@O8ea3TgjYEaUollozYWCv0H&<7|71okXV)Xd#LHdDhD>W+-J zI&^nrQ0GZE^vo|=>YgA;cVxN)dWyjLqQ1KkkYJzN#rAKA;_~4=ZaSXuUD&+fqWW=o z+`*0ePGRYV8;@OZ{{P(f_&em4pKLj|_mK-Px)(1{&)+orlHYgO0u39m{QLK@dPm|f zz!rU+=zH>6uKdn@hktzCQ%_Oe?p_#Mv)S&j6LoGg>RiGvkzbN|w#_QF4lL&<%G3C> zPFuiMA@zITVTeGPWzILVxARy4!op-#vYlaMLNnJ$GltjYA5E+skBr8K3{S=*E) zlud@mrKZiPJEa}dS<)EYBTaMxZQ9o+S`e}7GCdQNftN9METU`;lMr0|isx1*zIo%< ziLX1JoBqT_Z|xHfoZ9nl;?(^&VEdvDZQx#hAHmcFmOr6(uyxmHoe4$ieEpkNNNw2 zOVV%}F!Y)&&fJ)gVltT)q4B&yi%gJu0{vL=cVt-t%S6@{*kolI!6%7TwX@;tM z?g{Eywkhyo@L1EaCIFao+0!keM=Zx-2GPtUTK9UAdeN<;4>z)z8huz!Do5Fztd%Oj zf>oH##|FYxZfYJAuJY&?y3TE1xJu3rSJBP9d(){!-=TOUy~-0$uj1gaJAD3XkK5-z zL$(0K@c=Qi>(RgoWV@@Zwv4PZFv`fPwki}N6ta2z5a#hi7=;KxBbDl@YW7CF`SdBL z@P50TqG_)&46;ovyXlYCLMjuskFl~KXY3T5|N7t{i5*Ye7|9x&me@s3k)I{5-dalBV#d4w?$M3IXV zX4G9;as-BrBa9=iz-bt#b#SkoN&tpk`Y^tuFL5~W^FH)lW$Y$5g4jtgCkcd>5hEVT zD8w->qo9{jd`#oGY7vEGO~8Ut#*dnygw=D7(L#QA895}10)a6vE}ULQj4S9rKk-xr zhffW0uaHX<&3(8ASNA2>&~kQj|G@Kv*MS7x%*r|L0{J?b*kwE@;rFC3B=S?~Rf*gw zJt>i;Qkz6%$%?qI2*FlVjpgxl6QLXFvU>Uf5~L@Mm-A6I_0@+-(012(`qU}QlvYg`& z|K=xGRo53z^PjyK@@(Ti#b*dF!8csPz9IU$^cRWjk)D^x-(~zm`CgfH$(PAwk=!B^ zB4Zh9OnywFWzNLOk3od1){BprFX`06(;Yvc@PnyK+!2%<$_#%{{&2sHq;6*S|0`Ww zqKn-neYN|AKaa%DE*@9G@n1r@C(bLJ?pwY9c-sZsKgd#6_kQ#>EBUhB!KZ@c3+W3F zd0%?pLtd3$^^j+!XFcR8=_wD{E$#M@8>JgP zOk3|p+Ij&h7MiU`{gJRe+!%yvK=`0~Y*nujRw1-b)R$DVTJ%<>0N|*NSgj7f*MpPI zTLTST_N_L~N^Nhi+1~i(?`ruJ93W^q_bHjnaKMiSSzXR$b$MJq?j=~pUh;wTfrq>% zz2+f@q(dIkBlUR5ebRj%a+7qEhg>FI<{=$YhljMtEnc!fUSQOv(+1e$eau5^&t`{8 zbwG7u1AWFY^a13-4rjFuYBb;OKhtKj(+ah3B}t5;2(><7h}qQ)n^#P@CgzQ%28Y>$1GLyPvqZWiLM9QucnogVmBS; z-iYVG*hMB-6e2519wuI((b(>gMba$9BvDkFK|o;}F|q~6F^2-9y0c%FB|$t$&PE7H z@R052EM?p8abV<#J61Tl9mgF4bK;mwA33%lx-g0= z^7JKt>L3M<#+Z*8b&y(YRI49?^!*`|xD88w)p6LE`P$rsjPZSMA&$z_z*et4nbsxT zJ-46MBCSf@5$NVdHup_esl3E%KY*Uw0|<8`(@$B@t-}(2FG0cpc`9y|t3|~!fv*-PU|e#P(w@POYQlTc+0!UI zB}i1PuW*(L!g#(KjfZ&Dc?s=uuPBQ3(k$wz#H3@#)T5BZQT20FQv+1(qge}<^a*r~ zr-Y2ICJyfh{e$Uw;3qxQ(;m+Qh+A|4Q7{z$*MRco~y=EHH_R2-ujqAsY#Ad z&0~>Q$fY2Th*CALjJHk@O86R{P?uBpIt`aAn+*z5&GzV12M0%xVPi<8!|8sjBJi@g z9H0+WETKG?iR(@yVukc-k#{OwFw1uI0r%Xzj*!))O zM)*e(t(RQ}HFFNvN4B%pwW1&D`auLjf$kpp%XoIQu-qytl7M)O1dy3Nx5zT^>qwHT z6{qeagxYr6o#mGIFvr9A6t}y|VRSYIr&#qIIwDbJShc}|57MPHN%cAFa6mCJFDX!~ zL`Hhks)zlJ)VpJug42Kec;Zw2OzC0e(8pXe)pOz?s|U4(tQEJAt>V@8 zt6idnc{lF2Qr|!WIMmN)IxUtFviV5EvZUduC8{X@!Aifr203aqoy=OzO$@F2VgUwx zV!BpJ#MvqgYm?@|nkVk5_pI>n9vnsbA`qf`&@$ADe>BvJv)ubk!;NFAA$l{-i@wzh zP_tvP8pdnxg`Q$@@=Q+%->7d~XV||Rd-&-S3(Qa5#HXZ=RWsKYJlFX1%YJ?Y-xGNF z!YN%BbALY-9C&&Cd$eBP;~yn;!gGLM+jQK(L%;0v2dP_~L-a~*t>aMuF2UX8eay9U zm!L~Ht{t^wQitnd=%q7ogxi66JU~|TlB>7@vS2UZ=i54Z%o#iZ)OfIoDG=a~&X4q> z?%@TRo-*#eEC2RK{!tuAd;%r9HqlA~)XN-N%UU|db1_U*L5v~E4P3q?KFJGt7>W7< zNa|~m(!0myyVe;~X@Gwxs`agsOxNqsI|QbJqAOY$)n%i$q5O9N)8i^jyB1&n_S=b8 zY2Gbgy?qNLnV)FI{j4O+0xs_7>DUHe8$;MF3IZli@?0ME7W}t3b5nvIx7@ju*?D|t z5inszzz&n}4;KMvRZz!eS-3yZ_4eEN`b6t3Vm>WHCpyMY;P(MaHnK8A&?XD{O6E2R zl4#ka@XA*L-c&>CK+p@?bX$iLO><6E0~>R+x*C<7pe12MRX~CwF_(3F+Bjz6P+D5X zY!36Ng@a39l|pc0GrsXrd}CtsF?`d*^!jjO6ZMUjHuN#y2)uF_MX){#x}zXtd0f4un4}>K&v}tW5M9V3ODeKhB{i(rBsE}nN~+)C7F~Xahx7U! zK9c5l1W8)J9wKRBC7ttzl?=`suxE;{fIT9*!io|O8>_1Afk2+$;r06+X(Z3faY&W& zT;c%U7avbIzEl(o3I_syKT^`XUYB~N16UD`oQVQA+x<7&^Bi$kRh?tEgE+QkDL02L zH$%FB-+NtEY}qZjw@-V-K%!&Rt%-SMO{tm298VVK$?{~aUHr(4XC=PCC5vxej3+Ms(c&jwnT36cUoF11A@RcEt$4z$ z#4m#Q(Od9_TksQ!1@yQjamy`<2K;EEfz;p)FzTW0LobWF4Vfs6@=+Ncuj@s31$TwW zIyn>$50E?J&Op!`2m}M+G-oh0Hs*eY>_!&cf^1|r$ityvki*avc?C2)0^y^{?%q6W z`ZMGX6obAumfX>o{dk2)@6+Jk2}xR*UZC923$UG1^_4;T@XG4^n9iD48T+j;3;V#7 z^WyVySz%@@g37e95j-jiP)RO8cH)d6Kc5!CE(IWu3{X)8B*AYGJ!C6hsDaOK%>X_iuqO4FpE#S%aAF%FA{DDl02dkCwte zB`l^X1=V1i>g$T~C`UCg-}7wy-M8-CyZ@>y_u#52jY}s_g@en!>C~U_hj;%79_)Yz z6KG&<<5GUB#nGf%=SSo`jP2+^eO=S1%6bB zv0cl{ayjzso-9ps*q?NVCZy-(dndT_#QX^bPhx(8_#~>w-5?>g7T*?sX z>d9r)6V#F)x<;16?$qL0r`HlrbHHHefblQ~r~<_ux~Dp|-^q_gS&%=IxP3m-d0I7D z)D=s*&Jm>4Y9g!eC-v7PdMg&SoS|CpnsxctQ`)c0tK9p$=c7|9?oxg0?oQlx4V}d* zM2PR9R^fQTw|oSizJXM4gWEyb2Pg20Gw^hIhJ{mPtA!Z4Xon3s?AV%VlVu?jWQZCV zDF+W5dgs_&`!O-Qf7rpk90|5^_&x% zsdC^{asUT9&*%VK*lZF$g!??4N?aj?BDJ>*Bs|p9Qn1Hx9SVgjfx|eLGln=M91pVk(iKhkj0tT&Tx&%w36j z(q&&>OjD0@tH_&>dH}t|D8*S&SxOj(f#0y$98T3GiB?Pk&?P+*;yKyxwo8&I1pK}< zkK3g>?KZ2ImpB#&|Roo>SD6ga;>O@IMj1zuQjs)A~bD+2u#s(Dq9l)B1Fj=({^H@ozc z!5#af`DLO+bz2f$PmxdMugYkA^zIoR`~%Lr_R7(hoPS39xfANn8ozBz>81P=H;gab zJ9X79<;6D?IV!GRRCo3DXDzyMbZ}@0T|V>)_W|4A*KX|Z`$vROM%+noM-Zg%h|4tz zgA6>ptuNix7o+gdQGNo{Y?bbTB!1S$%5AZ$Vw^7vd!-41nE|e_AU~JSE~-KtCyXZ? zmz$fH83i(s58XO*bZP$bvF&5Y*hIVnR}_xMN<1UGT#38AAp;B={aM^s{{DPc(LXh<07umL`;5?eGb)f&l!Ktvqi5KeNn^}bw;9j z`I%=v6~U3Y22Ri=1%uSPwz2Hl+@|W7$_y53j%_w}tTGuRRTlxx=3`bk zVUQfXau_%|$7l{k^C;tEYl}u5qa*Q5i|Tc-h0|Wk*wWI`6^un5jgy-+lmhkBnIXm# zQQKig27v)$CJ}V;Id#PCr;-oUm9c39HIK*#YDftq+u16)kOp6eCnk=17A&uuv|!!i zXPmWd!m^gqqFDGyW=YA6`=`{dxXN|-jx6^b7xwJ^Yq-yO%ewX-a)mb+7cYLU#TP6b z|C9WHEYyf{Y3zxLU)*p;&CMNa$G*0;>Bau=xjS!cX{SCGkoeJ>;vY_|SnjO;ryQ0M z{k!ik`9;Y1qxN~sA3LzNEI$2%t8`{!E}CM-N$rp;_cnbR~~a4So?_ z4fj*w*g>j*N_U|KxE_G(`$EIeAY3np`&{Gs)9_Bc_$b-|>D&!rlZ6iv2iIyi7QxYM zTyLfE;W&#Pkk=V-ohDrm@?94S!7)d85#0@WUoKXmjVvAvSdiv@as;*We?em)FAs!Y z1=mO6SqS2baJ`zRJl~^e65Kxk<+#l#^9*?BVF+6T$B*H-7t&e=hX~J~h3l>S^}4tW>wT|=iJ%^p^+uAx7X z-=T9Lyb_+j2VvL3k#FRcCS{=Qo!9JT4xV zzOaZEQJJi?T18u%z1=a}Ip2A$`ic7u&n@21(!TM>1D%04LrQ2v_^R+j8P{gK65+Ky zS%1v&<{ZmCkoT+np28`GzbQH%yP>#w)a|1_D2bKMDEnJQv|`>kYvo(xeN}l?_fOa~ z@yhB`XMP;7h<`e{Wb*c@xl=bzeW~_|Y1d6VF#WGH&ps=2)<0)YpMB@-!8wg{hUPw4 z_jKJK>(8uzwEmTOqvyRdKWF~B`H#;3V!>Y)zP4z^qQ5unYxr>Sw#7Fsx!SpAwG!tN+ckb~qJFo&j+QUm58&Nc%U zP=ItBun6&QGhhj=CJ!30jK*+^0b9^cZh`^Z9U^zw>=)SXdf9-XTeyE`zywL|KN>KH zvfY0%U>*q`!GHy1^C$)^BFW=3U#IL~8{GUhqR%NBZ) z!L)|d&;bUEEc|5#ODy~?2Fncoh`|;pXlCf70Ye>TcnuipFeB4|p$;>O4H)V$qr-rq z4l~X-V5q~4n+#Y&D>LpfV5q}PV!%*`nWYA7cLXw@VX#8WS^Nfrt+Z^#A28U)!jCi9 z!QfL2R%zKr$qe=Y>>lM~F!k$V8&$yIG@8z+at8ZY_*4c5*}L@&4zoDtFgSz7*~H)o zgZ1yqW$~|Ka1n!VX7DJAiKFhLu*}MDzBpclfTGE}N>t3s&_&8#LyexsgFyYZzO%VjG(UB$ka-mQVOx5K-gEMzOhTFq)sgK)Dw zWq=Zu7(OAek;qhJ^8JLDQ`5eFYQW}W*p>P1uZxn zV-9?IY7SteWD&vNQyPg>cxE`akeZqOPS3pF(!F#g*$Oz~nXl%<1V zfsPMrSb4WF{BC48sIgi*kKvq-BU_SqZ^ou!?X34v?4)ICVdY!R;&mAPqnNeFCYDbJ zE4BXaDkGH^}0gT#5WVezv~Ok+`nC}i77ZhzeN9*Ei6B??{qTi zavsB?={=!< zjePVwC!iAewJ_R6^Vq=XdJAjSW(cD-v=(BR&q|Cmm!CF@6dJvEm|AotYs@Uo|IRr5 zAC8M!`e|v*Hq+2DlGwZ+!t{1Bv8ILb6K%$LI*i@_Zmc)4^83eo+H&>Dp3{{w9_j6^ zV?m3N*II_ln~ZiZX5ZXtjKezZp_HMS)xX}(CLZf})nQO@JqJ1t=;Q9DB&IZ@VSeXy zdiMW;wn)}cGyC>-W6Uw>$7&X`73xOsBg12$#zwU^17`}%GJb#CB07$Z;CP_53sdT7 zH5+BxM$nmWf8)PNk5S)N_MRF0yQy38Y1GZE`_td1wWib4)bBRSHO!3;_nP66$ZW%6 zM(^8ME^CtaEh!j6>6YF?U69)F2&8&zHFbp7zcO{C8Hv-wHL;!5mkOfl(A#W zzoExEI4!QEmQE$6e4nGi<#*7@+H z0q&+k=u`;FhZqZt=lQIq7PE0^2E<#$#yCBV`EZ^K_l=CkO+y;Hr+2d;{#;0lzFUiy zusmuZwFNBZe3tec2%QbrS|c8PV+w>Uf_n;2XH-znZ!Wy0OH(tAF;Oq+LI~HAUpTT< zGg*#i$>zY_d`N$W@pKZTJ(HzJ%TM#4#^AZha!xZ!I*HX0O_`=S1xhrV-O*f;B?oy)#q8a&s(rIwX|<~-W?Ry`iAp9bRzZ6jK~+3*|ws!6O4X0Xx>*WVPl z)Moko!gZ}(T3c#5YuY=t$*n8fT30oP)}U)j1zo7=i-U3*(|SFu*#yrr{sRco`hpqW)hmo~O)d}*@0TG!T& zjLWOLhRZoMpE$!N>&X(paEyddE)~*g{j$*BO(`v1w zvlX7Mf+#I;ZSK-KS~@qjZrK9KtvruayIHwg-~qHzrwOc~ITX_?Yn)_pIy&1|Z(X&e zSffYtIWs5f#-bV%Xfl~%_I zTA!UQU9{e4g%4*yUr(krk<~y!E9A1JWg~5!&Q{2Eb^G>BZSBpgN7i1mUR8jL@Hy>} z6`Z$j=>VKw-9kT;##z_W)-ke1p`UF!&xlSN1QLY$S=YL<70Nu?Zl@@+roFALouPnH z)y3M%<}N5}`=%t`n~hMgZp)UA2_+>hn?`SM-O$?6vbwc-bbII85_(qxF_#-Xq!5~y zp+y%h7)|E8yYzQ;#orn+X44q2(`sJd4&Owpre#}88+21v-6K0at;!MI-fpj_jnl=t z5qvjPK?}UKwzC;(W_7W)rW3j_V9%;`&7EuEn`s?GT|tY&>stFt=(?L|r8G0LW8&F= z{uQ)9&0SsX&~qq$tZrYmbtAM$vrZja+n{C&Xo@4gR$E}uo!1LliB`AJF0Z%4cgEAU zw{BTSgHzD0*g!X0dh>BxE8wY~H%+Tkr@W8@>qPVmi?xmIt6SI5YYVH8j;-)PUF%qf zg``(*rJc8n1{zobUswVk-qix698#cdZPe0t7FF-?kfq*fjGAVJ*uJiPLj1i-};vcnrwDx|Maj2|9{5uWaAek}`Y%{i9umm4|k+j$uqO z9(Ap2hOb)LGNR`;r+jE9&Aw|3AQPp^(0TQa{_iS)_O}_e+Jd@i3l~qCU#rbrpw-W> zYnVB;cB+;?X#w2l7i)`WE}T)fXrTr%=1-ctuu-d;hHM4dBO>9o>{3$cw zcGBdTvu7@BEY_yYTsW7eISmq>q}5NFzi{T1MYAW(*XkF|bbSMKWlghaY}>YNClh0m znM`ckwr$(V%*3{BnQ7t?zoc{Ry&igu|~F_YcGlhLajNhM>t5Vu52pePkm)Hi9zZ>%rF z#p%RM{#RDJz0d|$zuJ^uy0^>C1Z3mjTJaM*_6%GGS2t2(*&?jnLaoG3XKSM;UBmB2 zR7No6D!tv+g_HkDQ0+tB&Ol zpF7=Wn1}7w>W}U0mpQGg?mNAYoR8ZpE_0j~sA(UTD*$DZiuMcYfqQ+a5I^ zXNSG{cBPgPp#W1ZQ}5+^;h1nKsk`rQsPiN~N|`p%MKY~N>`%3?48DARP}${@`!%q0 zZ(ZLH`#kWIpq<-VkREotcn6Mw58Zd0EM^rYqh($8-EYlifRv;PZPvF0>*N43?Pz+j zMSI3mOm;GGZBacA6pstsDij|OXaJm-5pF_Rt2a}Tn<0fz&jGM?UN$F5(!trq5tiS| z-ZpHHmM1qPNNT)Q9!3q|4NI_TF911QZ{GnG7LJmA@(nT8mB+RJ2Gpm|#QvmHQz9pM z8WNymNp!XUdJNAKy0ep??K`pEyV^K+a-hq2CZ=Zqr$H)vR(!-ig zNfHK|M3;yy25DZB(KEVZ#Wa9!Q}Bf0)(nV2Fx}UiAl!eYw6AoGb_-hR#IxK}iyvzS zaL0^g-a#3KzV;&ay-Ik9PwI%0-T4_{#7oc)aL4+@#gDYx|A5tE=$pc*3J8i9?$e<3 z^PheO&(7H=^xq=A5}DP#s;r>%$po!M0}tQF^%u4VvDG^Pd9t}u3-MQ0Hn-^c8Klj{ zho0iF+Ua2g`UcjySeXENn$P(n0A7PIMMr?=fg7vWdxM1sE=3UQ$zy!0$!yFnqI(ge7%P99pqGT5Ky3L6 z^F-PH9@)`TRUNNab0%j$8GJUrAF?$8lW81s1hb_K_}$kCkqf_n3m7f}#(-n+JxlpP~-gGwmP(pQ0p=N2C6!J!C#S#SCaSv&(REIXb%0Ga*PU`r}u zk4NHmH9Z;keaWV0je>d=sj-33(t>|s&UGN^0vOh{Yq5HH&PW&eH4M78uTc5{bmI-- zGB>XMs(+KQ<;8HrhxW2+X!B_266aEJcr&AgKeiot_hzA1#_$&Z>*VMGr%hyf%rKS zQbL2Zpd(9?Zv9K7CGceyU3R_TMF5#u2zl~az>^q>2=CZKr09q=;fNHJI@{{+nkVJy z@;3_qIvsHZK00tsB*+iY29rW07zeaK{9RQV4qg61`L0FbO0|KrVre*#)j>hj)BVi& zz8Vztxdo-=tS(S)MtrWOyKNH%@+uMDLL{rUY3F!7e|$db{GOQk>*VX=@ke5kos)Ei z?uWLj{hjyLJ&T~pljg4DzEZ_yjPKJ-1)aHn?iSF0ZIiD)pve({TAteiLb*?_;xon) z^dLPib&aT=(39UVNjvEk zQ@v$NHxiWxcGWYpK}Dj>_ma_A8}N;DP@{`IlVe6z9*PoNoMTDjn<$TWi6GuBZeC^luhv6mZS%9y>uF2rRef|t4d4L56%d@--n z76ywU(v`=R|@Ei*>-Ijx)HBHSc=FIijx4v6cDTwcdrX?yr~@C##)CZ5L^A5_|OmNUC`54Nx4_@Tm{exPbE?Xd5)LmV5*3b!W z(ia(}Fq(`L1~{YwXDmv>F!kh601c&NvQ?sTl>x7VJC9-;(eQf!?(jS4K*U>_A7hdc z>jrnN!(!c9YW5l?ZzH39#c`|adYg#SgRH`O{qF>!8PAsE$dvM>St}|b6pb!#DVe;A^g8x?tT}0D8wn5d60&l-plfzwfPdTw)E@S5BpVgCbhDm@7}56?B#t&!$zsY!*Urb*z_KQF@5nHyWL5m zU?M~T{W0~uJWGGY(po@)xaW>JOtuI(FB5J;sOmgR)L{7I#h-0U?TnXxTgMvYVfGuW zg~gG3<0(yPe=-Jbxa~IUlSJ?y_1W6Oa#W!j_+k6Bj8J83qac%(89S~xMlHmVpHYlM zs($FYCv4>uPg3;ssTH-13>rUjYE9&*cv~E_VZ)_SZ4tDkdR;KI5${~3V1iLIHlISCg#8}lcFv&pCW)&|Zd5++7=#wMRk|C$u{Y@LO1 z+jSNc$eGSAv2kZqX>S=;eVl7Ke{7$8MPZRtb2Sl0*t)vwZ8f*c2FNyPdxh!vFob?< zKfdf|+o>)Eai>@(&x>c*$T)zJrJ-j;bCpuG!g^K4ebTG#<$b!b+||=l`rg}uUf4a~ zXczOg;NeL|m-RXTO_*|Z`B%)h2~TIACx5X9V-ePpfWpwf#$Jch9Tj8?^B=I6~-qp+u=4e0RaNL0qUW^*xaPmzuCZ zsBgDaX?L>cbDTZiGyEtJIwQwb%#^Wc|J;=*{KhE=}J9N_Ag0Fam{2J>U z*O>i$)9iFQylH}FWBP3Co9w0!o~t8;rAwpvbn zv~%)s?f#qtoFle>&wVGk`$VmJb_%bgg>4^7TDnfKP3LNyB2QdJ1| zy8?5Chv1*-qp^W@IRZbP=>V&J?axQN@>y{fnz>>g-Uo;SXUq4jZ!aQo{o!0sPlyA- zN@@SAUGn^A`Tn>4F@JM0bpC6M-yK~{{(*`aIGOylga6kIEgYSk#mx;I|5}&4!N2Of z+;Gfl7RJuzPFmcYEF@f9TqK;FTqNx5>?E9@rpd;}_D}mSjE$T7pZdSA|EB#{8}6U$ zClAjj@4s=}?Elr@U;h7J;pO<0#mNQt7tj4E@2^bmf64l*!{5GGSw7to7we}&|5J%i zX9E6Cg3f<= zvj6zjPj~j$`KrJ%f45V$wfO6!K0$xo+5hF?c>l9R{^jA=*;xLP{V!gQ`M)SwKSgtL zvHVY;chL#${$2H%#doUpVJb(+O}4anGDm)_I3YebScC*!g+v4mh7pt;R>ogMS`2P6 z5D`VW#sJ$oTo9!PwA~Qf#qI5)O=0uRU{!TN)meu!=}PcuOGb3_!?*kB$#42WFb?-H zS9j~7<38IdZ0oY?hp~hfN?72eRc2e2ro*sn@aG#&23mJ*x=-D6ra~Y$$S7#3%vYMV zrMzVh)MC2`!5rv68tk;UwyJev<1OID>f3%aaW#JT_2>!wx|ud3^)5T&F5q1f{?!L$ zE`oj;XgkxY=PKsO1*C0uCFVYCgqJzL_iIfiqtTds^m@ z9)~&5SzcV7Z-@5khq>UBA8&8dYOkZJtP_1EOrJiB4+DsQM58RuZ~)vz$t_(xgJzAJ zq<>^>q8>Q63eK|DI^5{4rtK)n%PPVamwtvTh#emz%1g@PChgWY1Qd^c`BsVrEmxY7 znxZBz^)dYpJDd>a^H5|igxiXW_l(n(H^Z{Q1>|LfcSCwhdBvn7R_-3#PCCYIKu64f zyXFn2m?*+(K-GcFJDS;^MRMkD!y=XxG)Hg4-c{Nulg8FWNZuFIIfhJ*X)S1;?LQW? z7Q-_ZuP#h7Cv9^z$8I7Azs*-!h>3Nmw(rJ&Cisk#An_G}PQ3A$=7HA}`_4FW2g@^* zEy3UUn9@0MBGf}m8G}wFPr=n-Gl_0~|>Tws3ysxB3hjz$*nD5Ioogf}?W8#!Q z3GP8TsAtZOACAR=gu4D|NzQC}XSHteLz_5?RM87DdvXI7A`kJ#R_@QURIPp|J2 z-ZDLrKgGWWy++kLB0W;rk8U8?Qn?W=kJ{{TIbu5?g9_;#3GH~O3&Rudus@DJy*v&- zHa{vo`N2W~@Bp3wQ-C-?9C1!MlQxq#GbIzBlXUXxi()oC6E-s%GZr&uoMpmNwGR#< z*d-54eC#v%Q9=8R-SzyjU`L))eAqRCqwrSHWHx@~p>2ORnrQ*O4C=|S>cFT^%rd}* zCejNePtiAq=K5<{mGHCzQ6Op;zMlkE zKAj_OTbLecN6<&~yhCFR+A;DCv3<&hqan4@t2ByWC=xhzwnTla+Kk5|-_Cmy1)*x9 zqBHaZ#ydV=H1m#{J-tCHK1>`lxUM@6qCLAicxEV)Q`qeMBglhRb}Z2z_YRWx+t(+3 z@Mp>TJilaqn*F<4@#>I|;H!Q+WJ2l>5lHcB2lzhv>x&NP$6K(SE!&=WP(g?bJLrg7 zVhhq#h*x*S87qttE<$?`Na?E8WA9f?`w0{O5^n;LMGDYLD$2qN2md8GQDh`##Y>T2 zkI1i}@yNqZjjtxJ%`lKTZ<5ATW3unsMLpVT`Snn0xHt4fE{BC5;_J&^r-P)aMO0 z>U@_=zg;F!INQ=!u5-0K2z z9!~{E%$$7tijlARcEC~Qkg`#Ir*v1nQTrPei^5Y%`1j^9KL#P802dH6k}1t?qWbRT zIm+nuUg0x=457Ky#So~{*FVvWqZ2$d8kp8Z99j$EvmAVLeA+{X6?`$1zX>I&OWAML zz;J=%lWY^kQ^@}E#c@j!=2CYOKcW2YaWwCnd)ON8&t&o4q?62rY_^#xWPCk_xnWW_ z{hsSUsbrp^W@#v64ZwnKr8|TLJB1lz=0eor;9;Gz$L7%4*q1`2ySn8PNkM=G zye=~pzA9Kd8%IUuo~ktAsiK8`;~RXGj727_VP9G3JG=5Y<`T`wDV5>PM^mLo?e8Ro zWuGcM-Zh-Cmq!oy@l-daGKHy1l9dRUz8Ss! znd4&${mF{fU#pToa2HBHFOl=Px&r<1Bu5!ZmEns=9BZ^^nK`Gv=H7eeT?t!b;5{cc z8TLxEyJWs4%?+1Q$H~NHm`8%c%eRjqvfIkX%NCK-CE zul%tIFC#wuZDaW4^murDzN+$mgHxU$hLpJw3$il}LB1V6m%SugLUsZP9VqeXuu0dMIQjnfo>+2 zZJx|Ee+l}sIG0iQyO-=cg2M@ez>wKXg^(4R0E_%{#e|?27fn8K{Dd&PQ6bdKVpPwc zWpeabctzCcN8i1-(%~3p+-V%hEuMMlx&gx*6@cTOO{tW;Qo1g;1?wzX(GbNcB;o8S zWRQ%6WYK82JgESNvtvilp8E(2@Of_pW^HaHBbwA2<}?^&I%~kNP%w5I!d{7J2|8XG zq8QnF*3bs#<2^q1NIV$%)Fm)~xi?Q2c^qSbJZJW&cutK3Y29P|mtoPY{9Z5!04qM_ ze%mdMqWC2c2qZ(e=Kh`|yG`M<3i5gOT}SdBC;i>0{jaqlwYEr@nxraz0}xo;j)cSPVamm1#Q=hR7V8VKR zZ4`IH2LVzP9*wV9@l3y2*jDI%NbUSi?IHlJuryxfo<09&eZN|VU4mRl zc3?q2K?er*m2~KbR)PBW1_i!e|LH-Y*VS$@> zmQ^J+yhrJD(D<_%@m_D{Kew!!OljlG2noa-0wLNnctBzJHYO1JF#BzP3DMzcVoZn# z=owNx=ev&L^^GXjRE!pSAP6TUpIpfUunP8+}mY5k?Z^uN;#nH52$f2;wWK}d%&l?n+YicmS@#;xiOr$7jZTCS+uq?N+zrrwoc8Nt z*=iJ?I-JgKJrDB<%e`sS*Le|92rA zTmd`W70P}QdsF~CK4AKfN~%|G_j>Elp!%S83{cB0b?~g3Pih(WP}Q%JtXgB0@y}xJ zxvseca*tlhJGU%*Y|=pT4RBy87uz5vu4`-VJ2U+e&j6qh18F%=tml*K5JG2 z7pwA-;};&Zfyo4l9BzdrW2^8|j*Py>at^ZOZXGQbJmX0>$}uiP3N9C0otP3hq)qQolk)|l+Df9&_k zxdsdOFX6A5nIQggum~)8zFqAtflc1y_CM^vp=d7KYw3L~R>x)Aew*ygw;xf1%mB`(wNJ zm^ioP`u>1E2%y%adr02?mPWYoGO+e~s?qwTQthgZ{rU6r1n;_oHk-STR!c9`Bwu*c zIrEGSKVhDvWs63zGH!p7Bi=1z3Mg@j(+IEKD z$5K~7C0Z|y*9u;eh=5bj=b18_9`tRG(}Ib1V|}{ZMF(&zof9qS&=U}E$Ypj_lYj@Q zE;MC=#Ys@{OJrj%Y)^L%_)Pfp-|*3anVKm~l+W7Cc2@3nv@vYzZW^_jIg9flrh5t; za*&Cp!=oqz?^Z;eGC}2FQsoe?Jw?K4T(9|HgQ=EQd&~ooHfI1>?>0o|)IpSSSM!19 z03G$e@_nR;xm-4SHJ5hDA-0483_p$g7GAAEIM)B zzJT4}vrRIK14xqFHSH?qkl zCQ8qxDN@~_f4htS=9q|_z4Elt5;D!Y1SwrU#ewh{$ItxXf#j=c z3>!71thBFbA{MLkVR}!Pe(~FLZtr6gkMP@5dMm)&rWwk#oyE}8*vO&8iiU>C+=VGz zY(gQ|q}p0514Ttg=l9(Xk25P<-8y4fkQH_yZ>u7Ye_^kXLY9Swt%ljEY3r(Y)SIu4 z-+6s)-palHKwzttD3^HX;?Em*-k<|HE0{23na-v?p6GK5(;nqA_E6~w(r?uO88mQL z2ZTA$M1%-j4{7QX*ApI{@N>NI3?7lq%upbESx+5q@$@$g;qPOhx^N|Gw2c%I2ve{g zkgk5BRh|AB$No?~DDNCy#eLWpZ`cVo=^p#H5v0E5^>F9=?9p-m<2w1p~?De-_>!!)cmC@QI6whU(Z9j9oz+M9B zOh$iwsZY)1sOfS2<H6DE5U1ecN>I_EBM5;N=7nz--&LbH6C%>ZW+A z`-AA9v&pD;suBJAzGWu{T(9fK{c#YyJh$6*+D0QLtBjj@wbSkL!cMu17W~5yw#Q7= zEHKMuQNG|J9!sclqoy_;qx|=o=sb=Y!Rn} zBo9p82$qB{iXoK`gG0_kUTmGBN1JOzfP!=`ylrOvSk7J`;6fR3pD8(g@a~yan`1ZD z`-@LwXyYbHMl2~r9i#+YeUh`O8Y^68HUnq;i6NlCUF#;?I^gg`zQNiPE4N<};ma>N zogUql(sUR^E2oQAGF9Im`W`w0wLe>36KnjIcUGpR3fj-I07Idthpgoi0%><@Z@vx` zR?m-MH?S_lnW_A)cq^xh@K%}r_Fs?cAf>7W?{xIM%%uu#BF)NeU+B#V6s3MwVJxGH zBvH-^O#7qP_tLB@p!R{wgcC8_iMX&$4MF%>xQ-b*GUQJ)WJGxU*ci|#qA5D%!0GM3 z%@2TsfRX?=cRnwiK;*EKD-JHS7c$_;n|_K-eyh1k*uLm_>8hs|% z@lnfxgwTcQMv0zI3 z`C48_U2A+M=;m&DPhO?6s)YsItmZK~^i3C9c4Ib|pNaAw?`yHWP6d*Ta^kc~DVQ~V zk4om(GO@1gI=n9{q?#7>c&AM{h9?R1veW0+NH#roUL&g@bpTgPzejn6k^PJloDYF_ z@Mg?f&m<+q-ZfCW>6|D?Oy(H&F*RS@wRRd-=#62$LWYCQf=NXoko$zsMM)G5SYppa z__7MmXW5S#C7M9AWb3~@y=q-sLH@Q-hL?+39A8L#dXo1jvy^2&4 z%NSS756)jwmZ&8Ey`)hkWgu-yJac`6rg_{Pvv}V>_I}ifHFL4KU^Y6;D;4UK%9by5 z%D|S6auFE99=HprW^cbOyd;^h4n{C;cxT3(tkVp9jjB3PKaB1j?|k>O%O~ zStAx5u41n^yeyIkP7%5&Dy}_w>sGAC###;xlC>JOgSDKsdINB^wWP1|GvPf=4M7WH zeC>k4cR@rtT#I|(zcWG>gkVw8wb%%ng%#ipBUz8 z4Y%2YZ)<-{N-KNQxEMFvUlU8lFBzpF(Sh;`qh43qZx5Yv^?dDmgJI}RdQOnBy50Ao zS(nE}ikj|Bex!NP1jmOv0;?G|FnB>zHlCtp9O>D7X+o1Mv&FNPE<5y*FjA!aOO9AF zW0;dj${bk}p31xOn)V++&m76}BV&GPztLzwo`zmo|L~{_4V)9STi~uxiVNP?k{YJ^ zngC@?-x7I-pXoKUyl8%6axvYFh)ZD9PP?KB>p4s$SYuP65$JGeY`0W|0vy9OgMQwY z_M>%KSyBDt#K{6(l=M#vy>Snh2Uu@k7q=A{uT({pDM_XUXg~$M5S~Od&qOr6esP}{ z*R>=4lq-X!&_3uI>u(pFFNz3{b=L*jk7|b+_yC*CiDuhqsPG)PtQ!XkBw)D>S;i;@ zpveSshleH1)ZNzqtcFhxjq4U2gN@o29qLDmFHybh8OzO39+5^FpVW2O0T{obCza9d z3hE?W1(k({@NZTUTC00SUQB_QbYv=elz1`LKWXEcLP-R7iUVnv6omf#A|m826Xty# z{C1|R?SL)GE%dg1Sg&`Z#>Gv5M4kBL{&KoyW}kIYH@(#1Gg##QyfwY`v+CZ{w!;X0 z3&U!|_d+N?vZ^5NN$A>Seuh!h=?9$ah`z`f4Ln%WRz4KFl#Uj*1e`W6?Ll$hAoa1J zEjqSIFS{}fGmIwqPzIJpHL}ELEf_Pje7db9UIMiagJN5M) ztV!H0^9P#;z10opth=v656FbRetSb9@O|CFPq*CeQFlx9xt;lMmhV*WrLjwdYI=$8 z`z6BX7e2)-Zf^ZifQM~pKD=i_nhRzTwg`RXOZXrDZnFNo683sA9g6|J) zNSnoL8K9jYaN0#F8r8f9=rqO1ZMzx_U@MsIgJvW?1>5fqaQ%U(w!lxR^v$+E}cASQ14FwaaqOmp+F%9VcRVVYCI~zlbI!g^^mv1G1|MU>v=sZ`=bcc?f(5U zszH@e45DpMy%)gH-O)QeJ$-OGR$Vazrd1tA@T1N0Q*o*fvJY?slL2cs%N zwYOvoxqj$1C#NZ%R5xS6v8d)Nx`EEY!DtSbKmb(sez%V;4)0nM=)f&RC(OSQVf#$H z7PBNJUXwuNx&KuPyG@5ON1c*@4(Fa$VE-?60B(`nJf^{Y~WtZKeV^L*%Bt&c+t~wR-MCjwt*9Z?}{Mc!u4$2u+ zI?kD)i7vYX0$4*7H7qdm6YGV&nXN)rnoYYmN24B2zbN?UYf^30zx5Hho?y5M3KH%# z$c<2wmx~*(FTh4f+yj2uQoln0A$(EO4DqYjUu{2boVtC!_UEA1&mATV zcSSyau(5oNz$_$UiRY8m-D0g$iFSxw0=;ZgfC~y zy4HM>5Al#uQyHQ*e>Uiwm8j>YbxhYPh^}CZd3|jOu0_`19tEgHxPkwrsejkIK2FWA-ynfpk-1m7cGl>cBqaz-VhC>#HB;ZBeY*A7y&!;K%~o3tNK zQl!;Km1GS4l3aw-fTkYdKWoB9DkzyKGZ%8b7Z&Y;1|j;b7FMnlZ(ikFSp>JBC=*0h z=+0i4woATV9P|bG(5V==W5&Xp&;f??HAaan%v_3%qB}+jHa2OT^VnpE5y{lZ5TAsq zS2SC7UnZ(qMytH9m&A79ytm!h>7GKGHgV_0$f9z}f!dpp8)TlhwZiyR*C;l!uJom5 zDyP93yd{+NS*SLKV} zg7Y0&{Scr}W2J05T=S=16*d)sz(;w3K|n#6U3RZYU8IH2SrTJ!F#@Z83qT1qkAKLw zho5Njt7N_o`MeTEQQ$Pmm{dbiC^RWu%R|yYITEia4nnW(WL!E{6M&d*Q&0J;i}M~k z%NykT@OtYZ zC3U1-WUq^c5*u9kv{s0DClScxlPl!$>$lENQw#MdVX&)LaSIloc{RkH4OWH1HgUUp zk~-eKQ84(UhEt@RP*onx8?f}kZPQf$&J6luYnL`{ysz+))GU^QaE`p}$`c0d{Rad$ zu@lB~dlaM=-uIpCbzn{94_o&yVM6WKYF6kEA4}VB&zM@Vj88mtUG)`Rev^&mWjZx& z`Lld3zZYBcuQNj06+e7I%r2 zW@_>I1JBCtcr*rdiLX_WooKp~f}&h)?$WR}D}k zE4{O#BOTuy@6`kw2lla4LQ4fLxX9Q2I!HAar44p>&Q@zP!>tBPaON;-x}#%lT60Hg zPui9-=3Nj)PK?N_^=&s8+idIcW(R>4S8oinC`Z0Z6sf>j{e1+!`o$9zWs#b~Qw5S|v9foI421$O9NyeR39BY(LZH*-m4ukQg857@uIu zqCFkGW5v|Dv*$t+S0MIaQi?7nq{RX+6nf!%;6~stin=43NN2A$Kx_Nn<)1buugr1g zyBuy8v4H+J%?+z*hvv%;3mZ9^jhsu^$xZ%grm|!;xTRyPcpQrsHlC8cNcOQ0r6w5%ga2x_wB&qZLpKvlFJfxX-g)RQ)_rJF&E5r&e`05Engw!!B z985ENLl=+FEw~EF(N?g(1yuzfe||DBRVbEy2T784ck*lYxBAnB=ugwbav-BZXHXcS zL(e4%=L@uwMRQEzV!vX>ZbsQ27;zck%~7^a)zAy$R0E^hx(aKh^~BflGazt(^#!c3 z*Ab>)|73UfTl@H4?tPd2_|~=A!y91L?42V!?%s9;3C%9m#!4yh}7= z{tXCu>9Wh`Q(Ze z)}zRy%1#}Gr|Q5SnzmSj@2=DDrHWE$Le(8#m34%`@HolN*?IjOOiWryoD$Q3r|*a- z^1GQ~cAXqQ|G@IdpYmdFo|MuGA9)<6Omb6N^E$>#`wG1{5Wq{V`lCQ zYd~6J9-*Vl@tExkBz(Lle)k`lDFbl%LP=xO-xgd2!5(adygsE4Dwi|%75{|Ya_kyY z!KI|Q*<(0ShV)MO5-%pM2X&PBOBgcF^8u=3)`zkS*5_#6ePeVe!W~MNw9?tCLCCru zjcMvj#ShgBnM7ViK^{ksNhm9j3>Qa^NL@UILh%7?`Qr9kzH&^6JJ-^+V?)q3=z#0z1|pKSz`J2!o| z99}VjRL(4nZz+i|cX5%lX@pC3_d1uKxyyMrN$tTpI{%x4J)uy1Cm6 z)fbl719^Ht0px{KocN9#=0%y!^IbZ`sxzvl-jl@*l5QU^AXeVv`ufv)tmivQlb?JVC}@!HeQ z9Sr@T4fICu8cr?DX>#$r^0MOEX7OqY@a_`!Ry95JnifQPztU>cvnY5re3%*TQ&H~* z1HKs1fO|tEaWcn{P1+QuMMp1nY&oQrCVC6$@y`yQ+_Eac-{sFx_lp^;bEGJxPkC1O`11WoB>SwPmGFwlg+dqZ$gc#9GA2vP2^`$PUFhW zMD)b5d>wbNn2o9BprwSk-CsFZPsDt2J%_H5nujZpq{#T%Xq~2@ zOxfc*M;mc*`a3ho_Pu5tVRys^>e+zW?evX;mDz+q{e^6>)v+?b76=xL?j|hv8(DA0 z&)R$HB@Tl-T3##j4Kna)Nu3E3Iy35+oWDDL6Yf{7g0;TOr4}g6`Y~2c9Rn^wm z+F@_FS0OUWIKD(=vvEC!rju;)+i&c30~b>67Q1+eu>wZE<(I=-IbnC%^I=Ir90#A} zU6EifK~8b~VTrUOF!5*8&wF?AB_kEX zTVzq%G=c#rafu(_u_eN*L9Tdjiq9Swb*5cRgzOFVH*&9=-(I@6(&-3<+gs`VHZL)& zUlZhby{_{5#G73Nx?4|W()(2i$l~HT!^MGyzS*77c-&nYlT|B*; zI(w*@6sQ6y2>2X>w|;b+9FxC00yJjEM`@5ZeJBEma#+BJW zw;S#2i}uI3zHmNHuB{C*`gvb=B5Iu`4u^gG8LjQU>NeW@4R5>NVmY;xSWa#Cv(0xj zntrWWc#zUeSMVXSvALts?7myf1*yS^hS@yQmH!1P$i74pV`2sjxZ7w5|EH3G&t%D0*c~7>M$# z-ND)`V(Smj1hn;~K(?;Zo78##N*rr5#8GxjZq#6G@0Z6j;n1^wYONl~$fJ9_tdoTGm%u+tlCTg~c9KhHpM94hbs6%C=YTd8{`D$4>_T*lyGf8PyNdg!W zsC{rts&1m0Se}h})}Yz;Rto*mj$}c}2+GeyXHIz@I+T`vHqg$}D;~Pn5~-t*kKG7` zYx9dg^}CU|6z@><42`*F+Xqbk(+aEU=gx;$_MQ0$S`@n-ldZ3*J#n7Eqx;^~vaS?U zX)4ZdaJrU+i{vjw>w)OV*AMG5p+1Q|L2t77cBzGouA>ZJ23I0D*9?_Udgz`+;7FA? z+S9CHNo+U-mleZh$LBDt4$bj6but<8VoDj8qP#$3N7kBS7zBPk_Qp-MG75QXc&j68 zlB*3Vi|?m0skoWb;kCp%&)tQJ6{v;u>!-Ev3G1XPnl zT!6p_D7xA>K0f!fpym=xW+$kkV`430Ez+lrFLBl2Ls_F|qqo9kdp%l^`Jm=T+c0JtP?SOa59O#%y=;sf^{ChU-RQwt^_LW?hX;pr$QV$Ic;0ST36KU3^hk zn9*FgD~Vc7hgv4NKP^ zFm#BEjWxwMHt5G2+wARpl6)on@_ctKrB*$(@%bR%%(y8V>~*!l>vS_1bfqHWNKjGX z);ks{>IMDBoRyyfEayNU4`Cr$;yxo~P33%R**)H-V;w*>8f*9~aGm5PaTO4KE6pWW z@Wcnsw4v~ZwUuhIBaqR7WCOLhhT*Kvm6c<$N;ZX7n~rV86f;h5!kv?xL~fD%OQPB{ zr{Dp@%HFyXVkA>XnD^; z$~B~WtNW!>oZC=#i56t9_6>y;fY;BYo# zu~a#qP~R=hTo)&%wHSl*Ln%hnjoh@}{JafpVpO=cpdL`o$22c;E;*C!K6WHKC8nBf z7Ejz&7CG#4nRI@q(`%}+PoU%!cJM{X|a?J_++h%dLE#%8O_qma710l8%g&=ck5 zhgRh5cOj=VPgfQkJUQj`M>2+IIplyLDUd ztCS2dtqcgAL_Q6M`IzX%5qkOw42)*!=m|v;aVY#eb7@8H6z|}^*oX)7&99?CqLCzidMQv0;UnmEoSER`z5dO)(Y432vDb32$l>@h-y^V8OuWg|u=)QmcF)n3 zJpIDxC&|RNlgY%koy^3xZQJ(56Wg}E!-=(H+qQKxzw?_6IvsoGFckitA!>C^;Os*s_j0Pc%a@@l03hn5Y4AaYc zOAW(1)&W+J7^~&F{Y5=(R}K}>8(XwZtNuLd!~GM7r%@v-F2uG3B`0KWyS=sblc4>v zRKOoL$Gr;6-@P)e2z7Y&EiT-EZDkI|Z^nwrTD*=YWtpzJcgs`s2Q+|}>lYiJ^S%>J z)3us1gPqyD_5CZiXy==e{^XB(tLg1dejnG%{mX?7pR4A}gXAiYaIe;#^}Xuqtgdz@ zw;t_;zOF!LFAyF%R1Gw|1>|acvO@6R?@c*4CYRTpX__@TU^LbvdA2P+#f!F$B-~qF!7! zckJa;ZnMe8(@lRG402PzYDx z5$NBvJ=?_;M@)jQGbH~gv<<{u;|rT zu%wtdkz~zqaLDA(AVssM!{LniGeIs+fI(u?-~<}2MjqwPQj1C>oqI@6#XD8U*}y8! zkS>GS$)l_9;!H)Z&?&L**ad-_QsX(3`)3h$@oq*IE}*ED$O~7N&Hi8wdX+^G^!McL)!>Txti+j4#pXv|yS*G|LZd(e62x-~fA!tgos1Wu0voB=I(B{1G? zNsi*Cun0eedRCSR4aXGA1Z#AxFex}Bcp!F*`!;GvYF1T-d5|>UYsaN8aR98y7Cvvn zPq|&xmW-}=+*-~AH{n}=H5sj}FLAJ1Y!WR4v-NZ;G$!h)KK(itT-X~*oQf@*W89pH zqZ-X0n|kr+5(?tS_W=r8Q?~8^oUr~ssriu_>7%8MzbU|kuH;2DB7m6v9FPs{fG-g3 zQ(s2WjTwopXAO+htq^c9aE)ykK^_pbHj)EGQfm~GRx-1Dx82LiOMdP6kmGok{6>vh zn>KF?n6eRXMUYea(KX*&F;j-kHBu!%CjYEMS7C?@_})zilOcBwn?Yf45rm!z%*wHx zl}6N?K3eMX=nHDaI(0##Ba#hCU-!01B3kCYVdH_%?-_n<`*>dEr|aVC2=Eenr}lbe zI(V#0^1SR21WVvmSk+R;&5|yp_a+CzW6$KFyrMwZ;_H9oE)g)A#JYuR41>OaV+?h@u7y zAe_iIh~|8?VwuWpY7U&r!5>SI$qTqd${WM$g}|M*5EPR$kS`?_q92R}UuCPWaCbOV zC+SXx%wFaHo)dZNEfitYn06+B##TIf7QJjUf7~r&hL2>W!WjhCvrHjn6svmm?c6$G z9s~SbwPWtI2Ih|i#4v^}12-H5Gl1(L+Ccyj)J2q*jO)h4+7FuJlF(YEyeDTNkOp`p za2{;8f$ZOA6LelK1}c=k)>cB1x#A7TVNO5t&YZpF!4M&>Wl%Fpx*k&x0fY>~X%%l7 z^u0h##G-5CN$2U#^pUWgz=fPR*VSl#i^>7}D%-Gxw3h_;x$brID9>$`K%d5*v%y_w z!tLC$v_jwV0mVE|AAOp&g00FF6~QlnI}cS}hh0d))&s#(Bb7(_h({H}dXe&jX9zI^ zFwF106f%v&{(BZjZ5C(VS}U>8i0x!E*cSEeB<%p_M+=b*yD=uwM$m@Wc@p$^KYZW? zuQNdSz`pBCp7%Z~;s(Re*=uJ&$Fpok`$=a#>1tmx&+F=P{hh$W-DbHAh(%+r8k)cd zdPbI%^e)9Sg_K!@2j~4B$2vh+1U!l861Sr0*2RD`0kU*9?GR|N$mLe!JKD3Gi_ zgHNCWAyq8aVW-e(W9AgKWVMX;lHapauzEkxBV!Cz*9{Dv?d^%1*A>uDEY4et=8DQ3 zbskhF93dw&2-s>Sx@WlV$1n7YCGH$W0csVi)ZjDVOiHrJ5gqc!4|8B9x@|dTOHHY& zTCF~7%7i-jK4``73#jpFO(D9RQRUTG3qbC(IO46$UVDIZ&)pra@DinKgSD3}F}vYQ zp(1ASyB$ELtgXbW-vWqedS&TFt`7Pb#SKx`$xtFnq9H)=j?o0}3bWc>K^04~`c)Tg z@?mqK3V`vO$l4A0s{R4S>d?sUIgu-4Pwj^*&YcI+I2kIk+cOoBEjrwH#?)7j(;U)M zZ=pbugh~tsZD}&~YGFM9PB-h^OtyaaU?4P?H&CHPDdsMYPg1v{dg|smm-?+?4(9GwGd7e zje*JOaC=3Akp!a29wIK`I>fK{2_8|g+If&Cc;)Hb)8!*+`bZObUElb-{0Ow+2RSI; z#*H?r$V%z&Dz~scHi!G1Sod~*BW*s@KCm>4ag1$pVMvKjlZb<-dHpJOY)sm-wm9xsAGrx>YL;qf-r%H(kRn8e%vs})>x?%WCS+s^%x6TA zE#OAkyi1=R7ch1BU(3@z9$_U9cfXyVKjvN1pEFwN{G$9i$ z)R=V|5341r?bDX3ulIZRc%i_V^=C&qD?j=a`{yV&7BsvyDy>Vv9;yY zQxn4_K&`-}9A&Zi?)9m$aY?=8NdGm~tBJ>-CKG!}B&ZHphG9zvSCV9qBu9h z4{W5*mMA9A7^MX#O!@-JK_uc-Nfrf#ao>XN9Ob6fjfvE+!KLDM<33mRGvvUI`ia`7 z(07UNN7xnY;<5XErDi!d8DWkvMs3uEN@VTTsSPHfJiCt_?kI%#>A1<##%-s`*UEgE zoA2)aGF`NnU3Xc@^W(TuTC$j33d(BnExB2zx5wL(OXsmOA>C(CdZpIss*qhO(@~NB z4lfI*Y{n?i%jxqWJcuTff!z}uZA`(hYEQ%OZvs#tXA6x~i%pbAE4j~MV&*y9unX?A&hT>{bXt&dk}xu!#uodm3l*gy@&Wp zTif#bPfVrR^TFQCNuH(`)!_O=<0t;m>g~zF#L)G=Ug9lb`gcc7&EAd->00Hmx03Yz z{5_F_BX>#KpBrYp8uvE|4^I3aQoF@eJxyt_I!m^Cdrrp}(Dg3cvv#b2E{>Q}PJS#cqJP)9wl? zL73y{!WlmyO|zWYqI2qxv!^dkFXt3ux=x06E~V%Z6nA#*ldw_Y?;ED;KhR+shYWI-t6H*eUb z>`;AT#=ckEL$6*uLcF8u#}ujDbfge>7G>tW3Ay_7iTY;ihi@tGknHH}K+oWtWIs8N zQjMxkr_W1TL#*(hw&Ta+Ws4SyG;%vnsA?%{AGA)i**YM)v;9;R;m2lX-Je@5Srj$+ zz;0$aAANM)?z;vhyzYOze|b*>CfH5u?(nCoB|XLz#MV`rL8OW4YUOneKups|yjMXl zNtYqX@*=Rryl^WoS8$}wZL4wfO4?T>{w682N0^JVVx0)o^)1E0{N_`Rvyh|aAQlx- zb8cH^Pdl>jFx!G~wwY9FAFtl$jgkAqs?MiyfDy$?*dpUwRHo_bfJ6{aq_rORp*DCQWVC%MO$(=5D%sDXTFr1Th-JQb*NIr3vaTl(d&HZ>W_f;J+VZ0XpI0gK4MIFwlg zLhL!Abr`da2oJR~^j?(`074dRMG-U~^S4Gg2hAyup;CQ-Yj?|UdlTUc+}sPkL(vc) z?%YYXS-2~cuo+#h3jzXBf-G;gkzloJyRt9FHJmJhh}v?hA@=Edc*~;98kO^z(4~p7 zl9Dfa(Y$>O@;nWU9Lv5ge52TOMlA5tqd7tQY>ZNo!SYANior@I`L}}R%z?>8Nx~Z^ zxz_BXM}Zo&aE?s7qVxGE`#)-D29})}R%J}iG}WV28XyJ=Qf%~P)idP_s>ZH8zZIvy zVR#vVi*DxZ0T?3K%$C5^DD+t=eK5jpsOG zozF6!i7x04*#Vh(CcRP=i7L*--o_kF*nFjQk;m8>c@)a5_0{s2HOEzqo<731KU_6m zTh^f(lWWsXa!nvNqptfL9vey@V~lJC}MT^vvf6euBCtl?~P^p61Fk(iInU5Is00bE6|><;GS7$ekR?1D}{8ZAHRU6?D0g%9uabnvVut1Z-X~! zJmC-&Brr4ps}86OCuYiq-&3;WdZmHl>qXhYO1Xfd&s%sgpv+yVK;fTKnhOO|u1sqq zR^m5cnv(77=Zta|-Ox5BVt^<|fpotE`wXLXWT@v{W1$Db_n%43Ha4bmA~ifoWz35s zEVXVC5|I4!a0d=Te&%8@2P8FT^=iW$Yy%c#ADT;LY=Q*+K$sF_%29zLkkXM9wh7snb`xKPQef=UUb2kunONJVmOYeQLDnXMbG=qQRYeElr? zg}&A_A5SQhZcJg}2VQwTYX|6_nKW}!ktjoL)|UPFhaEogvY*BrK9z}v=y*;r?@sjan&?sVx-W4I`tU~Yw=lB~al-;P)Z4{jk_p)t%J4VLDJJ5_UuJd4cu`4|hMIQ_ z>bVtjOz7v?^R3eS^?7T3zy}7ZGd%#cR)N|26waHk1PJmQ8(3ofG>#HT>CYTmOLZC2 zUHSG#3<(UOGB}6PZ{*+>V~V4SixRX39%c};n%zzr)1tIIS;wLwI8JA zk&U#X&Q_5Qht>q;>Z8w90jo<$N#%ED5eh@ zP6o&24=0MuNtPe*4K#+a6NZb_s`etend1t?a+K7{BRRQhg&Y)tZs=ach&xqDyos%| z(Z|*_=NPruzcpaINRR6i^s7P&6Xqz4OP{PN&CEmEk{aQn9YwYOP}FA3QRyR1;ugii zhyX@TiDyeA<(VzWM%kZ%k<>>vmKN2g)&U;KMp6duU!KD|?~82IDHFhyt;g3golcbswT5*U zm)C?}#t2nY#;=*@CibZt_0FXoY+V&4PtuCc=Nt~Mvj<-$(cumlE0UerD{W8Ih!$vc z5psr89jp)Pnh;vsD&37uJr!j`c#2D#+bdfu#j_UvAk7lT&}XDD^LVxvSC^Lq;N?D> zneUpRwXsBAZN5zL021eMmR#3P}uW#n)_}uEq@_am&GFNZ~Zkdef z%a(Y_lm@)+3*Y+hUC!wpQwPoQe5oA85 zFV=jk3q~RS0=SXWD{UcFGOoCh%hRo$`GERTW19OkG$jykP>xInG@ciacE1Tt4a$^; ziIMsHs@hL*;$*Qzr5F|zAJj*siPkcZGln^p;up<@mFSBNk^^&7IcHnyQwPnlmjE=jiGziQufsWm@qtqoYH4p)!#!H#1i6ilDow(buH?Qj_4^ z-Pvnc*v!KtZ%wpgE9SWK1h%WQodBaIWFB8JHpaa^hN>$fq`Zch!t z4q-&6N@be2T_yC8P$KjqdB$vibdWDE}xR zBa*Kqu3?8b%rAD@6RiaKpQSES$ZVY z#F6d}nEVg!uW~-=@^q8sr72w{1x;F28RV0tmFjBhDmrAv31fjy5+NNW4)2j^;5Wu4 z@|p^~T{=~zv65vcd+LdE#@G(-YZ=Se?l-$>8m)B}6Q?5%L**58nSh*%I*&FU_+{k< zzx}eWGC?v23qwuL8g(Lyi&_2dYVQ zDcTCulj?HZ#U?tOaJmp{Dyk}~v%M61%6oG+gFPj&3DDC2`;kFB)uJ z(`lS{jfpd+W67qoV|3J^W9EAd^>OC)qlvj+N~V`c6P2+Y)WwyDZyn~#AUsNq=Vq5^ z)8r@W^g2);Rk^zAiqZn)H57TfFh1Ye8=t*y6-7`TB$^J9HYVOs2vJ#B=6Ht7n928X z`Mb>RNzkLsU8kV?Q?UT_be@K^Mn)t}gmrJscBT>sQ@bHf6em&V{fn8N3-qjpEs~al zWIjsP7vtvgHQrj1;`mQYk0VD8?(Jpm5FNo*8P7KlxeTvACbK?YjXWgBx9Q3pzfWe& zzB$M|jB>8gA2@Yo%)D*5$`qUR>P{TLZ}5~Ws$3-BwCPTq_;6Og>~)-LnZJ*wt}QaR zL%H~HHoxqxo+mrDf1FI5`LTb@;8#qw%VbKy+`p}!&)7YM`F3I`RPyhfP#YV&(G_?M z&i>k^>~t=;sCC5CW@6e=iT%M34@>)m=mHGc!A<3PDbn+e#dAM%ViAf`+Z_ zv;7W-o~SeA(jSc4Z=sJb8^;&?g`D>?Kp^&GQ4a4R`MX4<86W2l{zpZ$(2m`2N1{KG z?h(zlJCGi=O_2mv~TpYsCcVwiq(h9w&S{fJY{@3s<-WLKB zB&3;aI^yJHJ(no0$?r`_o*J8};2Q>yI&iuK5M8d{sASBG9Dybea6blj)v|~l1fo21 z)_ASLAHLqnS(Q)ChV4egflB$VSkimyjAcnK)u-^*FV5s8y=O*GWKGr_7@nr~XZ4?| z_hn_C4j=E#Tt30^W%nLjJYERmj&u)26vENC+cSVc0v@sE_4{&pE*d|b9gJP~!QsMn zyvO~K82~nt$5uP1bqG6ZXJ-SGEr`f1IRk^B#;!xp^m4_r9u)tpn_IfMT{`rUP|Ks- zvX$*G1X-a$cP=eHFWX>xUy90=7nX)3brhmh9;cxfVG}5Np53=~-05xMbzgVkuaIZ! z7aheNAGds4Zv)&jFBZ$f>xObC^TO+~?0j#&iijp-* zLExr!h)Bc?hUdvH5`LkENxsyB5W6T~PfjffqxZ3d{SYvno<5wm4=fS|>;Tr*?RD6+ zLYTD5n3})9M|&vh)qG`>Xm#}$H=Ra5eUEQ>@oVwyYI*r?@A|97v#y0(ca>LgHIw#y z0>!mBqCNi4nth(I<&1_LWRK!Vi)j^=$VR-q;$!|yP+V(}Z zISn=Wd(;?_JI>>eRi~IYdJfa^B{w*gRvUp^8Dt_(#JF~I2X^VUo#%(KG}VOeB7p6MD7f%}+gkC^E% z$L78f;pV(b6>qfVgNB7!*>hlZipQMByQX)qGVW3Uw^yjjWD&5EgXb^(^&VGMh$3^` zZmYUFF2IYJTjz{9&Z^rv-9Ke+0J;7HV`V?(j*4(hRFy)50*N9G<5jyvdn*!znAs~T zXDNq*=wHzZ?}TrSGLo|Nw)qWA#pgK~(&hBLve20d3rbDrWRtTm2GRMtj@jRZJ-oZt z`71XzvqQoo)=ot&Sq6OIjecDgHj=-rV)o-5AoF!w;1aDAU>GMEB>}(Z=x7*)SVd^; zcAC}E?{o0wV2Hvugv zb>3ZL(QCMnYap;*VxMD(CNC9_UCW+BwpfuGlr4JRXcLE?&X01o_@P@#FJ}tt^h{rt zOPvkibldgiS3(5B{|4{=BdGobv6&dzS=s;NNi#A2M_c`GkoP}m>wiG(pZ^2Iru{GG z`ado<8wbq)fU#LWRo8!DY({2Qj&Gct9RH__P0RfMQ^w}}>-zrhF!o;~_WxvKKPlV) z62CuX?|-qetW2E$3mN-Aky!17ahrSrq@W9)e!TinsC`H=l2HYN!8pX1eCK-*hDiJZ zETjR*t~VLyyK@Q88fBI_-VK(Sc-#AxHz55}jJp-0J!7%Y;l3Nbtt0L@W7Z2%{e+Wu z`(gZRbF#_Eb%JM$ZnE1FVzGVW$aVJ7nse&K{#GGw%#~!4Z+1J!L*Ek5>oVT-%@&(< z_7zHKKiZOqb(@=nb0^zO^FE5>u*a(Fk#pB7q2dUC--~znz;HdO1h>l-7prwf`W9Zj zvV6t3MYE=<{o%W(s^!SltPhK0-LerajA})^OP;siePov){r(Ly4~s;Oi3Sl=LFqj3Vtk_r%VP4{%6BsLXxW2#bi=nQi45Ee9`x^5EY-t%q_Qs`I)_Un?s5uCTr9T8Hrjm?iRc3nuf0XOn$L zIq}#F9XxsZ&G7^_f9>HzqB@D#8A09!S-kLW7?br{_}KWdE$>s~eqAg#z3hAGc@61h ziRh!MrVo7YBOJQuMjFzUT%Dq~myJsEe=T%N&~3OUJRphfYG88W(#GOnMf4q5ZfJIw zA*M|Z8)GVJA)-kO zgH!)Cr~e-JFSz<|`tR?5?dkuZ@d3p|G#zlUp(o5V%PuaN&gcC{$GLNFQWf9 z^8F_;Ff;vK9^n7(Nq??P&+$J)#TfwFOX+75gO0N63BcAh>0E~V2)E8j%#@f28ia(M z8X5#8?#r(bPAtq^E#r|L2hq&JsAynx48+7O@R8B&vYYT!#|%u& zbhb*<8>MZ{!g+`68!ufS58fXe8|Sl?ips@h6P(V+8H&!RSU769KQJ1g?ZvcfivZQ8 zSEQrJLiFE)GO6d`DVxqQZ9pD5gtoILIuk8@ZjA;>p|C$u=^}R z)jOyklv+XnzhkDKdCAoY1D!&=5aJk%?x7QvH-&f0e9P3?`)Kxvt`wBDdl32&ZZl{T z=WkVl2ne0{;;n83VGds{cxFcY43E+3u$5#-b}XoCzYu%@B0(|>bwektnzy1i&-wUe ziP9;@O(~#kif1-_KIdhsTCCU(f+aMEWfs1HP^kE_`ciY1@|>{4{{zG~KbA`c)KNz8 z$qd4-3654Y@KD5w+XDt|A{6%$Uub=aFhB|oOCM*`N=P;LWXi^@Q6Dn8NAhxVIB^&1 z3HBrQ(&G_IPg?ZEuc&;=7I*;^J+xK(v&4a^8~m`%k0iwwOV2?X*(;ml#DdA16EWp+ zE6fskErXAzg-Pq3^WCg1oqc>SY~9h1jE%l7N|Rs31^2Zt z1Mg@$ST+bB46pH*J6jtex(FZO*uT*!#6(g{V2#!gy{x~AzvJ+NZ}c6q-a>ew0;1Nz zD}@&W04-l8`=ZWlru; zKfylDy(0N$#zJm@_eS*w_9ATQZ$(}v9-_Ho#cl=HW1DVZYqB=koNn|L)zD^OO~AVb z^Zx{u2%57Lr4}S}^_MyaKYJwQ@h%4 zBKE2#ZjR+1%G~7y#uM*SxF=?OFXl{5@7=Rw-sDcF-WzGDTQ5Z#a4Uq>sN{ zy*z=v+CK7M`l7^sgOwKwkENW2VTXbY5{@)YKg5{%LvUqrg>%Jcue4pLRw~yf(WcWT z`K)>r6JjP@r{BJ1zxf^C({A<0i+}nRvl%%%Ve{sA3$*5y%4$HK_?I{84cYxGeq#1` zxNC-fw1_99@zzkFG#;6YPs$5pCpvF9V_I-kk0a3I6;m(WiskF6`Tpk zMuch3WDBugybg%D^x({;7E27?zArsqn;Ww@5r4PsB|lQsEAt`7HOIyP<|UR(*N#|{j&G>t7@QNRp zOFt!mf?m|>749O@W~>d!((<<#1|H;?eVi@*7u6G1et=m{=0vUzsu&JZ5iC6sIef^et)^#m>SiS%?7Px@EdK7&8As%>TdiP`v0#YIcE6SL#$Y0dHbjK=jG3vq9gIwHf$94L!)g#oZ;Q?I)5-b+G1^`we z@3+xwaEf!@tZ%VT*SLY2U-Lb#Oa-2>Z#6eBV66l^d-g8Art^bk!ubw#eXaBSsy(TH z+ki$ou~jWB3-eOQX(rkNb?Skb7T%Q0`zZY`c#Fp0tvf2rlAA(u9$lRKUkG8dqDeL=20suSvthDI;JVQcx(Y?0U}k04Z72`Kx_f6L}piHqZ&}<+?L(&ky!H9fH%VbR!6Df=h|+dM8o& zOd9JLHBKb14Z5p%+sm4Vc+p?RG?5*&U8cROpaQu^)7fRM?i@6!*R)}1ZPwby zBLt5dC$hag3qVr(qfDilo)#Z3M7qA4bRYhxJ!NLu7qUj6d?jTwJhDp4&0>CDx8&Sy zkO}p5a0TlRkWy)dflfw>Qlbik6^fD?EvJAJ8!J_ium{`hBpllhA{zq^AcS87r%hz& zzM|qzR$2TeEL4_JVfBXAQ%9ct{@Ksz0uYf(ensoMI}~7hRss7)oY>w!Y^c@>|m^_$$H9=!-%H5KISeS z0f9_E7y{Y|aPuHqMJ-p%KDLMObvN^ZC=oH)LW@39lu=GEn>ZY~7YvP&2fF{P7!d21$Z2H59UB~kDEDva| znY*U?Xcd~7<$AfFwn<~q{IrCIoEgZR!6F**pYBV5r*aTmtxA@1&2_kZq*^ACLg-Yu zeBRvf@(**X@921o;qp3`^2Ccgv)B!7(l{<{(bj$#sZFQCdiThdvwX7^3GA%0v-nL! znsox0lyoiZ9Ci+yJ0|=>mxg&P5`4;QVw;3JvEti=eM5#w!GlnkOy|CX__6%y-Y)k- zPw`8z6B8n&Uq*F%3^i=xh=+f}Ai^p66xu;{DuCaTDtz8yNiBm;$$!si7&}Z!1N>34 zC57;zRHvd#bR)rrGogV2WlWRet0!8vVuK2L$5ELpp^9F6(o?WLiz=34O3r;ap(GJAw1^wkWx~U;ozI zSwH!^m%dEzH$6hvr0ON99YIP6q1=L2nveFX^19_ta}lge7AkteWNN0eJ^DJ%M^ekl zo99kelqdB$?T4xPz8d1hux}!Fq9fIV+qujiDZy=|Q8 zYPE+#oGL7&y2!$>yPx^ZVJkb07Vh|3LMOA-0Fdce!?hz0{TDXOQ&RX)Kn1} z!@cVHTVU-sJft+TG4t0(Xf zxyVX^)Z)Pe_at}_twxt|N?VeD9P;ACP(;NGaZJtac8LYPdEbM%1f14s*B&hQx%BW! zNGK_Gf=VP93}Pu-xrzi!(o(AJ_qNi_Isb7U>u=|AH=b+-%So<$^9L{HKjL4L=<%18 z@dcOsB{3ny>Lt^3pPW(jWw#!`CZ+fVf5HH6_=qYiDMIf}V@iPk9MZ68M2!`lSWJyo z2;tYgm0%@DV+{j8q7a=tiea9%xVewKR92h{1E8iPR>Z=5SW!TebRH)?TUAXhXoHYD z@#X45hv#r;(k{k(b5ru%x??|C_WiA2;-Di9oEB>kT!((NG)tLF4NvlYtJD0&`^2$* z!_&g&=gt_Xa%0!B!%G%LsHcm>eMVd@ISC^j{a!%FNF2KMw*(qswxobB)76kp0v=x# zj^Kn1I6-Ot)(0LV2Dxz2x*1(ked6h=6>B@6Cc_e(BJ8*$?MeJbU1yxfh(&B%@a*Dl z$!x+bm7;MS35wzBl$FeI7GEJlqr=Fm5^FoUwvlCcX^gcUt+cs>W|Dd~fX_~QQ)VSP z<;?#qHTU$uFe`=^i6iAHhNBuIfJ$63PElc|VhTHKkS-f{WsUEF$+bG&Rq@V_Ylk_H z6nn?xa)0FtWNb&CPN$LkDH5)}{rjNuc9|jW&9*2!rRdwDY~qA1oq*3$^`qlkneOFA z!dZE&y#zw9(w!LZ@~`Nen4Z_jILfj@nE{ul5-Bw7(fr5tHFaajRV&|<_7|3J|M!{f z28A=fz4Zt;=?(X?19duD$h*QPD6^WT=N!TI9~N?iTU)1+a+a_sl_G_~;A*o`7S=vsK8t{jV8 zH4R?+a=q14MJZ$LnW65u`A5%OO2?zZ>*4_;=W#IRe4%Gk2TQZz>Dxo+A4TSLOD0q> z=qfd1@%3Kn>JGD=Cg~++)YtmABYTHu@Oqqu_4^6o9BxUZ?FWD5=sv|c(?qvZl7>Lc`xG*K&h ztz$lwM)|^!qu8O^_`?$M{c7} zxv#mzp`m?jkOvs)eO9$;t9t#FD*gLmAutG93}jPSsL?rxaN>2#R#>TcYyrlWeKqjZ zO~g$x)){L_hSase)*S{fn7Fl3aXfPYILF;;tGkV@HI`@>Yj+toYx;l}{X6pIyBSi{ zvsQQq3q-aR1cFtoctnB(t2T2{uo|m3@!7VM62@N7+i?kq!bo~;Q`a<8vdI8a)I56m5l(E$<;L9fy07!{J9rU3;HOvyn*ZkuP zokWT*J=k~*FF~|^+Qt=%Mn>N-FQcB)Q`|c3Se)xM=6PzKGUkkbokh9Zv~NZAs(c^F z>E*rkeB0S;iNanC%UplpQI1m1oW2&oADhKXY!On-@y+O`^f<9i#L{UGXk81fy3K@P z^o<94J*3c=m<66Wj00pxW`lxKpLB5%nAjk*fn0Ab7?g(b;Q~W2OL8NUrE%~hf_l6M zj?{pTA>sYf@Mg4B$FV+>2^*C$$T2+AXwaPXjruK^lCqf72N%`iovv^nJv5jWZ( zHspm{bN49|W{S;NAyfMJ?0)^swK^3KEg94hq{PJWdeAZAAuNTIivTcTP&qO@A{Ak{ zKGkmt@-EQRy#I}kNMq&hl6LwvB>p(QoZ?sgRYfFgbFMpzIL#pEuRUgZsx%yOPbq%D zi)m=HSJP1(u))a+e>_dmcj@hne7!GXfo1l+4hX@nyP7F%xNw(B@q%0QfbY?h zDBefMK`RGS;v@W#OqXd@{eU9j#<1@3(l#fmZBl7%d}(IetK88w?)W^K z{P<8NU6~{7kH$K^Vz(b8qkq!-GY!;se^W$+tI=m6gWIDuP-9fcdO3wlA&SBLLBjJ` z;C2S7U#KkJ^C@et@$FFvyeax+ekS0X5E*wZ2gg%fP^eEvJHCg3uH%oX_aeH;&}4d= zZ(R)0(s9RchF{gS4S8}5d8udWp_QbRU@~rxrfykSxNjV-Q!2X}iI^`uFMPjHaiN*1 zLYK5kx@NM2DY-(zL1CwY3lTGdO5L=C#vR_Yf*hniApdGPHzbMm3+X&eDu$k-1hbaL zfQsPzwA^5>Sc~*B3Gz`#|% z8&n!xIy#ZGI06>AD7-_{eHwAlen)XB8@;ib09t=*?t`(jE7OT~LvfM0MQFaWhl>}! zx;x(Y*F_s(B1Dby1A`{1zW7=hR(Y%bj?0ex4t73P#2Q{LDmP>;K=2DcJrBhh3&B3( zuh4>pKQp^5uHnsOH^V~FwQ@8GNl=pg(gW7pY)5=od`D=e;G%s*#F*cS&cFD7%f#E` zBO`Q#_#XCs|C`Z|AKl;aph;-L!-Mk7#~GS4VFmGIS%G`06HyMOWl@l{+qua`LP!RY zaVsJ}sG3)l+P~`W)C8UQJ*UIvH1B5U!)5SzDkS52?M;Hd?eylyYlDOY0l8rGXezt4+1bN&NtO&hP;D0pS{lInx@osuE57V;lTAOB^LCk2~oP z48j!AutUX8!dA;`?m^@s$3Abg>^1q1_mta^t&|;jL|-``impiAy{AFA7ktPoqO7h3 zyX-5U2S65*j}{6$C!4$NRx@@JcJqxv{foj5!~>aqe1kYfu^ZJ>>wrns(jp463}XQ{ zI%ofH^!R-YeNj7@YAA676gdO7oAX7riN5|`%4l|C@y#s?(H1p0>yB|F$07Muic*#0 zYaYCXF$o&TrkMCss8B&BpRl;!k&^;J`!P)1I#5$`QDe%L+ps7V3TnMXY9)ii{dyDd zHQ13Ruf1zP`VHY`kw{Ks4mLE;Z%M+n4i%u?B@!m%eSi+cE)-l0s#I66B&zSGMkslG4A?}L@iCcUL^=b=ACnT3?( zedMW<=}8^ihJUkY>YzEB?ne!`nDk7H$(57mQ&{-ScLX=vN?UJX06tNq+AYYr*Lk><@tt zb4maL;qZ5WI+oPNY$Tjj{b(KQ$dTO-$>BfziKE>r>MD3sQ*t{|F{&si`KTx;_97uD z0#p89;_#y%gMuRch7n z^L#GMqewwEM~potQ8v{IvWn5|?7#H|dNtw5j{hd!rsqYqr2iTiF4k$Q@{}qu+ z4wr2%ReK#7(aMGGvx528P*)e01y|c6>SZq%-qv>}PUbG(sf$6BVP$|gb}(}iz1R}R zK15Up7Th72-U0Y6EGw>-9MyD_Hxbn?-KMfW^uo{rEWnF!gPf;(i3sY>T##aN>IEnM z%S$3eK^=p{$gJ6)Q7>FycHbcWfe0@x-cyU~ub0EW(bQ^S=Heoh!U8#2G=FT)y2KVD z7rWf=3LVd5M5gc8$AhZkGzHuNQgmvAhC`ovJLyfmVSFrj|FC%1KGF%JTWFwRaMqwhrhVKo>k7D4+#}fWo+mGO3n30+hZB{yP2-Q{WAh?< z>$_||q~GDc>W9G7%rGjoExg!}$}q6IP`w<7Q4tv)EQ8g@7P3)@>A5hV;X-|tkGlc~ zb2ctLnlY~$a6>6xz_rT+Ar7>XgA;`}g$wXs9`Y(aY)*k!#nKhC`xuf&SzXl5T@s{o znfaVKXo1D_vt5+a@Zju%OnNT5tN7)p=iyf1gM8;eM?PZx$J;9P@n@>*BKHaE$D;p` zKE~{`(XhG4;T;K(gTbG`1J#TnMF0^1eaumpk5%K?J&Q0lFtH7d3wBDLu7U7z5LUV< zX3Bt$+Yp%;sWDuVXjRcLTC~=ku|m?ehkkemJB>KWI92+)JGJZ4if+B;)+E;MEScZa z`7|E>VXLEf1NQ|~cY6Ao7;*i8LC0aP(!c$@_ukO<-0h;;wxW$=q`_v*S@pzpXHYPZ z$F1=>OgsQM`As6OXM!6(Z@ZG+jv&C7wu{#LoA>|2**gb`@~ivaV{?sd+qP|cW{qvz zwrzW6jcwbuZQu1fb?cm6yY_oe)%!=PlXOy@PCx0cPV)Uc_z$JC6d$3CFIisX&v73# z>Ar*aX-{=dqmw&$OoppQ9)pu;?G=L`GA~+h%4+fDqnhYbr3J`J8Ofeoj~Q>USSvr?sgHY@A3Y1tQ;!-Z$m zqPB@0ODB+5GH=0;wX&(J(`s)69YFo8C$S=kI0_41rQt~V1zoDnsu>oXowx<-jC@YU} zS2}b&fceZ%?JMtw(PrP_0Uwmw@A+v@5j7*euW;skVE>3af+td&xYD`;`i*?s1RV{^pb{iUWFBBx^-I+uRejK*jWMKX zw8=ja=b5~d8Y;BV4tWb&!3WC)X&Mx4-WtJe`!p^dTK2M&0TW97cWMD4oDlw@*e@MM z_%2qU4+#I7vC#a>?x{pLQ)d3j*Ee{2W-$Kpipq>2B6c;=S(N%m#5ME}Z}Ig= zL>o*k9s4{=thH^&WK60R3!4o>#|yge=c(EYQkFFn3YLy~($6AvHN}XIINdRq1g`#k zX*HyU8JuvAhXO%;+7-LXw0pQkXn-GUDm$iLDkWME$khnzM@>07DOjMidmafa50?{% zHTALjofCan+Q6P`km(4ch|!3@i?1w2e|h!yJBNT zG4g`Sz085iNN}EUQ|6|r5hk&@Y#*0yd|5qaZG&fQQskhiySmbstDzF;2iWAxdzp7z zZhWZqT|jHUGYt={>>=wZ>~Q0e&!PsUZidBR?gibb*=1;s_~Dwz$h5$B`)FZU62rmk z@Ga1Qr<4A^$lb1sv_@t6YR2n(qPc%k4Y-fg( z3QJz7t-&4au8jc8M77a%8Y-arv99~`IJjZ(*@#2@G%*9lTJ6Kd?zXT>Fg-j)C*W;ZH1^Y`C6`arTR+_dC=Oyun=h?Mxj%?89=Ip?o#w}L8D>!#ac@0l{4qo zep;c^bcK8Tm&$e`vsa2-cj?{Y4rVgmMN~Lx-B%)X_H@A6VQo|?No>#CV*Ir9-cji= z?NbEt>ir{zU_YGz83}gjciv3cRaSNjBxD4p^7wuiE(P^>Xwas{FFDJ81 zVP2Zo;E;bB*pxF=c)8v}p0m=8(Pl*?6o0v!Uy?)(W8S}2K8$3%?RdXah~FY-5ueqd z&N*86gy)0mgwY+QVyG767I59-^!o&c+thImaHWYAu#4;#g8Gjf*lN8gBos8H)?*tu zV3MenyJ)DBTA{IfFnIIt291m@=(|ChyEBJs4I?5P$tiZ-qY3X&K`4-hrlW7#9NL!_I<@@L zySk3t!S!X{4%)AWOt0&+iQ^fh@!VIWDUZRhU$T$1mWh$IEUg}>vL<*0GQMuwZ1 zY1JheG1QCXLb_@0Q(&cBH$QRnPb@4-BhTDAbEEtOZ4lTW@D;nh#b}-cB-8F-TDNgE z%u(AU#|#4iH%S!Ok^G((ajaAC&N#{$-k-2<$Y}HuqMa82I(no-tU; zf5~{ceGS(J-x}KvI+T4uYE!sy+$C zb@@)r;Bpb3U zqa6g5)m&3NUEJ->;Hfh+#EoY8$dUa{!8i{2@qh@&5mPf!RAnToC-W~u)-B_Uwm%w-(1%}XIUu|0S_g59ZIWY=%ygH z>l=<9mm^y;XZ5~0oJNR$c%B<`M>qt4_T)xXA8LhQ2n&TDi{A@Dmn}?Htc<-%mC|f- zENj&`v%SZ!PH8`M?gLMKK5##5P8v_+uHrtsb-L$#3Z)gLDe4FPqOy1@7VMP~!v;)7 z1|zNKP&0vnvSPDe;_iB^r_CxS#Gd+S;M%+JBA5a;?~Ee~>*#wm+)b?ObrbMh3~Hu9^B;+@i16 zR&6($`5GL$x|h!&{lM|Y3W7^{9>YYy(X!F11ca?-J13M?b_6X?!e&VkPyg!oP2Dmlp?TWjEXc2g0 zGJxa+eWTAjklT|pnD%l4z#}u-v~AtFRRx6B5>9QEdas_d(zb4&+cZiy#i;W#{wja6 zzR=K0zVi0W%%bDlhd6f#69av8#`uE8n{CDR$Uu=CW3*_=uZjPN`_5prT=rQ>H~NyU z8m!l?Cl(3iV9uRfG{BW1SUIcn+eApVtP4{d1;j~_2j?gs085%sxu`?5KB8SRsFXRB z_zhaOWIk(v;HVr0hx9upV!;5eSfu!zJ{DV{nUfk{YH^5@n$UES5+`N0scgb&)o)V) z{%?I1QJ(4n)$mBxS-tLKjx?${%Vh&xW4BU9b-#CZ+d{Yp@~MuHKEg#YPun>IT#9XQ zbZUh*cla~<(eaNP7}h%beomN!K~Hom5K^QADJS&9+|`N!df9zR9I!XC??||TwD6g8 z`cb|+qQ4m*?0>KBkgFFe@ZEjkjDC2tQ8}QRsYPL07k;1P9S;Y5vxbFk74n{R>FJav z*0zSJhdM6xe8LISdB~1#Rrtgq!YO@$#-JYZPQh{EoF=x$;Y!aQai8WW9_n9gsYGA`^+lhZ$xl>RVymtc43G?)3MGLK!`U%Pj z<8@Rk3{L=hRNv!F0Z;~6EhsRGmZ!T2Yz|?~?_E`bEeQ;;V9K@V$`EB`Mj^6wt0E7) zSRM2&WEPhk5C;zEiNno>UV_rSB(DkAEYO5&alU%WLvQ;#=Z*dy4Be9^s<5}Ui{1oH z6Yv(w?<3Dz-wW3`>s`Ap_^~#Eu$VAu%*-ql@f|?T-+jXXmvb1ZNpmC{yjVqEN^1ou zI`Dv7fy0S`x4kDhN0t;CG+Dr%qiJ^Cg*1GO+v4EyJd4sQrFphJ;7&>^oBrA3l&jZb z8Aug8F$?G^{;3Qwqs*yYy$6?cL!-(!&H!W%Gc8fFJ&*?_y8xo5{~SC&WW3ha3v}jA zU?bEI>K#oi5I=ehaqcGUKuD|Gyzj;-OfzUw*X@Jay$J%yryNo#$<2xt1 zZfi?8@i{?&lL?V?l6 zLmY=LZ_7hBMK-VMwI454URL>ypv75}JJZO?8z=aBM761dX5Z!f+wVWRCryzWRW>G> zgshJj4W-`g7)fxiN@N-V53x0Kw|dD}!dysmGk_)0g;nQyF={Nl4MD z1gv_$Z(!&*n*7h?=)}uI*AAX-kCYd>o+UJk*Oqj@%I%B$7W-e$Tyhk#G^R$`krO=< zZ{`)I@Sabp9Bm#);m+oZxqG?g&^88y-q#gx(CZ1at=L?dXo(bas+Q8NjMp(X^Dp|? zzJ^v@1vwuw|1QBJ+?~{=Sh0>+9HRtSschuONScx83$HsoGNgJ>fy*qp-f&nlu+!E< zu>4Tze&;?`NPeyir{Q4;NuaMBOXbOGm4+>YXfV%LdmcEhf9b>v3RCs)Xy#F=@pU_b zk-1S=cd^hwoI6(kZr?1d^&~xT=YQGHxXMq-&mPm$ItjzI^jIp@va<#|2WPI`VydCI zI@NA^boPAy>DP>sD$BmxuKdUf`#RNU`Rk=~9hc(-80C1W-8ow#cJ}qkGO`RW6Pd2h zLM|J>5boHxoop@L_Wl*;fZ<|e=v}04#&(Ob$7GAJ;m5<4l4UAK_K-_(rA_^Lvxeg& zoX|3D?9!Vqv)Hi{J1dW1(Z-yL8KN-zp$>Ct0)s|iOQ{-1ZzBAUu+{*!_Yn9R?HO(< zK|?Ls#XKL~QaG;efkQ!Qdey=SaedC1{gkgg4$-#X@H$WX?*Jt7Q++wk6OJ}*Aap9y z*O>g9x{-{d8+~kH?(Inl)lMAIOJmfN&r&p+??|_F$NO-%21mvWGbPd&%-??mwJMJ| zcTQf~u67y!ez7!i zP#QFehOG4t>jE@C5Y#T-nZ-JkX}}mm%^0i7XW9}x&QBY%w974$|CKx&XAO)gFV$fX zCDHgP0!Qgpx1{v1vRH9T@@4l#^g)lDRn1e-7&8_SEig>@7ra#o|3#4K!n;LVeJc(( zie3p03!yYwb}BPMoldTC)?(r&&;05Nu0br0{f0(AX{9t~EHhcmO4Q>xeB$T8@uh8I zWq?-z=b=I`jh6OEZl5G?dC)k+R$G@$X0j<$E{CB6&;>BRZoR}@RVpkt=r>C=Zb@p+ z9hiTmTFO0=c5tpLsuty-VySN~s7`;^WTofr=DkoX2~UQpOtRl(uOU#8_GCFHS}&hc zVDtZF&D;J5$voVw`5wnp7>i`STV3zWc05?JD`_lfeu{@57Sx{qcqs74QS>g1y?M)JMDuOXNp3yIevHCzW#)>fqi+uv>Uls=MXRD+nY6uiP&2W^D1K*M~_b-;F?{X z;Z0KEoSI!zpIltYS%j|qu;WLim-D2}6z0*Ks?kr28|A)44-$5J@p0PeJJ?fMOy)$r zM@eCER?XBxz}C3}EZ4zRsk*Xvx2*g?^9=L6z13zUi)$K@T9q4;Lbi`|c*gr{ zP%1q-Ho%#Z-=FjSYfyBqB#pQdm+}~^-9)$9vBr1TySuMx;}lJ8XXO9P&v&S5EOZNK zK;L5)PzhBg=j$2|@z;5irC3FlBEYnG z0c$0PU54fXrr6;FIn84*nolp=WMy^xZ^txKg)pL2IL@*qK8H&KL{;m7X36AP@kp;P zH5PbUgR9I!JazGGVI@7*lxM(6^M@jKM{3F#mvMs!1S;Do@1Bt6ZHNPSNckrIc6EFGVW}I9boQ@S&rDB5x*XHp zX>PBiTb*0V+2X2W3{7zWa7^#^FX_K$Y(_5%nlqU0Ihbit(wk>ER*Fh3Pop~n%_%br zxCq#)i%f4N+W?^)mr(7qs4k6U8g)Uwg(ZX#tW5^K`s*ZDy4VrGh23l>LgfmW%HNdI zC=R8H+)2$Nbzu5BU(noCm7>7(hZ`*^@42r}ca=k#kJCe~N(Y!~z6K+<#wJdh6UY8n zi)5iqif+z0`8mWqO>Omn`(4tLj!>o96NvM~;!?CCp854P5YN(ai4m+>2!@G%W|%`- zdDYp~>3NZR9AuF#4Lx&fgta=l$D3xmJGgmq4N0#796c{Oh!i~0Z1ZxlldfVjEWDCM zrf4cNk>OXxHp@;Q(H58`xQAaFK2}~K+9X@yQNnISepo>Ef|2}p4DFvg6AQ}i?oL-7 zy8u_f53v@Q!cd!rZpVxQHrN^q@R}5Gva8K!$SAnkGw@LU^fHx@sY>g|n_mE1woA#9 zMmj1B^YbB+#U%>mwq;t1N(vhJuTog~mov&K%gib(G&YI=h51efN|B0c#YwbQ3Ko{A zs=q0dr=DPwqoXBt0u>wce0*d`7MG~0b9-6~O!l;kVcuz~fXP&Wxe&puE0j)y-sM@6 zqn+wNlVOjR6UvpBm}!cPRQvLZCB4mslw{ua--=-+zxG4k+lM97x`9G; z)Enz608PrZ<=g5guuOtEiya`5lZMad-yYVKizEHt!9?}kb-bm7rZ&$>i`#8{L`alV zRDg_&jUT9*%l*pl--=nF8IvRCL5m%!G-^4~i~aM@7HO($eyh;yQG6z`EiKX%StYH| zSXuZPlG?4!GH*MZ%NQA#D6Y#dh=VFF$%79l*$c*UvO+v+sh39!id0K$BJ$@S4MiuP zn3b1NXTuw@%ugf5H&!DMg03A!J!1+Rq@u1lTV1~lfr|I`qa9V@C4|9p)B^{H--w03r?5PSDlv7 zonW;Y>L-B4_YCV&OZ2wvza-Y@!TN8E&v4AS%88#KT*>By39wd4W!eKYnL9J%5z`BlZWP&c~FGI`l$l@3JAPRsZimsSt5P!yns$^jfh@sDlee zRK%vA7LAY}Qkpm0!jqqJm3-e9)NhakysnVx2a4uA(rdwYl3;Scw^q~|jH!@L_m;HX z3GXbeAbQ2N_V|4-=cLLFnvp{R-JXs8qPKu8jyGz&^u(EnWERc(927Cy#RmOv()H6P z3-7EsO`AW*Yf?t7pk_oxu^jJe!X&pp6!O`Px!H#qu>K zuI}#J!(ZC4?O5{+G2b#M)lIx1vL+Oj0XHRs|&vb=HyDZKd4)*QCFVSA4ewVf?5xPdYN)^dgC5GuVT{u6_tJc7P zD1!k}0@F^cDyH}kPRufja}nV9A%_qbV9R$$$3Zjh1XrQI`MLJO zF?2yp)3>=`B!n3${1gGPDgo@E_~}9M%{4}I2nAR(R)Or z^oWLQ5f4_v?kopiSqwih|MzSu^6=w2C<@SS1$E#Qo>Jo(i#3BKn753iwQhJb485Xv z{2rirPI2qF1_ERLdm+gJcI~lI86|?uMlFeF8Y&itzd!ThSOi-z;U^KUR1&;+tA!YO zf0+0cO#RNM0h+t8a=89>++cJIVvRn0l&9mERoYG?xcFOEd_$%}7~XONiRK^miOzGu z(H_4?f}&LX>d?P)0~AGXapMF!0ObIRh@#U6uP~&t?{q6LMsP;I2SNV$O@O9soY9xX zCaS-m3?075*N~(C%*8(@_X7HW6hEN9-P&|U9T6-J-G|2Gl?rwP-;>1sY={rjTNL}NYTes+(r4~PaXzxUbivW9=L$%A>5^;qso;i!ev~`}(K+_JLMP z{GL_@PlS?~7c4z2{&eVk0#CPQTBm5Pn~i9%8en3o5~r9~@tKt{ifC`eimSl9#13^{ zKKX~ep1?5mPSa&#_hFReP7*EpDZ`Fo<(vgIChpLfMLzTA&HSw&bEi6H4lV47_yC|e zy9}mmatKoK9tg$yF7qf@W}hKF1`OC-FIE^JMuFJC$ddFs+r?agG*f)3TuvXOz-7;Z zk#CG#oqwMDC`QD-g@m<{hM8!di!u~jPy|pjfzX%8R0n-`dGK-wTor%wMDna@^jP6) z(`kQPoOX!Nw5IZg@-bXIO(8l9OJK?Z+=|E94@(o8!DZXCm@bd4Ifd;uI4dXWULPuQ zN6nzle%1kbO$GZ*p^PuswD%^`F2D6xNLL;%{B?>~@GoSne0J%`fu>Vg2xh&TO?AT%@a-vBH}YT; zKT{_B;C+H26MeTs1K1fcZDhJ^6Tg#g_&4;N8E?FS1BRiErDA2(OGV_6#3*^Rfip=_ zB)jK*V{*_sMMdVSD>sax{)vPZr7C$p*uxiK$v?UIyKaZ3z;E{4LKN(w2}Om}SYjH( z@;2O|3HkYUT!iGCaQu*;Y+eDz$vV--t$(`RQvs8klk}>N>K%5lOE6StvOYRLW~Da8 zMzPHx(-S5HkAK^Jl3e?7W1Tb!hQ>#uxBQ_$HG&FHiGwivMaMf{Sy?akc}-+)Lh zZ@rY+AlWEsj&#ax-7xnfEoJMV$3ZpL0nb;)HYR`N=RPyizq>21Z)Z56u?N60R&^UxitX1XvGMh5IJE}?+<|AH4F29RMh_?zWzs$&A`IS#`rHN3fBJ- zYX7&={y(88ME?~+ahz0!c zonQND*7IA;V5a3c`1pe3>RKbyEtlYHnfsXr+Bm$HT06OG6{69nE_5e(4yo;|b=cpIN2L zye+_k`IZ}IzMC@>%PpTMoph*aF!lH-EEZ{2mA%c!U67J0>*X`c zZ;E?T9CFXarWoutxy77I(zYU+@9Y^&FV)1{N7ZZIkk88hA z@kjX}St|M9Q#-dwb=kT@b6FUjU8ig5xijjxHZ^VizIds*G_9a_*icX^qW_~6vj5NH z`EP6ce{dcCUq<&I*$#|HMrd$El7@H!LQ3*7eL)b= zH5mX4wUp+k3jg!=%M}^D~TejWvz~hll>R187oY z*(_zJu|vb^-;(AU?nA|=KdZ5J5JL@h&_nlQ2j|-tW z0yhWBRRunuu=fRytFa^bl7oe{{+cd@0#0-e`J7I8E_uR-0*>+|$N4gx?XZ08O%|t) zPLS^u9!{qK-S(#xWj#n;5z~Dz-+?1#08>HFj`CFRSsx%QFg$+0n*cH9h?%iG<(WL- zzfXO(qpt;e2Kg{J!3*1Gqi6LHDFsM`=-{%&%uiW;D($4#Lazm94D8M3dT(JLhzvs6;{sDm~lNj)(W2MKB7nHBbgsc2BYa0Niw6+h*i#+ zJR-ldxa?x?rP+C$w&y2`3(F=!Ia&zi9(ZvFa!+T5kivV1(F%djUDWBmy9V_{?T~1r zQs8>Host}ig4Y4^#p)qD1apDeqI>*4)yNzD%?wA+h%~GbW+O;fz&7if-;>}hbTO-} z3{CU{HDZ8520Xk&7c z*YgX>oZv5n+`+TW)oqdw@)a(hxK{zq1N#cx=bOd@33}ESuBK0I-=!0lFDf=s_nzb} zBlRuw)%Hz*fWv|N{%UqIzlR79D(~!6vkA`b!*Mb8xxiQKrl6;wC%&2% z_JA&2@RvBt8U9QB$QWH~`liliq!%w=a8JY!%}>5vWu1sc3gL;X=yl8|;eAIwuuu>1 zdOiQoSQ!w#2eACm!71n?>*F`zJH%J~Jp3acD|Gr zg%2+u2v;JNHsvCe9E2P+9c1YcVZF#D0$-v{l1<8wHNEvMA0c@I^E}oW_Zzu+yn5jM*5Ib&ZZzr@pXiY!UEw>kk%@Er@>}#nTmk$D8L~bxj zFJ>5sqZ}DYQ3`XSssqy+zYUq^-d|uzV5eA2yb`@59oqhUo4qy(TW&{`7M$hj{;~rb zu*uDS&i?k{_OYx(u6?QgO6MnfcV9~u z>Lh9{axTITdHB3rx#&7^7txo@b#Fa8tVvBw3hE#{H+u-Ti1sI^7ZlV!eQZ_Tz0+!_ z=59n!z9B8phhhE`JsaEIgDez)wex?>CAj*)KR^hQH3H_xR!tJ|_-;J<{6r z`}m->Xuq;$|MQ1g1Ch=5kWmp4PicQExS$IlC!_n|MAD}Z-E zHpixp{{E{73w*u|qiE8a|E2|>@(I&_W*Lz0T_AuOX-C+zTr?hPaO|`Bl=&U}U7H;Q znFW;iY)l;Mhv{2R2vjJ&*Pz$<6mqwt_*8K>P0mjePAKP?7F?Fik9rKWrbggF0lFQx zXj@09O9&ozi@C|94Cf0>zo!r56>Ae1n*jhpQo@_ln;mnOCL1yFXaU7)RKB&`&9v~Z2K28;IVFO zN<7##J>?MKA|Q7rl!KR~6A4v*Di)w8JRlz)*fu+?!@k3#loJfnWiSd&z@71FDb#Hz zfaXmQPABAxkOZ{&74xI1dJCu=z7Bm37|#~C;swOy8T_eI?=wQC8rWzsBRAUnJLZ%S z4Sm0xa^OoZ+@)ABzQ#nWFR&MxAy!5J(ybA|3JA7^fPI<#D-tO=5u>9Skof^zU<^jU zJ?^Y7!|AV1AQOXNXBa}Z8qv4-HTuvNhLM;3mR0I&vT7l$)}?skQ?^ryRitP=lH|MW zPnyq`^&}2w&AUUX2vQm9EcrOR=?R?F#O&ns_#9SN77`8$h9rbqu#v%`VUSPW+L0>< z&P&$HAuC2qWQ|{-IYj8jNuiV(i`$1Ky1X3B&K9Iop&9vk?#cp6wNN4`Xf0Bh?L`#@)JT9H?|Xk=Kwi;mALaQslk|w+e*|tfyFHiO&Ifc zcK~@QA1Nv2U9A!{H`VIRPLA$M7)~uCX5_HRe=r%DW^n@%6GX+IJcMvO>s%R4Aopo< zTSM{JU=q(^gT}`_zw#M519fT3JKKs|OjNzyHKe_~giJ)~XmyY^S0e@gddNAef}}Ja zc#J6S`h_KGU05lgwa9}Z#=66*F9e-AFGG``ay)V2*>()Z8N!1zOmp$1>)G#00G-Vx zdBGM{6TQcp`mwH@vDN7wxbFE|_3L!q?cK`Ej~5_?ScTcT#xLI%m{@hGf*!N2IKLZh z2S}*GiNs0e{asV&sHx~ovRMsM29jpW%NWT@M&FSxql>hg4q+A!4oA%2!P!yAo4mV) zopfX;bukoXNV;o!_&$Ir{0r#*{uIJZnhatxe>*3R!N0PtUl@jMlhv6 zzQ>XXimy%+IU-6O#at1Mp8oYc=MoRz~c;|KH2!QYM zu)BZS3=CQG_;_<{Zc_kZX@aD0-Zh>)bVZ`GFcz%cY86GS7i3MH|`a*Lm}{IvZ)0vMoh_MW`c(- z)4`PgnLQ5tjkea@R@iCoCIlV=XB~c4-C7NZT8}ITVn|{(o`bN>ZW$ZGwmek-YmnGwpUL8n#QA{+fDC4X4d5{@A5EKKDbkCIvP z;#@2d_@F*S+QLBr6KNNo8Ua#fP0CI<2~52HSQrRzFHT^e2>s1iAq?T#Ju3>CzSDa& z)rL!pS)F;orNnGlACWSo>57|s_-JtB;7a1Qmwx4e()F;DG|x7E94~+Sju6H~K#Vl_?D#_Z4tvnSEPbkg^rN+dtvhO~16f#ELYhE$ z$k1sKTs}58wCs&5q1?M>eH4#bp$yj?@9-~PeWChm7;N<1o36S`QkPALU4>t z+Ef9=?3&*#Sg^bG8AFBT;d@)S+=qQRezy9jVaF2UFt$%mui~LMO|f1_1H6F@8u8}I zDC^IouT4?LJuR(a)dnJ_9!@B6oX`ft<%C!R*72|@N?sP)a2A8ncW(vglH#({;M^VD zIh~t#2j&Tx9CvmbDsnO--@BLl<=N(|Jx0_0R5|UjkHTIfT4XA&xxHfDUvV`^s1t0r zi3ZtR%(;h;oF@}f#y)-{1{_vYi4#@18zAwt%+s_QlLcdDgQNU*4dC@Cgxnz6pNS|L z)PAwNjcd#e@<_ba{UwoT7F@?|h>>M0P_z^Z-TdjBQZAM|4wqaS) zSt{yl$+#Th!8EpPyz)52Mmgr$@{W#r#G_<hurzb?jIe zsTA$U8B{qJ7-tmsQNC@Bj<|1*Uf8wQtq5qZj!+~BFusA&FISEJ9UD&$G6*<#4%>i} zFMW0V3SXl##!{&!3>e8)Lac&oZh)&Nvw~7j_G7vu*sk@Kp_VO?mJZdf*3LN2*)EWy z#*XDR*l6$&Z6#u+FDTh6U7*b>U5Wg8IKnmgL`awsCh~8F*&N!B_Db5wX0 zLkJX0Xp}zk`}c#V~;;o#szs z5E%ZAap`8-j?@Yy)Qa`tkMjBHGbuLh%M~pLCQ4?;D*pq_|7Ef|V77GCdaMdB%dq?fG32~pi84}8)1Bis;O9!KL%x=+uxi) z$%rb^$M$2jChA4)^@N1(nNFgc<*oF)1DFdK+(;L?6W8dMNaF_4I}gRax@({>OIz|K z@=JJaL29KWclswNbm;I3|Ycp1be$B2dd?30(;cHm3^1} zPuRi1KBFD(eBNS20DUvZon}=RyKZEC-vAoK2=MdsUBZ~vXkG)*xjM`ebqFd3a!dFJTos|8yrdBi>VXviq^EEQ8dxaK^gC=yZQk~yw9`Rl9eX4r9G-)-*|O-J=QMn z853gPNsrx}5E*bn;Fc{$o`Xcl$5UEjf^mv4PKRmoq4!Swh z&i(nel=@ZXLb><8DBGeKuVpS{0w4UF--~KYZetW}U9zsV3%%MUmA(W09g65}^j+SQ8Z|gxa$5W78upN_f#Ox@6 zhNwt`aXY(gp1+EM;`%0yZnSfc)dsG3H?KGLh`NP}P=T}VPeLd?9C`k(92-T z_OPq=FmH4J?BmwG$LM4H1g`)Ev*JFan@8MK63{(c$l9)IkrWeyHv~}d{L#g#SJ|t* zY>z&k@uITGQ(0QR5m*lb%j*`cn8ugA0Rd!a4N%C%bp^ukfW|6Uh=ZFR6i5Pi4GYhN zd1c3p{#iVsmIip_2Wew_$7Xg_ZsdfTswkZ84My zy$aQ~6Z;fBaAb8vlY04gCaluK(yIUR!dC>aiq6(Jt4}8Y~5@bGk7B~J0GaFpTfNtH0nc6*F8RI`~&#KO%<5;QJc|SKbEad z({G|QD;ApgpD-BFX;I#?G^SS$*Sepx&<|Ihc3=}_AVnU~(eY%1L{sa z_g=5uD@cRXJ&q%e2Y&t(9XHB0{ zSvln+-Rh{8st7MUi^eT|O=#@ci@ST#aCk#r1qy<9>>Jfsu4_i9QRaA!MlgKCm~@sV zmg>(VBE`;}D%sJCt6W0OWc2>W_vYm_hPkZ6Q1J4IycJUDuxRj%r1rhUdBK6QV3-^Q z6+y$^12O`z^zEhq5R}-#PV?Tnm`~4CA!F29zx1+V%s!Bm``H@yXfXB11i_nU|3>hk z>t!1w`P~63Q4KtCNup577;uyplt4xE|B&tPV|=hX+uSAC*4ciZbP)M=7sGaJ^9JMW z=M8VIavS?VxlV0PL`Kl(WPkM%eO$jo5X*QRHjnOIv`7z4)aa;bwkNC?@#=@j2~2y; z`lWE?jF@*?C|$vRdgS6i(7lFj7?IJ2j@a01#!u}Jj*4nWSh4Jb4inhnoQa|fTeY0a zVot>XlHuis)bu4Xk-HB$G;0$%I#keXboa_$F4D7TWsMCs13bCKxP^tz2N^gBKJPYN(<&mF*LPQuUck z7pnOk>p2+dc(7n|`EBp&EG(u-cCBoXzcnEZ;;wG8>ijb06R#ASyY1HcmVe$lD&f3L zf->0v^YAdiy2bfQLXDYLVE{3yxavz4ArNcf_y=<1@T%kr zRd+Z+=XcTR&jV)UnCX<9s2<2;_H}Fxp0&kq6>%Upn;J2HC>9;`H1mr%INy& z-e}*bCinFMkLUN}oImi$7}rRP>tnH86m={&f;;|Jla71O9kn5qIk(4#dT+LSN z<7C^;*VAj2Vm0Zh8$>wweZKWBgS@G0T(4YTiut7Gx+0VEH2|kBgy$#v%gTrta}=au z<>+*(>IAiPn|NE+t^F(|}nO#qNyN*!}8H zbbkBDBig@|RboIEgR(#pcID0(^eYL>M&~FB`FyTo;$=!5G7QIDju)Z0hG3ni7W&xe zc#TWbG~;zahTijKh^Av(0;A*N#P0`U0-#BQPX8zrkdK~3jI9rk#(3w7=6D>B_HFF+ zyJV#zzR|xvzNhlOUA_&UNJ>nu1Oh*>b%mvNenHx3$iI!%LZ|5XKG(+E678sl!1r<5 z0wdO^YII&r?qAKohJvGf|FqaT(N^mtEks&n;Jo?5@FQLZ`F!^f1y!~KlGr8KRxiNK#?QisN1l1MZr*CKSt3zSFn_FS!en1ka^jP zgM9?3n6ClMFlJvbzlk`Aw=O7!S^I5GGG>gnK7408wYpR%WbO0Ja48h zy`EM^%^U15k3fXFnJ&8oBJ0|4KpUItuA&Q%lu1Ek_z(c16WK;1hPsogba#5R6j3Tq;pcfPu0e)htyy^9` z>%Q6u3t@xs3~??l0y#6G(22bBm-@--9zHbo1$GCH7*6LvNCLx1m9*e;AeBJfj;zC;#N9A7mutz_73g5T}fC7pC#+=Dkg|&^<-6ij8-*TL5lWVxg zQ8FRHLXsucIr_;7dTYEo00u4#4V(Q&Jzm}};fgsq zi=V|M*9H!A65-%2ViC`CPqxQNr#wCi{h2O4}*b;QyiNn}S4J znr26PtUb1E+qP}nwr$&H-+yd zuvWJwCAJ20D%1;ecq~z`=o`f!$&L~8^d?_u4DnEzB<%y==343I86A_pJq4|4ANtU> zioAtJb^Rh}orcuMM#nB{Rb+OguLR9*bp98SBG@>{Q*6v?kL5nk&K8G4Y46z91{-EQ zggU(Np~iuDPYR_2o_!a)nS?tjm+8I$MTe5!tOh@MgdLab$I+~`=4-dJ#xQJuE~TKJ zcLc3YICC<(Kkr6hxdgmp+DECn!?THu57O8Bm+Ue3!v>75(OfIszu0t!@DcVM%Fc$& zTa%I;Qq?iFV8k6qrvD_qQe3cqu$LMpu+K1(Gt&ZRIm#+qs1KVjE z$<(=ZUQ0DVY>MgBs^y?*)kW*^+L@qPH2@VSTI!TL^v56=kM%b?#4);6%Z zkx&eV%=p7+Vqtc|Md=-r_?_M}tSO5H5^Y3?WWS_uR9aUz7ZDqxmbMr(;?7aJbq<{H zzSUaGi}pdC&l%(6BV$>ekk#13(8M1ooY2sUIb^KhxZk`7qxIZYJgH@D-fd>b_k7=d zN=r*#ueLTml|&>#T+`p>*ymH?c$w^E-xv_We(rBSr1JQlju!;Fs*Os^@_dfY;M};Q z#Tol|Wlxb3lEU6N7eTIy$7*Gvecy7#L<}HF z<5Pi+rygUq!kgC}49q1Wu29Z3TtA`*`ndJ;?(9z9FW1X1ET}q7*Jk^Bb1bE4PbPu8 zAg!;_%zBe0{rV2h({FSQ|I@(?n-0h0_;ADIU;_D`o;~Bvf|2!;1%3ek>aoAVPQASnSG~c<5=rVeyJSzhpWkv4QWj&Ly5yyd#W=1oBR!` z=JsJM5aoX5;ZX0OUlQTcm#)St4@U}C3<1+l1;bsOlVE))E^EKZQ*Z-&LwiHvT3V4v zH8_$jhY`226Xi$zH0#YOfNhy;WYeO1rFE)~axYJu0>V7pcuW#OBY~BTrPW5dm0X@& zj0Tl5YGHC|IpUQZLP5Yl!oi=MHz()(kW`|8zn1cj$1#E&A0MBHn8Xa7QhKFzxm7j# zN@nA4&LD6v56l-D)-VT4H_^!y zL44lJey<3C``=Qh9^s$cG^@V#c z31@0Fhuq?H36JtSITClqI4V6#9T+KTRBTOH%>c|c%H}b5B+RPhE1wsTxO0Xy5p%8I zh?nrcIubu%WElu9nOD(t2R5eauzWD{o_q%)AHG<`RenQ)Dcl=4l5=-ozoRBJF)ica z14Igh=FA&$H{!i)5PF_IqvJP#2nmWLQDc=J)&?}uSU5EveDcX@*n?gLK{a0P!^~R` zFO0x=YeUm;F3Yn=KFO%2UprK&*9ES8$y>A8CeoP-{vI6|jwg$^Kl-%Xt}hnihI@ct z8eRM@gHxU-AWU}ZRe)NEXpnKI`)l?DA965jtpVrbGTaq}gdX3e9|x4X3#+4Qc=o3- z()1h=Rpqw;TwZNET4oOEkmmI>Lb6CbtA$u?RaBH)lpoIYwK{lZ@1ZtqbtvUp03y}tQdUi^1mllaiRAwAJ-fe z3>%bNCUltHufH;LdkiO9#}or{X3<yap#T!{uLoV(5BY zBzw%YUd-U&Yh9b|A2-z9W>x<{n_`g#vr<{pj0t*8YhRpok&J+8$3pCKp_Q zP(klXP2ovUO!Hrq{Q*_yG%d%+HsW5BaNAD>%MH)rn)$aQ$n+inzdX1N9{|t&_sM(> zDoP|xgQpACk2hv=*EV+YP?y8?dSh&sx(o9TC^H!_6-#J-mR_2i3_7y>HV#d;^f*)) z1}BcQWa-!D0h?>MfQd(1jM*rYBo8Qm)rq)0q0u2SxcDAnz%1HH-4-kO z`gvBZpYaeX+-RcJahRIUg2<9CiL?lYVIk!%5jh&eRZle=vU$>n5JADey^C+$1ib#{ zXnIW9XZr{2uLE~7F^D>0pAKKU-^}rzGnRjc1SA7D+n#UmzOJZsMM#%#|YG`L6FO*u}JL|L`FMb z$%^E8q1YGPBDP%e`($*}=|$||s=!3-E}{VD-l3xC##p${O=y6CW$2m zM9BrXnicaAxFz>4@8+Z&PI(xv)=F6?ZFTJ~mWM@Eq$9l$=nocCed1ZXb(R{VcDRGF zxz7|WnwWb~V28AQegcSRib}b9s*i3V8>C)U347p^+*4Dg29|U`WwXfQqBA^!gD}wcYlRos6YsNBDpZ(2e2{SR*3lo`onsUcz*V6ANspDzn6DZ ze55~0PLxX1v)2D<6F_wmk^Y(=`#A<}0sRFL?m0D-OW;!wH$WCG!HD~d39Q6sZZhq4 zr;WP+xAjEMq4)^Aflt>4QZnJO3cFWu^}4N{=l0U&b@w(icE_JQQTXDY^TAQSZ<+Sx zlGh90RT1=~-9VN__Q75=$!WAZ=#Rg6Lx-XmzT&HH_*;e4u+~nSNH$6(8q1Oj8zkq# zhct47S--_td}!OxRC4iWdbS+KFiecUpsQw0z&ZF!ICsN3Cef&fVVSbNUYp<<@5K_8 zFmvgaZ?7gK7$eRsVIK_MA3` zcJE=xqq$1#UsdDV?F2F#`E7izFLKJIxe7Q*{e&ho=!@5p>a z;efp+z}6o~xzyu#wTld9B-}e%ly_psEk{NYouSU>6{q^9lXLPFBIt&C%|GDj?DDz_ z1_I8B6cyVNsqpB)J9SBiN~%N}2LhSRCka#l&s9<>!z%(O3)J>) zxOrY=i1X9hqKk3VoTL5MTQx-nX2%IL5$LQGquf+uRSY<}J32U8J`&F9uT0Fk#Xvx+ zX^ffMr`fL+Q}VE4jn3oPMh~aE@j}xDLEue~&%{6lEKOOpxdxr1ilUzLK<9LI2ys;w z>qUIY$hPNA-4N&eFt_iPErB&Jd-FRpSH*S2ALk{g3{cv$_Pcjw$?BfKYik@a5yVRw zEShDM%ZDpCtf)8UpNyNbo3bA>KALFqXzJ+93*We&l^3KQMimrb3JGK=AjLNY-SQqL zJkocBuW-QW#L1Z>)_0r;ce3aF)>4Dqh(zp1*a!?(8XM)!DSOR>?a0KnKgh8Y*fE4G ziOkcWAcL?j%oMVGivacf)m-zkwPPH9Cl>j68Blw)eJ-R=Q-v^gN-isX$8F^E5zjil^8Se>9X`l4)@2|Mk-oA47-5smVy6)Ro zXMDbf8Y16OQ?km%OHOnaK><0D+vK@8O1IR^sv4>C@7nJtWqQ&mgW^uoR&Ss4zO~ zN9eW{^vi1{>ZR*CsAwuCShg9qJ<6Ll>W813``n@(qJ5P&MT`r7mf7U*T9Fc$6fDo0 zH?7)6?j0lbRRKi@{e^P88#*dKV_sO zVpl0~{>JumusQ|RVvIw?%XNA-j!U7noCb^=ja0~g1fzSR(u^`h1Fjd$IdokiTg9$Z zUJgb}OlZj_DRxe~(L@FbxO@b+aOa6M?52DaeSvD%dCn_jXXRlZrKj>S;XKORQ1 zwx5lqE|95P7trcF$J$2?p%HIfski{SkhUKC=lL8uyDWZ%Fz&Q%$8{5U^yN#NF;clS zyKj6(9t;kHTA{A_C;L<+#QDiyn?||bAUIhH#OH2m!lyH-gh(ZY)epzIFbl@T;^BscP^BL zCia5$P(3^n$9wg`Q5xTUY#9~7^RAZ>+BGr9PDas_ww+({J*r$F7ofC@{#PwgT!)66 zR4*fJJ21=N`gmIXLB(|%M;H0Bv!vVM+`!O??)W@)rPKW@p=HG;((8TMGT!!<`c5)+ zXVd;jb~D$``k`d0g~@oc{-8cH)!NJ6c=Dm86OH`~Vs@DuukUoM3kEvWSwn}SwJ6m? z^Gzi&?wI;f=84HI#Un`I<~0q5{srm8@5P78r$Mz9;VbRElJ=1(4kVE}V1LX@F1Bq;DUcmDd*nz{jdnkga>8L>a_= zdQ6g|Mhux?w+$M82ijO8j)Q}Nr~+=l2}}=vALK{5LKWkqz_&Ya@3;W+0JVBlTNnIb zk`A$0%tIdo2E_p_>D5KS?=)feex2hQfMhH4Qd`&1K`3aNv&k{6i~>?IE~pA{SmA(H zEt+5}2Ba2s@Xk?h|QWZep`yE{DlY+j4Vz z_Af@kjG(_g2f@?U=pNC1WgoAm1|FMd*{!qcYVnTe(f0FLhaX?qbR`XVc*nTL(s321 zRnsf7j_6;+UMN8m|D+*BcMBggVN{LMc|}gLq}Yu~^=90<-o%~V*mb)GMs?u;09qEY zj{fEV@@DPbCJa%h9+<$uAux|sb-i@+_#xa~O~@A|Y`B$qmf4JMHe=*csQ=w=F8N`s--YVf>9c)li05hleA{W)D_s;tLF`XQqPQFCmpug6HM?v{PBWefdn3clZR zAEj}p&3PcCVt=e9-uIJ`)8ReP+qF~3c3}oMs?^`>t^l5+Qo4P9mD)D0<;@kM|6!c6G-oW2@iIGyO_qhUY%zs!Y-YwhLmHE5!>|GYWE;T6hnQPkvISf*mav zW?zG~i7(KfXoo(O_l|S@ zBg!T!*Bk^y=`^RgcYsIGR0mY+) z6V9j}u52;PhC9s7?rTK-N>257kY&Z3n1321hNp z2lVkT-5$r-4nt23rZj+%W+P387M32e1DEs!+Rb=qi~kdC{MsfSa@fpbKE9z~9_!TJ5sdzTeVJ@@97Mt>#^MMdIbe{e(x8DrUB;Rb)Pws^poa*5 z6kGU+R0#<|ZrAFJYa+gmRblu2Xy|~y(E|Z@cJ+FBPYq4qqQ!hkwXnMMj25;ypH0+Q zSyrjind=C!<$1kp8D^f+&n&YXKc<33ri3JAUee7VqJ=yzw#6JrLUn`aSF*>E zJj!Z%Fk(*FHsQ~Po>yS?E^>DCTo2Dib>S|L62VFn05N`NO}V()z|01~=k<8{m}6oAo(J=hbQBFpLtxGa#UG8{ z+GM&vvHw9M6{tM_mfa~Lia zVbP~4cF?#uU#rGp2P(!fLte({zqxn+B_1+9ukvnq$ckzdPjc|%!nq5Vh|moi-*?h0j@!TbENFT z_ivD0+h!Mr;^UN^XV6DVPDLhGbp;8V(;GbkCxUPqNcU4kFO_hZ4d^SNe_6<#XA>f+ zwMHCItnu7|F^*Q54<;}pF`l|A7m%P64MVo zwp7UZuX6{On@P*vz^GRW6naEVYLI|7kbOcT#L&i2y}HdE^_ej-H@Uxa`PpWcQ_`zTlzLAFVUp<-4|@F4Qo5lYxSyV?=w_ zwF@L>_TUE+{cYfTkF-*Iyor9jU+8ad9jV&2f(1&_rC^}ztymBzfP`94E{8Ndw@0ir z66GYj-z39d8%@;Z^A}ueG}wc_y*Co2QvpQ1T$|mFTE_0y>C)ceJJsAA~FX z$sw_3%|V%>!N6VFB=JOh z01Yp7z$8E?XYht_^7>hwyoEQcImq~(PCHHr2WpiEnKO%0$pxJVQSr=QPm2Ok>%@Zu z5*5m$B}4!nUGg@_0g5+C(yW-`oE+(!Iy9pnW1Ke_G5?Yze(&?W_+wt*FRI*)i*?;V z6q_0N!ELE26G zkcR8#P4%vE)TNWW{$e$hNT_ub*Umr){S&)73M;R}L)i#L9kS6t5IKW*sXel=rY+t; z5cZ8u2EY+u05RT^De#_kA&??h&>GW0x997w;*=JWDF=hgF#?AaRT05dcLjzx(JRx@ ziysHyCUxKfzlwHyr@`!cN|c4VjffX1-5KHM$uZB!;nVKWHQwFVo$7utF!D@FLZ1X9 zQ@r?C5}zEeKLxEhUi%ONicA|bz!w%X8xe@R_qb8@JM%U#e0td4m^^!`yblpoc9=bV z0uGTT7TW;6y0h8J;BsG@)@p;f_&j~IvRgOjqxFOKRXpp<$7r%`#~Ya)@eSpy2aIfS zz9r8s;W;cjmVR>o1oO2tID39!+;Dj3z?J9@<-o-Y?!~WG+Jmoc0eBNC_=I5=O>`NWBY&sa+mciE!gBH{wLS#yy!DO zc{#(ppqb%gLPod_nckonIo%f$(ad@I4gA3$a${`vZ2%yrB08YUl>=Q|xn5p0xY)gw z_{&|hp$OzMN36KLTi(x?Q6Vl|(!hXh)O3J0Fv1yO*m!;iHU^X)UN-&NfSzb@zmI%; zHErx&oxv2J+H9kDkyZIoBw=hcB+Ma0#jrJ>MbW>c416`2aZ8L+;gJ` z&YvFNhTm*655TKs=*#vOZLw_!d3kHH;7Az!30VCiLZ{v^@5MSjOy}L8YH-n}7=1=; z%msil+EHszw(hZy8;>s?A4ra^ut>TGx6!4;A|BLn=vGL{gKTb~sk_N;5IJnGtb4O9 zv=6CXihbKWu-QlmfQ~+m>X~?B2?T4M^`dP`-AeJtp8&Hm90%%5ci#1?C}Ew}N<&E} zdpyRxXB^H>2;&`bw^wFAce9#I&)y|&LFYxXC6g+K76Rb|pwjsB9oTCLjRR=x*k`R` z8K+zd>_cFzE-n>!CFTz@5fUO;Pi-~n+i_1Xf4i5i=78#hu%UebTtjyS;1Xa|l>G6? zz-~2QjZWfD;t4WLpm-Q`L~Jrlc95i)`OL*wQgL%+k_=(PDLnfBpyQ9@R-3>X9CR&T z6$Z;#xxUj0|Lyi0Q}-0oX`+6$_w5>*Mp5A}1X)og=37L# z)Vw7QAsJKlXkYGmz7cjhHN1lSptnkKHIPD?T(F`b;Kvi`7@Y3g99^GWtK!gc4PozZ z??Tf$h_*d|ULy=3#W+>x9bZL=eBGC`J)(C>bI3iOl~SS$OqMHN9VE8W7r*$hEcX@0;-DlO=Jy&j}hEA2A9OUm*(>3feK2 z(x;o<{hm6#F(YCq46KDPDd$JbfaSw!w3dI#uhpw~wbNDvD zPi}(Qevs-d3DQ2NQv&Ik68E9>_2F|zSigixQHM%rW@ngpl$VGLj|Yz%4>O=sQ0inM zn2BCmBC%mg*(+HOEgvxtG@cc*Q_MFlQ~{6;9h6WO#@{cF8Woh7stM>Xk>PF4*-GYT z$^JzFsc96bm8t5hA5d8k+8aNz3FZ72&bDEDKT;|^4r)h@@t`Vys4fU1im@c6U%MfFqYd=n&~0`Dh4xrb#3m&2mZ0h zkoUJ&UP5Aqz)j=Zo<7Djeg}M6BpTn? zF$N3`AzNwzQF;A-f^jfwhLk+%K`u7*={0D=Svnt!8zL~9C}Y{a{((Mq<`(hHoD>E3 z4DqTh&NBL=ULL&%!|W+$_wkFbD?=@R8ofrT78VRHrkqFkc13G|R3?`Y49~@b1knlE z_h_)V{F>T^rAPhiI>eb>aWC{%nufcqK3OqLR?FMpS=4XTz?XqhTfgyF!dITh7Q^~R zG#en4A&5@?HJC({zJGrmKnN~Vd_Nj_TKLn(*G^d_Lw)a$V7^Fo*%+f|eyr8toJC>x zN9ezhm-f9OPZ0x|{6@^^_XXX6UTd@UWJzM$1&uJ;1f2|Sk-CJPOyaOhP*M8%?k;%@ z#$WILN@@SV*ZBb1jBdp zA>|xJ$TK%m;$7;ra^e$Xd0+VnBgn<+=E#pHRlt}v#QOxd)}3D7M$$_ppsH|%j_knp z*#O6j62vo13WJ_SMD|YqNagh?Z5FyKDAtT^rj5M?CgAEu$Qjf%txHq_A65gSc*=-D z#lsgdyB09gBh{BZVye5iuC_CgZiHvcHOQtkoUyWwYJU`i$+=*~1RicbUgE(juvvPn z1M_iS)#enhsh-11&ZQS9Mzg%S9xECCjh-oCMWLVb{P*|U|C(Dl>?v_Y#Pr)p;HJEm z_RmS%*~^PoLa>-2xc3*7Ni=6tobajj{b9kl`N6Mp8~K5@jl8GJEsCHhIZ5W91Tt}x zk@|N?RV0E{4(MmEIgfozO2d2c2c{vG?%M+i>I+SKH3|1#J!Z{zIx{hrBS+WKbuJ9j zVv-`4F;ET<0GDyWR)#O~8sBzen-aQbcKNmxpRz!Va05J)aPpcumacSciT+p!h^Lo8 z0P#rF8hskztg%i;aXqc#c9W`tbLSPZ^0V@I$8(IbbCLP=;$j^fp12o4e%54(R6-lm z#|e_*OXGYdVz?q7cj8vXW9+JWos}JNq`- zxM-i)P$t~oi9VChN78}RB8+k<_kZ!*C1SFr*N={wcSWP*-w;_i?y1+4N1HfaV55A1 z(#u>ekh)MpNGMPhAg~Zv!~N(1dhqC4G$cDeii_+fulu-yNFV#Bkff=&H^!l z#b29kqpIyc1ak!V6~eAVKCMPo=b1o=CWROBte}#T`7m*d zd?`>0K*@Sg_k(ATS;%3lj`n9k_m~%Gg;2oR$N8SzBs9tV(6<~Q=c`vvy7TVqC*< zU;YSqa6{CpU@t`Ru=ut?diTKQ6D42#)$VM!wna>@uTU_o;5M3%T4*-6Yb`bo)nGEoa~ z&}5{{vYo7&X^8NgeEudlnw~aWr?Q_0o@HFcrAr~UBg;6J$Ghc_RJ1||@{RiaJcQTS zJV8?AueAI)o>0WZJba&;1YR1r+5kaKBg8>*^3^Ouv^$NQs;ZY@WNA2HP;w?|Fpkzw3rRDAJkK-Fg&~n5XNE zO=cL&IqZqWXI%)Q$Me6r4H;^T%@MOTkDtvjjuY1g=20Zf(>)8#afVE~`{!AfXYR~0 zo*z_GTokZO)(Xsf^;1HNwVim>%jcLTNhL=zF~_ylndg{d7b{Uxo@<|3MHd>sWYyPa z)_D=77oJ7cI6|(?m+#Clo|!J7Qep}p#zg*msA**Weqa+~rOO0!)$qhEUF4a;jh_+1 zJw;=9#uSlzIZ{4%u-fGbUuV zhSc?WB_Py+yvS1_^~3->!7BAyl!H~X9>`ppYLbkf(!rYoWY)qJ`9&E|-B`oeIHnwr z-JtK+AwEi{E!gi?f{}P#;PcpWE9?w091I^=amEx9IAh3p&@7=Qr}@C^|LANOqXa+H zf~q5$vq9U6XS)@nxJYQp#PqpJ+pVy8{%2ZAF?_06JWTN2T{C@tqAszd0>OEgy% zqo>VUtH#Gw1t5lWM@C_F)WE8441NYi8O%g~X5iKns?8u9)j*$iiX*}c*UJd2l#(E+ zH&(^22rn>y7iFK+J6B_+Pq?AAz(3yzY)r}*u4pfg(3xbS=a4Bk(^1KB=?u|zzxoQz z{Zzp3*t+^>OsGvP%{s8p!W6#@-L9Z)eMpHEUe(%KTRkzVPboBSo2X$H?_sbgkXD!* zT2=+0{K3daLjz;W1W5Yvu2g(K4QX?tvzR?IpwF~LEqnkKiKG}<#}M)4sB(&){jsyu zSe|Z;Qy|Y)q|DTXvRwIllnC97JF&)wZMDpCSztz6HRr{6(Ggg+YhkuDbWXM?z!Iz9 z{zC)fDva+GbN;C_wja-I6m>{@JNr_%(05M_&;agCpQfK)9GgkcFzu?EceDDtEn8Ts z{}X;%MO1Zt*l31<#5kmQ&(&U5Kc!BIq7m2guk4TA%{$h2X)880eaKlu;#ioz2WH7F zu14SO=}zuSkvtQhYC%nLWHjp}XSURMrT*grteVC&k>&692&K}l7YdyS>Vl{EEQu0hFU|1o|GF)CS-+Z8bH(` z7xjhSG_Nr%=$J>_Q1b>y;KL!N4?P7nKbi0H(O)vS3!xu!2O?!}5@ZW6=4loh>DqNv z|5Rz^UU(PY29(|oJaVtKroc}sv5M0lzn07Mm^qdaL?$K*KXUq(H_?|y+As4H^3(Tp zcTV&MK z#UW>`VXdBIq7ZuWdf*vZhSM>6@4tn^2`Ne~H9^%OHtppb{ZqtC;=O^kX?KB}VuQXD zZ!^&PL&G$bK_e?#>OLR&tKBHZfN(v@>vd8dGDWRc~bkJK*I_PyO{$$DuKBQGr!uPE&FQm8Ldz>-O|x zha1`i*p!hfO25Ei0ZM%-KGNxzN|`@YAm3hikvnRrecw`x3~kvNjw*gSfM*s=EQ!XeL|r95VL&x zqX>z%Y^x~GUQs229G3~U?!ZD>9`w7SXgVaLEsip9o`For`Jg9kAiy6@xQz;snf{*ltK>{5%x!w35{tJ?-{@OGx$`|4f!wyvUFhg zjP4|He(%n7fMQSOWclo}nMT<0rFdi=t_lg3{o6?sJ{y)tUSuC~o{z4yEjcun=AWlyo~Mti zo1c%=Eyn7N&o7&aB|B99HE60fyHs0Pk10$Ymsde?YN}Q&VOLFDkWD@wGhc0KpVvPV zTSqPmUtwEvkVi>$%#0}}nk&WSPuu7$*C}PMcY4Wx6jbCnX?)BdoiAReBs&$g7h6*< z85e%2Z*G^%m}|CHTFXB$Fmn(znuqc)C0}i2M{3|}Y&NyGH7H-{Y|pQkyUaN&EtfBB zpfu6wu5pNKudV-U*6FHkDlTpk)-Fl?M_omU>fG!+`=_2>L!%>OBc*DR;>^lYho#tC zeS(gHq#hv|rM#SR9mTnM;ci%mEPG?UE#aAgr-Cjt*@WSiqwCLPlls-Um5q563at*bq&(x&+7;ABN(JKv3bnQFawmgemHG9#mFD7d zrQW}bol$9*+bQ+}6bSG#-kI*iy^!D;D`g=$B8SwmA> z1+$>Fx#k+6Ww^JfP=tN4C1O zm^gmJW`4qjvr{YEGo8ice1(3XRcJ^?E&wX4Ck3^&vh=DD{*4q`jpZ$Yayz%@tBKSq zdBu(4b4>1k?2orICKU^RhD=Q_BqCTNZlQqXZsWU2=%I_6`^dDbR2R0+tODgV*HvkC zm$x?^=$|v3l>oW>9oF^9++19p0km5h=Z)uCBsEi=wW8#An~p3Crp`k6Lj7`!t)Vvb zrqxXtiQ|W^CQ_Oh5yA>M1hrQ?5sufpy@H-YS@E6CRaHj@FE5vm)GIcsEiTNg%`K-b zZnP4l9oJ?Z_>&}u`=1%=)x=3fI^Oh~zwuqXDAx@*tnXNaACj+XNg^_qm8&NFl+oL1 zO}rw;Bh_}Ss`E1&67CQxG390<;W0U4>$&-Z2Y4D)h?B{Mlwdo##m099)X0jis6 zL7uf`;^!xYX6UlNUR3!>7dst{IqhJJV^f}mw^RpWm@W_stkLyIlAqn?ESA>GF5Nw; zGUX*HjorO*e+#(n?NyfK)HuR6=<*JQ4Y<`h%b-sGVx>RM7mI15deg$H=>)slyNa#p zqczb5INJ63DN`9jf~!$o6pyvVp$e6NC?`XLYpnj*!*b7d#TcA{mHuPof-Yy2Mq02! zs7P(r{gPc4Tg&TkWS1&QcAlMwWyqL18ebOH9sqIikMV!iTt_>QUKHwW(d1yxSZSeuA)K|rWs#rl^qQ>AC#6II{BR!iJp<48W^K`?p{Xs; zT4UtWrlDT3JXxKisji|^Qj)YNz(XvUt*Xx2?BI`hdkDv`w`Yb+^sb=}Y+N=cikpvG%s6#q!6ae=dG*`3;JAkjAc znk7%t5wzx~a8;p~tbls;b=tUD(HXzYNk(nLpsC=?75t`fLRt5PHAc;q)7D~zZa_FI zRlnk0JqTWJqhfB4)?r9KQmJdGi@cz%F4sq>N)#8>2CZ%@dxBev9aj2?-LK7tyH9)* z_xhDG<@Q>B5_=)*vb8_KEw6m-p6vwBN8D72(v}ynbHT1hRd>i~3>i6r>9v1xQj3h& zVSmL#`Lkds^D3}#|5~2^w2+_ngctv~`2Ixox1PH8E6jeJg7FZOD2-f|_!8j`<>S3j zy+A2}+|j-dweG$nFup*q!}#N2aw&szV|`@=4|6ZjraLwPhGEm7ytvOh!ogzu4-Rsv z~_IZy7?w5WX&;CMFy%x%e^!&l4J=JyMlf_svCKUvL8Vg83<(v|85GVen z-z^ZxUy?_rceH+ZkQmPZ&&C=8aBePGY;{Sk%>(cODqK-p0knYLzRTagB(9k5h?HBp zirg1U5{}OqbS3B)N5A_11yFtNpe^|AAiO*mw`)H-5dXl%Lb(?*g3ZEBLht6hs=?kb z=&C@zRW@Oy2orG z{r`LdiB~|cT6&9GdWD*MBxf?$+-z!}}UA1*()MOtwyxN%kf-T{X zHQJ8IKs4J?_UYki1JZ1s1gigl;AWRD+cq6lhu%fxyVIY5?huS7+uK7mVQ?)Ee zX*=tY#@IWJu_|%?j_i27jDV;LHc<)O2%;Z@R@<57+}H`nK~d*;q(yblx23Fw(79lE0#-Nl0Oa?vDh(Ik&&&^jPPdX^-!1I5{{Von8| z6Hj_&Bkkc_6W9-@oj9~jjSoav3X8R52K$m4LLdjh0bc*! z(jkc;yiic`bRr9G$yW)Lou$!%&U_q#Y^BvRp9>bIv}|~4k2wJ z7Qky9^sIUu+$g^i^d0?Z3!fMKK35pr(@+l%79Q{yeBUPSC8Ou5!PtcN+1i{C9eKv> zun;1wtc^H=dw6G5zD&@oumcD&-zQN153ooa7QXhWbJ&ajVg|_Fw%I47drkry zJKu951pLd3`YDpf2NA~AHKO^W74Ezv^IG4@Si_+?l3z*BsU$4l8RFMiIRAy?EG|iG zVs&?GUg01gPT$ijG}Af%h*=cY;aoS+`q*;!$!b$fO3#BumDhf%C*H2)W;O){*2Rha1FQ_oD_=yQ!q(< zw{;N<*#;&0wm-^(c(WrK;1_t6p?1Lgd+yXh7kHl_{ZExePy(z$OL)>800qE!zYxgp z1Rw;)_a6kF>J_>Q=D|w?%z^v|gLoML1rYy1IRES$3!o5UU>RT-hTnexDh~|L4DcU7 z7l7hf02GAqn*rnl27$t31kM5o0E5HeF@gRs9t8};^7{`!sz4dGe*{@)q8fB3l+6DXJs7JdY9pN$X8 z^nVN%b^!ff{L4m9IM-%lH2{ZXepr9v3ZehU01iq1|HS|fOzn>}A<#fZ4JiE_;1~FE ztAqfaAbPO?mw!P$gW^?LK_EAv;JX0kegV1w70(0kKR_3v<$DAYq76I+48!sJ4?yRD z;kg0+1L%U#zc#pZF-*=PBrRrVvX-O9*HAY3Jj^bajx|5WM^eibVF^7 z?wZQ{hAQM4BJ+7sT=VmyJ_7zMBfy3ES%5>~H43f*`eTUG^2Mp0OM~MIq7l4l0NE!0 zE5@F;Ir}5NN{yWwrd)~Q8rCs{Dx}}yrbT2S4*l!H4_WYMYb@tt_YE0Dj^LKcq}%`@ z#C`zJ^kI)ysz2i^>0KGahY_YHF2uETk8{B;T!3bXE76JKiy9Vb@F|1b-QgB3DBv(@ z3@`n9^{1G1HI<8p%`bPQuug+xP*-3TSf4Zq6Ca6hG&l|dA3`85xtRaMgBpMR=mA~< zZ%|O~41V+g@L*0qwJC5g%JunYJnFP&;;Fa@Xw%V~oE;wKu~GXhMILg?jjBM3 zg&Pnky3HqTRu#;iJC@n-R_XS7Hx=O9l#eQI1ne9DZZ1>&k$06IBzNW$orwnGIT_8& za~96Cz@9ex<&P_gH6#zX_g>Lg-$$T&A14Et5m`6(aaTCZ9BQXLHlD2I^zOT!OfBVu zke#ueMlCxV=V}_rk$2xj;LL(~0jQR2&NgnPKP;s_vbcAjWFqJ)5@mp8fCe40S{aY* zT_nlr7m5*&EWO|VHFxFVRTWuYv|H@gjWXJ3D@e*5d@P*9w5k)uqYVm5FQ~c zd60!gz~JyHYO6Scz~I=Q0i|hhv;lWS#Zi{Vm9V&BxJmv83Z z;`<&q_uO-;PHpF$`rW!!<;OlT&wH!1&jkxMe*4?s{C?fS8=hMD@~w;d6g<->zxS<= zZR|by@xD_wJD*+m-cC6XW)_!w5R@33tU4!mhd2spB{=Hwg>aqLB z9KZaTVaIN@7wtH*;a`tl*#2PL`S=qPhJQG9fql!`%bvS(;M!jhqAZrFH4!A8p+8 z!+lQ9`bRodz4}O}7N0+JrpM_Q`}f&YzxVZBZ{GRURUI?2Ctk@NdvN!faesbcYJKjI z-D_Wda_EZncb3<_lh?QO%P&9wqSd$?4;8lTSaAH|87G>q9JzeQ-rV$zkGJlFhr4U% z@U15|mhSy)@`H4<`uFmVwY}nzmr6%JcXDa#{m(rxW$1uS9lM;k_u!?&3;S*ASX2DO z$EzQDX_PZ`ddp`|Ejf9!u_U*;#k}|G-yM72Rb>x7m|47MbydIRznC>C|BcMV_piO? z@9iGb*VpX&?UHTd@4sc0(bwoZw#5%u{`Z<&R@=k(jp*8;`!~(+xo&uR&Zrq<|GIhJ zv^JlwSm{;|9g>-O`1IYkc3eOFr%R4}cI(Na9o+|iHT1$W@w)fUKmADAgF_qs_NPO0 zyYJq;yVHSXU1zn;9kRX@+d1w%P`#i-A8l~K9TzM}H(NCM>P}xQYrpS;WUr@l)SCZ1)omxJlF9R;#3AYsll*(-Te6w6;uED1c$T7TAb?;m0W&^%58&ViPVIm zl8U&6KQd*Nxw)BXBW`pIH#j}T&@?(d#dZo4!Fek=WhE2RaV?g}sVGjDRmOeIjwL87 zy1CKN^;jZVG^uyGv}9~03F2u%WqRV!xCa@^AXPdcZNyE34xNzCp)ie~OOZW0#WuWi zoIw#jb)s;=*0L|O=6T0Y#=6wz#s87MVRq5m^M3ck(o41xHl1dTnR%pyglg-Ro>RRMX>5_u>^YKCkZJ_|9z)o%ne97rReS>)+wb`Cqjz9-MmK9ftSk2dnZ* zy7jHCYcs62?w4A9t1m16S$FT+x0=+}ZOAF9{;qFH^`Dbx;#K=wU;oF3{xkOOU;Gzu~UM4LRipGM`+Q ztp0ULvbyPjWOb*0XYSj+rGDg`1DW^cH(Y+?oo#hXdn|0YyngkG)0=OqpYv{QUCo(= z4Hq8ya9fYxk6hT0THKHtx2;C71PwJMvxwYZb z7nZ%Xp=`DvvtG6FOB=Yc0p=*_v?(U zi}yS~@8FTSW3Em;v*n0;#h`y%cg{g${@kt34vzoh%$IYIk#nB*;-a^QPJ0ojvfv~Z zy4pC!rSZg;#{09UzhqBtY2?B4m`kU^fKFH9qtjsMbQn58rZHXOr(YwDuGzn1LKgS* zoa8xg_@4fzG(&u`v(K}#UiP#ZqEk74<#jp04!Vw@i_LV|i^4{8{}4&2-Oo zI*qVe^650f1Td>Whb(1Jr%CA|UvV-GRM6=(9~@GH+_dbU7Ay<3H>fuL%u-PVT~K2% z9qF>slpN02X*`muTQ^~ukalpOQ{wgkqsFC+D?#rwQHS#Mqcm~nn{oODcLpkeevNl% zIvCFE9m-+^<$;_*)rnu@GaUP43JXZjEGtewJd4q-4MF^}tPWW5%ig(k2GH4LvVA4{ z%+uorevNlF?x=*Mwt?25U-k|KFoHr*hA4GVa8yoWV0osvAYC~kF|cPUF*rS~5)4Hp z>11%}6I^l&!xhP$&p_}e1{Rf*M=-TO+5B`xrmDO+U4cptl)5cFy0nO#4V^S(`*s(@ zwQYD4Th~zt&(gbij&A9$X&9bq7bbd@XR0QlMG6vw%Zth?CQL0rHF~Hs30t6&uA*K-x>8Tdc6{Y@6$2}zE3ApS%IacJ zgtetkscO~g!V-kFXBg5pGKW%Wlm&4_SX-5Qg2{V=sd7&U;;>NNS}F%LRwSZPIi#_8Ok=4W z)L1;Ku~m+0Y#!CvDn~Uok7_V)RM$J$JgUKI!s=@4@TkTiBcZD2b$C?csO-xCcgPW= zqp~jxfP#=Ob5-_bF85`w%D&9yz6|J#x}(hHzRXkEmj$p@sNVuXRJU$D?#n!teVNC7 znZN;6^$tGwWxmS3EC5kM{nl66m-*b6`6~M|pU=>BO=V}MYuuaZn#%4B?`BzKqiZTV zG(C956B=u};-E91pXuTql&XeTkK)d{%5F`MBG0U`d8WU7Oa2?*RRqLv>w5rb@A3%+4>FMGfVZWw0*F6rfguRwm))t93> zy1;(b)tBQsx;@^}8fAt9Zt1Auv>Jj|cP#XU=BKWVNH2!Nu@Lxk|{MU%! zzlPHIFFu80_`0Dq{%b_=Uqfm9*NEW1hSK=25y5{AL*@5FhCqAewbCl%XNLGVQqotf zLsd0?FoJK2LU@Ux^ukjkvhvihRDM5Xh^3}df3TG9zhbeeq_5KWnPKz!g`qTlX4rgw zVJMBC84>)xgwT`eC!@eoc-DzB@~~#(--cvDMH`U(G?@&0xF0L2O1Y{30tR-^~BBt!9`&E z*m*$Q1v?I4lYrn(#5LIAK->kZ9Z*}6Bq6#A3Ictq{Vvj{CHr6;==UcE=WbJ+0Bm!Ju((FG)fd`7%YoK z(FELtYhzIx%PL?8q6diu%cO9hEpM=_2lv?$2g^|CKFc3WRN}#Mg#1|Wnjg=D52kPp z>RAsy@`(qpQSm(ZFa_6aWd|Qq#P#4a1zdyr)`O+>aoVOpG*Pe|9QWCl3zjgWu>^lC zfLZh70enfbgJ~F^i|Gxn+42S9 zcz!Ghb3xCRF9^$UAH0ymHLFjyT!Gue^K6?2W*Yax{LwWiXE0pzsS_tNRkRh55t_`J zk;!+msIq86rUW}fl+ZR1!Nw4=#DGcZvYg_|(oETipgf7&?-(90tC}z&_)kOnLrc?B z)8zxp(__-K>qEK%`#|(8t(Y{SXnM~~@!--*Y)M2rKhUleiGD?8CGFE?H}=Zy5Z$QXe0x9y0>t( zvgsMgEDxSL_?!3~q($ktV5U4s&Y_=&AD&Yhq{~?v@)3L_Lq9wddNigf(nW!Dsw&53 z%Cn_8D-AA}NH)_@s&xr>)x)xF_s0#K!2`b2<3K5S2Hc^0V(jpm%lJY`9 zs+h*?!WBu`M=BCo^-WKonkgS$kyT%+M5uR26>yG8y zUMJ0Hr)ljvgu47R^v{@v4NklmG|&EnDYapf$Ha-IYmV!Z!KHukGC>o6lc{4g!I=`8Xg-anXV8Y{t|dexS(nUJhz1@k(U;2xn(5GckPsiq z`sDaRG{MKp2AYl1Nqms?#i~777QL0%f$mzY-AL9X(=W@q*y)Yae2-j0h>v73N+lZf z^SwyjHYC5?r&d2Ky%kWLs{}75GJytKoN0E=5o^2X3jbv?F3CsD|I6_T% zV3qht7B)qq2|fy-r1T6}LAh)s>(LCA^U z#rrO3jzM8%h>v7_R`-IB;^z<_Xs*TD1G0$jcwJfW$Gi^UBPi?)rAM+NGz-ySa!lLf zbzu8G1zRCLlC>iJ0DOdjhWIoc7M8-l5RGIVnqh=!f{)e@$TZJ9hpc-pz6j05=R9(~ zP`*AJAMm(jv{}BWW|}I5bb+j?()}v5tiE(aP^I4T~YHXkA$*k0XeW*A;ps*N^hGd4DE8Ze#J%-DCcPWHB0; ze&FMM122?Kn&O4ZL9&P*C7MQjG^GvkY1jl%rx|pJ23Z>sxI`0ttUW-pHQK0;$%-ui zLp0(O-@wT<1RSzorF?naLlyx7FNfiaO#tQeqA>`7@@Tw)D3;qW;)}Eq{9Dw=!;EuX zD6-~l&54O3;Q8DJl-%|$Bx#EBfepg$_u_oy%r6K&9uorSM8;Ac$QQwsY;!c? zV{rs%5xYyWI`>h;NAFvty7z69*-nx*x!pB<+hY9y`8pPh%}6%dmf&Nt0AziOFszU+ zB zO0txP%Y6m$5djVY4|RWPOCP5k8065(MLL`?4-13nYQd zA};3bi#KCYozW+muQ0(E)fuscoCoFWMCuvnI&Bjx)s>0fA=5~f$21yt?A4eZ0?o15 z_@Dp|FaXa3@PXVOko9cV<|K>R5SK;2;&o;EkvW|StHEuti5Vwh&!O^C9tf%>ng%{> zoX%;M8EGRAu?o`0#S8uGx@o|V@IDo5)xWj?rW)<(9609Dq7^02sXBtGUB z0IE1Jo>Cqp8=1cmAD=se2@MyKb)$J8jAi}V_TX6Meoy&E;y>bJF{@_7{INVBi>O*o zPw;X723ep+lFr13U_hc#dWbwF8nAS{?O}BfntcvFYzi&OQhFBmq40t*loB7oYka;c zXiR5H&*5_`nnEzUOVbJjg>oK5W44&m^SG~deK;w(?+R1QZ8n)_dW{t7r<9)0bjJKa zcRBtC=NqxHpow+ra(bqC#TBAy0NhZ6Qof*Bm?%eStp7nj;A?W5YrbVi{4aSt=4(mT zW;Dp6+p|~-k(tisZzK!!km(0LZkv4D0HP!Dk!-~75+9$7BNTObzXB~{cR};H&B18n zb+3UI@iRVpIG@)Njp0KYXdEL04L~7pBUoKFrZwO9BRCCcyq^NQBIujd6~KCC4+wx4 zuNOmoh`@FLaZDC8h9MK5*m$4G`pg!C&w}G(>A{7vv5MErfUD&GN3`hN-olWR`wRHs zd*r?bf&)9j@&%3gWa5j)_ds|ec{l)^B6*;zaT?HjW)IL$fqjL_R#{$z<5bFHv@d?? z-D!IFl*rFyu{r@cV+86I$lVj7x<14Br#uMmyI)bKL-%lE;l#4fMzL~P~G%wH1v2)x! adKX(!SyWyrUX!6Dgi^%Xw#^%miv2HYN0vzd literal 0 HcmV?d00001 diff --git a/doc/specification/openpgp-card-3.0.pdf b/doc/specification/openpgp-card-3.0.pdf deleted file mode 100644 index 3064f70113a5bf721336476c6ce7510ad9777f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1444915 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%0AktO>}Q|oEuDCCU%?EezWM!XpOCQUd`<2)qhjl^ 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

=p%m4aa^DfQ=}OM9N4y(676s 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%0Dp(T0jAM-gA){Dh&^=u-Wodn`FcS=taChz4;QEX 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�dfKnISwZzjmgjh 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řn+KNxY~L|)nh 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 z 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

  • 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%0A*Y?HZFbvXVn7qFO4{JLYU%Mwnbo&HSpV*h|68x; z&d#xZ6C^#(fzw!#y)xk)q2{imPI{a5a)v@PCBLidb(Jnkx&4@~(g`VhWyI7FXW&VB zYy-(T64w+z$}d<-{_ zszcA+>Q$tOk;Swa$FyK`7(y2p?kd9{-n!#OOu9{2Th-dC@l6(ojl{gVH$8V^VGi0| z8&RZJU1xuHU|RT_9E3XPEorj;9-x%ZVljs41pf_WXtoyYV4F?wc@BO&Vx|N#D5s}} zwI*SNP6iVxUk+e>{lhZq16%)YrUEtGA}H2dH#O-zDgg`@1(@*Y=Nd_ zJ_);RJpL@?QJU7*%F2+L+Ipa~&ZgqeDPEciB{Vkv^mO2t5Z`qptf;NzpK+HI)g3|t z)KR)E)Nx)-3My43PB$W7+UQws-j~o#Rzvce~qQm$ZTJi5Y{nZRxLTPM_m8{tx$RBk7f z&o$wElVMZm)2GV=ek`RYpUZ!%?$Q(BFHnwzz6IPs_`zKt^Ecxr*%(#(`#oH>K^1i> zPYXdkT#>y0cJnQ${AbhC@#9p#f|{e8>BjMe5ST(VA5 zgZ%MO&U2=i#SSL<^V|v2Ll6ckk;sm*t|g|g{LA8oKUGDpl=B#CX%fIi5D`b#oUA6BPNdw=`|K(H^ZQ0Ya$w8mr zV}I856zT@0tI2aN6Vs%n2dWkA2(FNj%W7EM4;Go^(`r0~_=5=3BtIha`%bp|tE0mf zL1yAl*GG4mtB(NFI{0Ac`5k_|C)Mj-B(elCjw71Rq-pVf$<1Cf!(oIny(Kt#$f3Cr z0T(kjB_sK#b0s@FJKuGgGO>~&`_1|zc5B#Fj?OG-8Zd|GiXQs{xuLWQvS!J-D<0AB z{R&G6L0VO{Kc~bzuptIlK1r0b}c9KT_o9C&I?fSZu#6G;ts>^ ztonT!XB6x8 zVLc(Hyc~OWT@>*@<1ofL%n@`1jl?A_cxMkt&=~TfVUP%uMG+f{wi_~fA9v<1O*Xo! zxaUPer^o%(H(=ZV)1+m4O8zbZ7q)*jFUX@tdkA$>vK@O6?h1$g{2Nv}a-OU;j7O#x zmHJXcEdL&Y;tcn%0p18N_6V_0@U^|C{6&hs|E}ICdaO>L-|{=(5z{pqxH_i@$AOi4 z4PATaY-H0swdyQ$ZY{(!^Mm)pA8$~jjhoCByXe_@3)z=NnfD}|Z5D;lM))J-mAEM| z3`}@CjUMFtNkmz(IsKN;d1!4=agLZjL~#OL2_xzsO^>I? zj|gNe)<~Km)Wty(nIOu3)_uZf@1^vVBFQJQ5(0|?047CglFw~_yCCkn_kKB5ly3MZ(*scV* zxZd7gHq${MvLd7Sa_U&kMS9Pe+WQ|4~JA1tqaKjF|$=UGoMBRzEBw2=%OZ{XmMt98iDk;UXTHcx-731( z#%5<^&qKcnBRRchvq!^#nJQL-9=twLel!F{s%!(eu8?#$JC`$Yz8$&4_BU@(tBCx*l zZT(--LpeVSXvXgkGE_D<-v)!-)-IG*_g(UwwdFe-C|gCHN^){OyV;&4*62AYE9=QD@U6!C&5W=lTTtBD(VoFn z*L<)fRIty9+XSd-?2H2NFak-G=UIKF@4Xp62Y;HzuvugJ!|q&-kC{^r>Fp){{qs;> z;LWJhdy_^iTlUyGwh9no--1(uEf(Ke^Mr(JDl;iG zeGo`*mTov33W$OX2`i%Oh4!J|g@<7ueqJwNyh++$n2bXy8zQ%i_AJz`i~fN9tmB2L z>K{`EkIB!lw?oh#(zh?dCVfv_lFM2px%-~V>j47b$z&D7Xtrzjwo(cV5KtyQFhh6Z zlttMf?dyr&lqGn#R!Z3R3Hh~Rme{1RVOzf7R0__wnDm6+L`^7CWx!ho_DTd}MpUn1 zlu&n4SrJB#zPnxeR7+DQ~{?1ChW);rrZ805rWewpFn|rrfN-Bwt9hM4{1Qk*(-=Matv;C$KVMqi=FMvDg*;PC-j!hh*|Gmn&d>kT| zRb9JAo(4DMZyQX`I=1xCi>sKK_P#=pPykuFLbAQ#i!9*?;ojLdR~(e_LVlDriywSE z?LWt?e_EQgHHX(kJFMR6OT<29f&b@*=$ja$M75EtNvG z2@zf`ak;J^S6N0_p`vK3KE$Dm@9Ch*a{rC@yC4*Dn)sh`WGIBakJ5rI?%SXxVG?f2 z#fE$x6qQ*@vkhCdPk-yF%D{E(g(#8qD&F)4fTmBf zabmkrLES(x3=V}reL@l_n?oK7;$RLcOUfCkFXbjSZY>2o(6 zFHuaKH2cYHiws{45)NBf0%kYNcT{SELL~w<0g3gYDoH0UozS+E{d`&&(TnfDGQP=- zxhQtXG-rzSWwd>;S38}~pNLpmTIzcG=lK548`Q&-{n)SSJ^xhMoKE#SOGXA9#<6sp zmPl+;*Hcf3c_2Ee&B(~Ex=wCmVU zyDZPqF;N}&_k@0s&t!H60=zMspV06y-kFYl*iScRuv#1K9Fviene%Anp#S#nIP-0S ziu;QJl*8fDg_||!e%FR!hnbD6M>&Z&i7I9G=QKMUjoeto8RgH}i?c&cOW92~F_OwW z2VX)ew2miMYqN6yw_t{}j!LAau6~*O@>pC@(7$*W^M$96d4V@Cagaf?^B=mmNI}c^ zhm5`{epz=~tPCJ}ycs9F(rB+skor8%fAYK9h~c1*lR3V)y7K`+ZDQ53HMs2K-SmA| z)-{rFZ{&DT1dc<4)v8%&#AQuAye&P3d(7=6G6YElC2b$RY|c>zEy}~UM%%zNF0%|R zSkgZgKMT}GX5fTO^wQi-!xqoG#D;XR$SHB(+y;4G^(F$A6@*2Jqi?cXXn@}AKT(>+vBLOj=S$|NF@u*A`xKkH0uC?5F_HD2voz&zZtgw5>&(U1k2j}urUVoR9 zm*`w$ZCg=)2GPGMG<9A)2{yOQ@%Oh1YWXy$%e~1@P@n!pgx7y?{EDA_CuDs^1J*=UAa1|M0JcrGmX5x72+5vS2h_vJC1or zNf!&rPo_svF-q%+>@A_xyo;zCMASv6yM}@}Kb;pn*8(reVQ$vc)R!YaQc#3`9zN{) zL>(@7yY@9~s}lubXF*gP)^pG4yA9f;*7MTWn?ACSFTy^C5HwQBe)^mEKh4;`Mk(mY zI7L9i_n6~q^=adHYWw19;lyBidfvRHIzG;kAN2X#Rz7m&chfni_8xO>aamXnQg@d- zboM~Ax@<+zeS3+iaQdYbcBTfSi@8Q>UDr`4vwvGL{WjLVZc3!6m%3Gdv*UApX~2cA z)55ej>g;%$xpKWtCz*ISD1#TYw%!-Bw{;2eaBQB^u5qyXy!>;Rv}{XW>#oIJFJ5oT z3d$DncG>?^C{ix@g-F{L`HR-<3;IVrW;*{i3GYZ5`}i-@unuZ$xWi_-pEF%;8mw>7 zr=ndEnkVNVTd{jf;=lYjF}kpmMS9Oztm$1wBmY5ko1%vv896;T+L-mdYqNrz?VG9m zJMP;l3xP=(M>o!c)x4C|z&ZP{<=-3Mw48rf7!|=1=f(00!G4G3afyY^aI2_n{Hr!nyAR%@^K060Yq#>ojB}FkbL0v_?CoC`>Eu zv0%2rk7NEmN|@fbCS?E3-_R$P=QInEfv-(_rmbBb3gZ~P-tuu7`$uA9>wQc^Q5X)> z^7D0)G^#OBgLNxXYFNa5l+}h6Jllgi;Sl}{MN~iv@reU8)E~2hlXF^0Uf9#$6}-pX^Nk`e zr)l|X=>H%T7~0pGU}6R>Hta}=ack2GhSa`cBcGBr{Vuec#Xhj=B>-m?Y$HO zg;CyWXl`u{1IeB>jBcN|{4?R={=rAOMW41s&nf&I9#{Bf4G)C~ z-I}+?dKYKkQDeRGy{kxvArMN1ixyAqOzg|X_=VJUDMLU zuP`CGkf5AUWjA2V7d`T;KRYw=RGgAC#*H4{eq|i^C~#Ih=xxtmr2TR|!Ih21Z}&^q zOpS|C^K9qR$&qL-#{?&9**m`{*e^1DbcrCp$45i&Tzbhk)DGIGi>|qfEHnCo2x>lQ z{D|kTIn-5@ItKS3r=6_lJeH2+ef5}t(r}U8QHrtJq0&!DfsqWCILCDCZIacAqIfT> zS@5qk%Ij?Blkh#e_Ey=c8c)&h^IoQ^E%&XRb6|3RmA1$S^r)@Jy9)pk z*U`|}hNjzt>pV<0`I`2&GNs^+Id|)qry}uw)aXh0c4k)Yy3jvab@D#ye;BE=l-hgE zjcV~&z9$IH*U)b&D9O)ijRk)*#ud`Vj9jO|F(m2xN>S8L(ahF<9o3U179O`ZK4&yc1=S@=U*ltb zkc~T8!d>d)Y0x)CA7qKi2tB6Twb0o~sp9;8{3xRcnP0#6shHF7dM!rWgW;}LLr04I z^X7ptd9(9oT1c3_+K)0TZT6YC^KXbU%pNwV11F_QvR^@`JcS>T7}n^W zVXU^|eDTBmGi%~FCJgU`fA7h zv%J#$y?BLfM}7$F9IoX&-7eDRJ!Pk*YD{I0y09N+t?BnxYdP->H!4qY_dDx95#D-a zej%K>KRzs=CcmwWmE*DO1ia#kaCsi5A5Ev?Q`a%QV5kR7J@{?(BWPu(eMKyVtX1dq z?}Jye&(O=M`8wEiu}0K$B6)`?ZjFm2pH>G^HJLJtnM}B0J%i#T&3lDtux~x&vs==RE-2=B*v-v=(cQk{uyrBV0(f>L~Aj z7f>-+*KdxTXK*Mu@qyUoJ*Bc-2!fOMgRB8WC_ovVy%%68H;c0^ENppw-iat3?%|s0 z`t8H{T2t|GWaGH>@!~_37vA-{QbSsz-6+%T^C*qdL^ z-)dv}KzuS)rQa5gMrxp=Lx37Fk)rK1Knp&hvqR4YYKu)lPu=bQRi9 zaeuMYI6GV@VP&En>o<)|z23v#N{=Zp)(!7*#_<21Q}g^mZ7S z+^75KzZ!->P`yo0;()^$(MAJcs(>4B9|4k$suy7jJ+3QTNV#jLv);N}B?nelA?)WRZ6j5#?P z1l0+L(G8jiu)gL-3h@XXHnMVZK>N4OWB_sKJ|=&dnTnh9$q<@R_A9jl9}tA}0dRso zFn!tAqPGW1ym~ zIESH1p}DbP7&>(5@l6HM6C@*t2-)BwY^07Qv1aWO8) z$pGti0v+JeYXo8O_rq-99IWyp^1if=a{_U-@FU?RoP2ObEVAHL}r@woU5=qJYJYKiHapcjaW@ zcB1f%%_?Ker3oxBL}DLkqC~kTRiXa3e58-cG&k0O90ArZs-rpPB>;*!^FBF50dAA=-%NJ5yLW&^@sW$SYU z7WCVmrNcgDsa3z-v+Y_bSx~E zb4WFeO(KI}x@i|}{(gd_@BTzU2ngpE$b1EI=DRv~xkTXEuE=UjiHKxBcBbwvUwH`t zs;`N?mEI$~jfRj7*3lW@S?rEyw}E*vkJ@S3=T{D6jBBt?kU%k0>6ALdTlnsKw2?Vp zaC40XewktS0&hfu^cD!I6s=N1s|1C^kquF?wQ5Nj-E|%opz?}cBZ>UBn#Sow&WO8KtK!e>JMAZ zjfmx0{})3_`Vv5MBHDS?rTOuZY^TyCl^Xc9EZwYS5~Nuwt=+!$Q}DL4Rr(_aW>sEI zODDpE5v2Zm0v2lj4)~t$l^Iwjy@{*X*VJ8i$6=;2B@SZPe5_1z0|tI+!$psQ9Jt3fF zT|ScwCFctP=YeCu!{X$3sUYPAP9xVt1LapcjQ}R0b!SV5!mgw)Au#~f*!U?Ir04)q zHU8g!3!1sGB#f;&?8ce6)2}rn>QVS8CXQ51mQ~l1Mc%#feUmmrhbtTns7?S))BORg zHn4esp!il%flQ*QsY$c*QV-|Q@}Hw6!=UgRuYAw=JQ_w4GoTgRI(I1Oaij(6uq_6L z0i`_N=Vq1Zo)_@}mC_YgrqX8PPMi|t=-lHEEaX^-2?UzFrBU(J^xm_H@}B>h3?$AP zzt5ScOF?>K&iDMyjpE?U&}-YUD?gdZFYTGGOW;dQkUBq`2UUvMu^Y#lj7IMl)uGiu z%8a;Qw7&YfH@d0g{(=Otd_S_3Avu8lR%y`nY;?HK%REw{;eI8k+0)%Zh8G>uZu z%XBZ~X4;DKUrd_ZXSKNlnTvrd8n}DYXi%F(LZhA00n-%WAl9n{xr?({dhJ3p3oH?= zFmNvaZ-0o%g^1G0_(9Tki$0w}yK8N72u-c&)3{RfpY_nZh3?V*VW#cz(D}q5Jx%7R z{!2!zON@Jl#jjrbOVCq9c+E?P=8EDcl>I+=9WDz=jvTgL2fNcHUeYVoxh zvthd5s-t_g;M|h3GRXT6C6ktN=@N^Tt+(hkir%Ace=QRjifg~byl|!=5C^PLI#&Uk zfoyz!dywaHe6qH~Jb5T*6YRHZWBJ3L|RWt*@d9fkK6n z5X6-C>6+-En5}oY9l^GR*TDa3X?7>sgQ5R1|^IDt@GJ;9_NjIaQ3$wum}J^ z+8uBYz$LDamMLr&f2p5yR{}@O#$$gV1XLhKw>>9bFwhMm=5>K~K=W+9RjDxSB6$|{ zf4uGVdsrL)1aJeO@x`eqDS>vkG?V*EIC!Dnk`!#HkHirpg)i78SVy%JyNe*+10gjL z4Yo|liIZN>>$*8Vzav8J+dxB_(=_yh@r(>DVyJ0<2NqiFt6HWG!hUU5c7MCX7OGCFL}h& zJgZlo1Wau_z;3m(mETc61ui}&-dxlY7Hv*T^d5G z3{It?X|-=PL9%Yw&f0JSg@|k_qjql&Uk{Sy3PzZl-t0X?2#6qbYDO%DV0>U^OLTH4 z>HLoq{)@ak*BKw|Bvi3r7$HxCfOG6sh22>>>xj(X0KfQT3i5#5HMbB@Yl*a5S+n=h+elYw*0pf(2fX7WrmvT2M|;024Zk;PF4dz3>oE-YaPh{ zQ}{H+mY;|RQ$t0ihvW@in9l)-p6iPZs#67>?r)pH32LtPg2E%aj|_&L)A`(OC^3Sl zh7s;s$SGgXl_sN4@S%SKt==E>=YaDg=K@^EfRWT85I~WwGO5ZPm29t&@EKw5-QMHP zK&$eZ4ab9iuNu#69Y^jzH~)QBm+9zLwpn!@9Yk)r#YTIIOC3`Lgk$=x*I*$=ClMY5 zzfn`;#H*m)P8hs;+z@8Wz&wK`E?t{Zi95p>&KB~Ab=AT-vv6hb9%0uJzgsHBSg*%G)PL1hb|tsr|4 zaM^F;h5yt2Od@&czKdgFz$6I#CSbJ^vUKp?DS~cS zV0R9zc%l5AA9OTER*zpdqcBI7)67EPl?@kk3>H<*w+fVT04&s~tMSEyj$fRp;VsM!5*Fwo-5CC0h`Dq~Zy2$wR2+B3D(NfeI?X~O%7U*O+A$_?W0)VZk@`Pu(@Yi44 zec8Jl(N`MC&U>uq;n$-BJ%`08dyMgFvlnk`-uEC5TD?(wFsn{YPQE&ru?5)#pg{2y zLkR>xOl_-^p&$G(^&C58*;E{gBR!d`CQS=Gv5(r@z=Z&7nq?#t9_34?qBOsG=KFLt z2cl{h7TW*f#z$!!J{jpF8Mgu`OgvVjz)d6PELLU=2({D_3Q-JoXJ}D80WYVMl@4MF z7ThjI;1-t1YvCaBq>KU97ie08mMo`ZbD|+flgeEEkX+C9*DcKQW+eD~$9{Vv9;HcD zfle+2(zrqC4>wAoC$!eudeCf;Ck}GfG;kTL*0N*wJMV2(jw-p$GEZMS_(r9g)dsKm zVg2r20N=&n);C)fcCf$nxZE97VieFni2}(Yc|br1n^&Y{Neu1vHBcg6c(}EV0sz)n zJn#2H*1=IV2g4{l-c;hfaK@Wr&2x}KgWF2Col*RA{dx?r+llk#N^Br3exegX?;xmg z0~ZQ{-dZ|$_R_UmzKB09$sQ-A6Qr-N+uQP1E1}||6=;$H3;dPLpzQ+b6XREeGe6^Y zeF$Fn_DAo!^k<}6s{FFD=*?zSVvu#NM}TSJY6%_2GL7TrvT+ZQ9yp?axqxt>b;^|n z_(=g^rW?E@HRnx~;@Si{qEkYo4hLF2^k+9<@~nm93BkPb@2AF}ejMiTDFN4W0mrB& zI0^Ry=v6k0^ZMPtcSbS;=eA17hoPh?k@eAZ4qy~=GBWG5e;e%|b}}6yD_w+g=gV$= z<}hPya$ev#%~4A!)UU#ng--8wbK?j&qdSII-1*0+#h5S#^1a3xL}VW>_v^u4*YS<= z>*iH;Kw0yKOjXF%oi2;0OulkTjXs%Z- zR?L2Ud{h#C!kT?cV@)J5h9G*7}n4H6HwQN*YB?mxs|&^++U5ruy-()&=`GQ8UoFT zSgYP*3>0d?5cGtH5?euGA#a>+lf%<5hUyBfTJqYvU{lCvj>gTUH@zN#Jhk7jePD8~ zkC%OJPuE}e!PWS{!VihlXf-4RsiAZYp5LHHD&i_v&|I?TN+DYlc;FTZ6M_)&+^pZc zkB55NGcz+HSwJq&r4NOB$!$sjlvuj9Q*_r>GaWly7L`IXTiv_XcXS<_TlfXQ4`Q2^ zrm>&HG}o>c9a~YK*XRT~O9|UuY(Z6deg7Y~N5@rB)v5RGtOB=Z8^X|^r=84sQoDjf z1@2WZzZ>1^6Mw=*3+~4d!&dB<&VkrvhvVRY<<_aWwtCI=!={yKm~aTwy-yeRH9fix z!PPX#Zvr+X8y5&qiyhmqiVoK<^c_1l?=w&G`CTadcc^`lB*jSA2KRY3S3A;C_8EB` zXXKHdYbSf>oL7w%9gZL=f^tIw7EafyEkanwk5|Y4HA$5|D6IN1ob4K=p0Nmx6Jido zW_JXCmG>m&_HxyH?3?JWUX=~lmfXcollk<)!A)oo_3g6QjRQger&61HIj;!!3<;%Q z;Lsl5Jp_+@)4HMW>fU6(;eIdd=s3}}xZ6;+DKy7|pz-*bfN|fTa~)}PE+Nm6ZfnnE zgxYZbe8oIYa7^2xjM?C<~ z0|wS$ZW3Q+db$bdd!JARYEVqdQ}Et3qO&2)q#@$gP!HpbJrBj=ak-@)|KN zaIzmlCT=uZ4{+11X`qJ)*&`F{Jw>kaBD|IxYGS&_Z;iQB`XSvNs(GVR)^K_@{>%qVh<>2#eEOkqXmkg$p&#%X0D%DJO3##0Z|VdgWO0 zGV!R{;Gd#nzklzN^ZcrnkryCE0_QrnCiNblt7?hvI@!jEacsF-KI1B#q02nebBS=(5RBQ#+Fe`J+>zD zD(@#7uuODst@-R?_6UwxmW~dOIOjV{O3Cvs2rywV8|{&t8rJN^DcYgMXRv3`R^yZK z1U*vB2zl`MpW)iDzRG(IZ#L{-CiQQYbSJGpq%b15eNL(P_!c8{y|0{=+wEhN0|Bc@ zb5P1vU@S-8X5e-tS-8R@?O9kb4~ef;_j}28+8*m~J@29rBdL zZ9ly8fF5Uzn@F0!VOqw(4!$s!3CBQPzbln68bqF%h0!g9DuVmicd{9cqhXxO`RNbF z2HB@t$t^rVGp}J3au{zO%J&A4yBu-F4GPc;@%!kwOlrFl!M5KCFnpc(GTfFvsQ1xF z)jFaZYz4(@!Da<;A)KYiSkC<3m%9v2(BOGrgPjHe)kU6y!2oGk-6$>pa;>#CJ&6=q zH9-IL@KVfLs{x5~nwSU_djM@RJw5$1KM>qyO-=fmVNk3{{7wa=3zmqm!em)xX2p|G zK8O`Y8~srrU;sxDwZm>jeLS9N*v}w94G?y!D}K%2jk*I}c@%M948eJwwdr$FgkfF; z^bQf!4*>Y{zTjmD9rkqkT^Hb0fIt04bui@Vuf6ME(&o_dzr*L>D-#h>2Ng*bK(lJeV zxnohV$?f6$Riz46l=|cB1)3#}dv9PUIktIGEFrhJc&8Lo2W$#`_&$`&yKjL#f1*@s z{RS%H;Kr)*u|Ulu?VRtn;>(H7c-)lKsa%S@Tg_k4O4*r_te?7>_%-otT(HT(L$rg) zYr0mPzvhnZYm$W9mOA2Syr@E$}?DGt8DrI*04 zxS2M0$xrc|XsEyiqlhe~g4UvU-hJM0BMB@_!;7msu93BRD4Ch4=pr^%Ib2nn%^Ys` ztXZMhG%lqWTwR(=F^9;MlAOfeQ$*L3Nrd=^9dkzY`zGze6Ho;i{if0l5$xS>imK+L z9^Bhyt$6bQ;nuB;td@txHyqO%^uc1FE?FE74dU!R2#!W5wvLL&`7#IwmwJeTZLp=5h~7QGs=Du$?tnQ zKX91D*-eHP7!~VaEBa9fdkGZZ9yOlb8$PSDP{f9a!yuER=(FwX9Yh9En8o;!yg;r* zQeGre@t>bJPk%aPcGyte*A_+|p4$=pE0;`XYZyJ34lZJ5saYg`7Fn)sm3-<@6VU{H zGs&M-8XUp|?^`}U$1@ITQ}ul9Vc%Ga%SK!6V$5aYhNc0PTWwL%pv`a>JgifOTU_aB zkUD4wvGyq)QnpJdgG=9CmsiPa9rJ{6u`q8xHy-3k0Ln)I-8iP@|l}vNu=ss3SRihpfI}5X> zV)XS?AuN$n0YMX&qV~IbP+Iaof&!HES`uk_^U$G=I~6YTC^A;B4>5u_)48q(xcA;+ z`mk(5y%CS6_*!>tK8+R@d(2vSX`e@x%iBv$zXn|5<3qYKu3zVP-}ZbNBghotv?I5{ zSxkD1kb#K7_4T;{dzYl3p`!Pjfe;_HLV^SzFZ-thBdlRuia0^vn{7=!2HHJL(K^ws ze{EbiTvmSy5648Jk=>y2#dxT#FE>S)`=#aK@ut%;;NkbW>fNz#(|f*GN){)5afR)d zrs=_ZO8N4BCW+kZIz2oN*NB^H(Zr|B3ZgH%;pF$H;dtZFdxd=C`awgJH>nz&qEn{y z_Zgp?kx-lPr}Bl;Y6DTlmGK#js_4;)W7uoeFBiL?BMIEw)+d9|x^sF*1khM|Vb4w% z-0H;8FKuPGh=tBc=SyI8Q~G*RNqj04rUvtwauJiPFU!#Vd^;Lif#%FNE0tWbQHciM zoyZ(Li~EQWSgYoR;Yp~r#6PaB0;eYUcplCqk1F$>0i1OvxBA(#11IuEJ;dOma>)DwUe5hK8icVi5NC_KIDndFPAe#a~Fs zBpN09|Aon2Mx&lZfW*{lu$p|WDqatG6ASI!7x@#hN__cB#OnX(HB`B~A@CYwGhq}9 zs?@_c#Dw&$0hi6~xFT=!sQL2mwpk(78EPRZG8{RA3}WgHg1O1m@$oDA_bn-^cAA{?#ZnN_hSVsvU>lHjU*lx9P_H`>|l;T zi(z_-kg1Q+!*R`Qw=SN%jH#Vw1mzHos6zHL`fM(&;u=gBBA-l$FxFB3Il*U(;$wqv zt*OA1gbHItAaT$azWW|jPp>un2TQ>SPWT}6k9czb)~f&2om^E%DSbFK_P?aqej0ju zw+H%33D(W_ibc+P=s|%`R(&wur6EHTHgo<+t!iW%>0nsqn5o==!zLV;?p2^GtMvd6NoJSaruamKs%6x^5Y;bfjBeHPKNwB2#3m!W* zPk_d}syf4XjV);5qx&h0h=KUB@^9<+Hr3jQr9!#r)20IV9If(0R5N zKv1uZ`XkZ1H?o9=*PYS?oiK}SA-=?L_$XqU@nlR|VR=o1Qu9KP>({aI0N|f}-{`SK zHQCi%f~#Yj-`_-Q1QMaI)?P&5c2*(X9lx#Du-QXB>axR?7aKoqz4J_gE$_L`;xFGti6Yvsw~(WYXR& zFJnLC+F?JiFmj4`aO++(QPTLTUPUs?@`Lu^eC=nM%}!>W#s%C0)^9w)5B<@Wq^;H3 z#SDt!@|UB^o>}4iN?tO=w-Zf-MK1ksenlwO!-gpUrCLrUbN5}nDxo2B?ql^Pzoz)l zyey8Lw|X&>S120Yfw*bvBZF^9n)_1jx#NUR3dBm5rO z@)LF$&_21ng_N$CG-wQ!JIt3>*@J#aJnSKpR; z3+{NY@G20}!gc2%E)(IBsGp&K{^3lOoGJRR;N1}t2+^DC zXb~p6Uh#qTPyUu=;oPd<3WY>i42 z<40P@#>EY|-!BGaAJ6+?9^Qkq=EgY?n4X=W*D4NaZT3me@ksqkapfHdrXEE zLmxaFEv&5?tDU;~OH@CP38F27;#p$%N9=EWq9#~fPmiPoKmwR8Ttz@%XUBKR5proe zXQiu)RnU4kZNFJmPN2b5@OK%+_rbTdTfO;N6H<(3Y)LPM1xigOr)pmAKpSX3?{67n_%SdI+dDGAdB zHnM4p>KqJ$x-W1o9lAcElJu7O**KaNTx{U0MkyLlQRWx1DD>p^S%#bdVRoX!t2gax z`UlQJt-XW;D!1)lGmXgeyz@r;j8)$`Qb@8`tJ>gEK0TXyg<{hWv9U*YY&Ff;x@ZvS z!Fio$k4STd9#n$JpW>8+?H2O)d&A1t^ymfE5)-oBw~24E&h8^g7TRnOQm2kWm8hd5 zhI1Tlgr+S=A)B2eVkCO^DyVv}@DFS!1pJ;fQVE@~W@t%l6f^}?zEPZXJUBl|#)>6M zQ6_wnP%yYZ-{XQpI7l4y)Q3oEyezxL-r4fBsfuHkDtgScB1gvOuddJ zdT%`2?gpAxBlD{*R2OG)jfL`wC=b#l_m_(MEWP$*Ocq`cGG*;NMoDUx-q1kac5oZY z2X517`nn+A1%2pvd42$QOQuSgYFHRPq;1k4@&gY*Wd^ji{V7%=744QqY22yz)W`Xh z(+4W3I8H%49B7yOAmfl137>ZJ@l5F#d3U->ii!s>FVsYroNp&fy^dKee4Y7d@s9$U zLS!|c(p>keN=9G7Z1hp38+obib?hn=s~c&qLTo$AL(bpsT> zZ;?%X{HSfV%RLf(KuIjHjn=2BumJC)wUFv$fm>5*V4BL#Z;l6fg7O5PDYlAbs5qT? zlXFLrIvYP?*H>sH>umg_C(o$((`UO9EmFsSClleWRPU^GN@7f>dbwH3c*Y5Ph@ZQH z+u@iRO>UWcm?HoH*kZ)Gs#R&GtIf6FpHs(oCyYeb`QOaD3iNb?WkO-VaW2KDfl&p* zUXbYJocsomZ_(+XrlIqX?)DaR5A?k*8s8#BX*tnl%!GQ$T&`^ekvhTP)0lAxmOpK@ zEHcG1W_1<#8&pjko~h><_ST5k8AwXg5+Gq?={@#5P&|rOQm0TZQfeJAIn1^nQUrLV z7D@X^OdR8&9QfWXyjAHr5E;0%GiVd)atIRMKw@y&+|fiO5z?kMhd9&P49AVdZ^62z z$0%*?SnN3IyjEG*-)xX(1{V|R%;oF7)pJlG?Z=5R0WUhFMA5%|;*Kk(zRmo$mc!1$ z6)430Vejd6B3d!PF|$FjSYQ7KHZ~16lDx%cxo+(l*FY>Td{8QmxNNR@s%9U_cx33h z`lqAwWMVAM@3X>EjE}2i+c5WMy_j*HR?EGZ=Oz6mmmfJ+la$d9mQCMe$(ZM13jH8& za=+;88~US7#pla0Xi~ZHQ?MM#wOM6za6-SXNL198O!7Sr;}3P-oe<+&E9CKf5*h)a zge%-#*SHSO&QSgT0bxO&z8zxan@>GnhvS+xYliMTE;S_;2x$_R&b{>4=V6}3P}TYs zOA87c>^XR}ZTl;B?mkf&hW%9a^6j0QWKLVP>ku4yo5X!ntjP3RHf6+<41WL)Bl;mD z3rmNhC~O&Fs=uU$O~H#lxuZKA4)^TYbI_ncj9EEaouN>O=lSm)xeEt)k042>PMu<6 zr|_6Lqnsu(w4TMqc@39MopU&K#JhLzo;!CgYZdCOkUGVGJH{6WEao(-!q#)$kck!v z9@*3?FXfeYJ`5N%SBj8Fes_PP!p6rcMfl9&)hn_&?&||(c&Y1$KYil*))!n?suQpo zQHw+{N61gKJrllop37>rGr-uCp1`IU3`MU3_Hkp^yKcStPngYw`wNt$n&_vWedxAE z*WHWxAF-2{BgAV z5^0u^+;arxO@%b{FueZq3)fuHNtU9jrNnF-36%_Q$VZk>C`#p4ZQJkB2&yqy!s!FM z8Z<6?ci=Qk4%T=QDaE{T6Mr2oDGDf56KVTDp6y=$(mM}RpOvWwCCf`lB{5Ep>-{>g z%=IOe&0BOC*n6g_qo1&0erCOFE*z5R4uX~TTIQM3(xYie0f6{>-Oc=vCdnU~Hjn6uhM7fS>_aCqzoAd|r} zb(?nXH(?>BY8fKYsYHfhZCmwqZW0HxI%wiLWRjJqJGIF9=jbt*VG|7!MSl9(zutJ) zeWn!{KB8x{_E!PFf%8IE70i=^Lxk~7`H5uE;ov{re8h$856$3COVkH zK?P2TFtRFvc$Qw8&-I*qpcu}sFi$N1+s{3HS%;2MKMpxA9)fowIuoz34HTXD^W#r& zT*lq^J{%S);THnLr~o$gxBe3t=cnOd^6#=K2db(%tGBaIoZX}9Y;V<1$Z8HBKHR5I zpT&z8v!_m2%Ao{~^U94_CBivO@b9{H>%RKxtL4j=JMY%wy{_{4c@CFN{XB3oMVXuk zd(rWG!=1>YMT-_LTzIap7q|)c!##UcvyoBRG7&sehV;k+lb4ajC1-QVxfwb6a5J9D zaTDi%6PC%k+0z z^E+$`lR7jcFEOdqBK*B~KXmPt_nFU#k~FWOjU zP#dj=uIY9kmz0I>p{_z+J`m3lM0Ao`q5&{SlV2J()roRp8*T)A9oL2618OkhqD$0eoyeb{VdQ>IAF zkZhoSk;wQPDoOB!-wbT3@iq7D(};j8F8mXT@rQ_XxaZps=XPjvOg0)dzH0h}wR{BG zlo0XUb=&o*P?4Gm9A(I;kAZp}IIt}>^@8oYWKoFc#laNl`f*z+zOd;<69&$UgknI} zzFD)dP8}|T%gEtUv(vcL6fQL*m*WbCj+-pmBs;I&w7H8VQd}L|-?Yhv6UQ%u@f|zKykyiSAITxh8E@F>CnFY zQ@G^%X&Lz`-0p8?G^n4|Z~88rhgf;123+sS)2T;GCDF)^^;@{4JoaEVmg_sVR#)Q?BB8}RT2IbHuW=rr98pa3e2t6@&z<$&YU>|2M*k| zYZrUHRucyoSu%F?oPapfLt9rc5KR&DNH4p zU2C-*<3Ar@F*o6kTT~bou>`R4*Isr(x2|0<&Y_qX`-mB~6m8Y8!IjmFiw8`t6bj9(6HDr#7g6ms&W!a|UFq(oI=z9}i>M>Zu^5w+yqr~lCM zs@vgLf*MgZG}BQkXNis;xs<4Ta z(58v1#KJ;IrgNxSwh;>yZ~ksy!(biJV_1MG7JDwbl%iNvZftJ@-eg{G_3 zMEXAX%T0CKUB6dE^D2v8!SGhUM< z%dW@Go;T7L@T86W5@}5@@09Pt9vKWa`&&q|Y4Km7kflVAecK5P?~F53L1``u8!LPr!L0 zlwQ}I>osXwHKDtr%5ru2m6u&OalvdZFMsX!!!R^iMDoq@rZijCW#Re9AG`dbPEjSQ z5+lS%DcLeeM7#E?8}EGJw+a!;VkIxW|JF^n-%GR6NT`ZxK4DRzIDS}fj6mw znQ9Oj<*dj{e|aoDnOnMLv&as##W=P|gv}S{b6-u}UkYQ;fo26>fAZ0GjhnI~rfNVq zP}@{RMx;tg&{iV0EZlI@jSu|k5iYr2Af)>RT~h^ORJ1Ed={0V?r-n`8*(gS3K4h6# z_eU29t42TM9KeYTG9-3tAasFZk_*vjbmYj96DCaX`FxCA0TXa;5`QL-`Y!~D(g%rr zY46^>J$m#26TqH2HAgOfad6qx&jaS@c6#u^)x_#wHgDd%eED*(*XvwpPATy@fDO0% zF-s1^V(yPgX0&q4^4S>~8G8;K79*&`1Li)6ZW(=OpI%%_&bm#zk8D_##c}g@9zlj< z7594MckM5}?hH@7V0jFdg5uvWvv>1sZt1G#kJ5@^eo&E3C^j zFx8qYbg-^Q<-x}3+`v(jnQ9^CrQ0gj;2TIgfo>5~U_$gPOF9NW5cU%7@W(IS+xX&} zz~=g*s%?lS;cd&iZqATa^|^%`R)Rfi)&7=Y17{e~FtKEhUye~pELHRZ>1x;{b-<|6 z0nzHz?t&MedQqV&tTuJ2Af+7@!|d>iPX~5nV`MO* zl!|7gZM$1~_M9Y|)h3B#*XcNA!e%^bO4YSjcj)oO2SIO@E}>s-`Lab^THdPF+pS<# zZfeTVxtsB@9`!LMXnf zkQ*^)@d=eGH~{;V{kL_w?2_)c7hG~ZDiTN*BNqW(@EZcln|k}D7n?UOWO-APM#Fs? z*|};n$7QVBv5V${t7ndFsguMF8NVGT3RBXq^jkp)z8&hSGFtBQyfA5(mJ2qW=U)X{JD-Ya{z={-!MA+mzG4yknT0pbVO<6G+5fWbh%Y*GZUs6)( zN8(`{XT0bRiUtEm_U}p0uK(VZQ(()v{5A5k|pf*%!?JO9=fgj@9(+e2^MKHQQbR4w6ag% zeW6al(1BYENZcA;F9gwfeQcJao;izp12^fRd~#0xeQx67Gt> zeL>pz(IbE)ZP>6WDLErX6}(BHxP86US3cV^ed4e$}%dy`5^%Ew=Nx&cgGVeG=9Wa9GAI$-w6%5 zjQs4=&m|{u+xIRGOBGq!tv>#E7|=A2ue@!mZbQCWKx-l*tJhA?$>j!q)r;7crOA1D zd3XHwAxXmIsFsBVJx9%}Kz4`~iy8Iu2albm>E@|pN1HXsA3Jm~90=Z1*)}gJh2!pd zy+8V+_|uI!ZtT3JJ`Bau0I22}^yxdm(4PBjXn+z{6U8gw7+E6Kn=%#gZ?C=9xlJq4 zmVI&v)5lD!`dC>VF7@rVKlBNbfO83Z;~moH)0Dg>!>2641E=t%hjw8W+4+a0jcqvvobxP0X=&3IC$_NdyB~qC&sg!Ml&uPBqnlz zEdU-hXwV?WMIGjO&H@uI{?BmP)X#>*V&OAq&Ws&9_SC6Uj6Nl{Unl4C-oz4OtWAoc zE3v&hHnnZjqSt_78qLZELWL@kN?ac2_1E4?=eQYzdR$OcFlE^)T5uS7_l+kx?155< z`6paPPG)ju2DfC%3=F1Vvk-J?+o(td)Tmmj@1 zx#6V^uDt(rweR}tFYk6uSE5rJ=a*6j{-{;-S`Lz6=uEUA+NAN=(dE;$nm z`jXRAQ&W>TEPrdhd57}mx(0L&gGFT@z4H{Nt0fgswJ0vN4hQ68>B8BX6axkp(v-%9EoM%h zYhYS=WaEkr>0C1WBA3FYWu>m$u$F0EmiS8hj~)o$&dSQ?lGC1e=1E@=?u+$i4ckl@ zITJomiNahKP?HfuhNj^7XrGj{Y)=?SBCxy2<4-)9mR7H*X{)1$OIkF&a>USC^du3Y zv8rV&=454Y85#JqZ@%%aNS$LRc5b@3UCV*v=lE$RlNhSFpmV2Dlct7Z*iB~a&_NkE z#^k(=I>)!Id*}}jB(=JF@$OS3Tyk@V!q57RtkNl0u>}%2UU6VcohBE~-(D7wX(&^- z3`Lc(;T`Ht=~C?Vr=P~YDXgg0)~}q^Ag6V4F)Evf zV&S)*dNc=H%An*~y_C9*G8<WLyG_eO0Xsy#_m1``!JI;$sOG zUn$X|D$K^gF2 zy*u{(;l4j)K%mAFi>iKhu) z0mrpMBUJ$^JPzj1q{;16yi~$Wb|UfNu&)ZXk4_PTbxI*o9=8b}!0f5=(my}?5N=kN zbS2F4$}pQ+^T7vMHx#2Op$e#iN&z3i=~Pf zaKdenn4pAZRkY)}mvD^as43NGs0)(F+Ccj}#Vk_k7gUQ#rXBsZzX^J`sQywkrc;Sm z%T}?M4Qja?8ted*^)^K{;#Fwu5+08W;g_=R=G|p6dPS+ zDzNo<{emo15~HI0;FiwUKLAIa`Z95kSZA52Aw~Hh&H*Z=8=@^sbZ7{JNC5$krl6Xv z`Eg88b*yOw${z%h8dUK*tPZ1(RElEVsfe`Guw+cT5@HHdQjM`Q&BX4EuxGLf$AXUp zE7~<^IilY<)-$v zk$s^UQb4pds)mj8z|^YP2RURA-eO5sJW>3_#PDAPqa3sa2yh|3CILtbvug7Q+q#6! zM%Hck`r{9K#2b^bWEcc5DM6NbB8g_axtkdzsvpcMPfObgm?48#G&QEP7I>DS3K$&0 zt|LY~Nyz{^74qA}1GB2?DD)^BPEFtDbz9zi&sg_$a>>#-b>V>m!$JF0G&?4Ft? z%46`2rpRl=E3;H{OIBi3iAyI+Inn&QPJC9p>oJj0PZBv5O`-v^L>EllK@sH|uohmc zQG$1@&Z=IW>_&K}zLsDc^@XqlrXwYC!0vssG8D@uSK7c|AX z3Je0fPYWV;oDpM85>gGvD&P-z5HA7IvSKtdM^dSQrzzG#OjTvvQ_YZl0gp*b5n~D! z%OZL->QyA%BOcBQJdzeqTiw8rLXn_NkGPKB8{mh$Vd>cQSO{RNXTye9p+1nFrm0^7$9J0_h6o8D`vl-Lq>PhncYuusJo z3|U8ymZrk5c!=zUiH5UOuqpMnf$phN)UU|AK_`nwh0Yhl3e2jcq-5>dwSD^ZIeq%H z<4aGh?>k!*)Xkf6z-BBM48nc%*s)`skRN+pqhPNviLi4uP8a_dxNPcY!;T$0CQqJR zR#ry7n;FG;l;bdWR;r&LuoUw2ZXTP!S^}o=DAX|(w_Gw&BDBvL?fM4hNb;bNxFtw7 zHuj6zrsha;noN=jEBGoEi|R3A|39D#PdxgE4ePhEdv)B|c+H)v8nMKVGclk9C^;2F z2~Lak_yC)UJQGZsN;!#)UF}3-f<-dIvPQ!UexgNzdR4=Cus4ouDQI{#1Bi_N)~j!> zUAZQ%H-*+)!FSO=q-wfoYb?pxGIXE-=%@jfisCE|&-q1|lf=$KXM6{PiFWBK9e(K2jIdt=Pmv?ZC)t~9<_1hx=~1$2Yv@lrW?Q9$n5@>gsAotL^9V=vv?V zM}r8K5R0;>c)v^=T!d9LZ9L7v28$kvq2-13(gKzO#>mp;h{E^}K`|abF)=cwo77>V z;ugSyqAkE#F<2wm8d-IgkVQ}gn;5DkizI?E4h^@2Sy85fM%|=ep*dRU8lx;l!e%p+ z^QeL<8`Md`f=_C^D;m+`*4c^?O1aSfN>Nj)B3SBW;s#7=Wo^{ZmJI6K&`=K`BI>FI z?ycf>m3`VKW&>q)EC&rw*gJGFWhYS2oczW68{s0%Ri;*257^Wu8jS zr2N4|Rtv*Z_$s7)HmY@@o6ZmgO*1KZ0G4eNRF8noO5PG2sEHv)cnc_mk9rq%s?b0Q zF!nYEN~WR$1?os>7L5;^7=~nINi$R?Uun|DIuQZY3rzF^>1w<`F+H7h>M%mCg{fqy zCC~cnX*GY$Uj!!&-XnxCo=Ev{6oz6FT2O%VsbQ5R{G1>wF?RkCQ^DrQ8kO$1fsRWW z9ypc6B5**<1IUU=7+Yq;hXZstu^3WWO{8%}JXpMKMr?MB=*a{Jn#VTK2223lu3*)u z<|oqWD3PhW8a;GC40Q`nb!^a#u3C1o@KH(A4C>&FF_H$;#?B#>J(msg@AH>LZ_?S~ z>Wmk`ZQxg5ef7;Z-?#*+7Qkpat$avLss@XYIyKsaCZ7)(G6Zg=nW<%8O#Fb0Uk6+^ z^?yOFrdLk;Z}yaBK*48*4K_l_-UP${6(5l^9D=5rUCQ=2OD(j-AM+;u==;PF;^-0ubsm zAnUMrFkVW{aFjrRXo74gsOm&Nui8w@qXnYX`$U z7)_${uAyi+d`z&l3hGW_a_CIhQx-;lu|%F03#-A@twpxH=xV(<{1eboUg!31WJ=WmT7js89t?LpZ|QH6F7lFQ8(&8BZ`% zfZn4z0X`1J;805FZ_;ZxuIZ3;*5@vyDdk~G@!`e*=fNOhUXEGJ2L^(Txx~qCQO*{>8GCt0s%LlClR%RaV&*Q zrEp$kPklb$xN+kaFJ26{((HBTM%&FX`<20EQ~xo(x36feKE-?Y?uEM&kH?dE;Uu=r z`tRfW*%Ue&F!1v2(-$FhL#8?~Ef3OVMVv6M&38|Kc z_sKSoJj7B0RFo;sri^ddlz^7h0xlLrIzjVf0s#zrYB~`lFqAydCSO2T>3SKKuq#^> zz8Z{@80?8`$w3v9t8{}+f#t9%5;v|u^JG>6AfND7(L|t-9IX^-V`b{O!mKBnr)`C$ zkc5H{7Ix-Qq8d$1ve;xIn-b4rQ?eS5k)bOm8jVs)Vo9ciBnYNerF8+sidr($ji-4% zs!b208PhR=+}7c@uw5P!8_XM*rvi0Q&9z$RIdwaEFefhS(P;1j*}aS=t0|3dFGpvM8jV}XnrGn9%u}D zP?3R#fRl$MI+GDEF$6zlQ}j-Q)*vuv9UTwB2HOX^1>&gI+ z6DLqn6iJenELk#p_Uy#Bm=l*!4lSE2a=y*jz^jMg#W$?T~<4P>SiZKhyrr7qGd?i5{b_4jK zVaS3>Gi%UgV?{hG=g*!nVFvXf%A413=s9>M^(F;myP9cb8v+d-ViJ{UeoLhY?Yt&f zIuI&JQT?r2HN@_=TuxzOYmUpTti*imO8@?dP~NuH)f2`nqk~g@M33i;p(`#*^VFpn zt3LaVZ;Cjs3ZnA5|I{nbJe=RW<-^avgq|EChuNN09_pB%^p8Ok!OE8Uyp)^LYCQ~( z%27j!*Py8^cV4E-Q6%okL8>HrqSd-dbvzX~7wP{gfwK(HhUN1njhqEM(5r|*hPH3r zHD=f_S@Y7s97}scPCy-%hGr{@jlL<^8j=r`t`GG2;vFtEJ2}54Dpzn^!|Y6$palz- z!>CH5H1|x3Qb98*8t}42eaA6{`T4rZcocAS_5k^O4Y{HvkQk+-d1*XRWSx3)#As!Y zf4p74e$jI;yn~uhLO6=qUqsFrZ`Rn-TRz zWr^Usv@f4*h?-?H-xN|)I3+|AJ1?u&v%kMDrylpx8&ByX-VQ`5?WC%tN{yRWXL)O) zpoy~Aup*l_?wm4dKE1TjD;^An*(a&_{h#}@+2!w(xvn3ppbW@QP9`~J6EEGMk3C-^K0XC(nay91Of-yUI>UhJ# z`VZcFd&~Oud7ljA3`|K73~p@qZLL!VjG0p`V!Cj|&!_~lCey|Y#fs_jXhfbj%m_(6XtMtyd` zI1hJhnKOIhMiiMKq$FBeSlDRXsF8G+1^7n9W1xyS%>a@#mDVJv7^ubCMizIgc;?|d z3OimMV7r4o5M#d5W5CjHz3VrkNm#-)(n-wwG89#hDSC*HIT1Y|RE$AkhI}aE#QxZe zQ67W00y`F=3Zh_FKG@&=2R0Sf<$izneOambM~JDzQf*p_pmG=@nu{e?Zodm*O$Pgr=~~c&VoNExnq)PJ&n{aJ(>w>py%7 zMxr&LQ{&wCz8Y4AW24D#l<3=7ddQ|;)Tsv#! zp>l##Yy|`BKViazL_C-FM#|GiHqQfkd|+Or{&-`&Gha zQ~yWQ$|tX`uHL(M@0>YvSnZy3XLmLdRqy_r_j6jJ8#G0sm+tQNfYK)$>fwmFe@g!yGt(j`M`-DQqvKSS|vsG zD{4%pS;uyqhgdZATVP58gw^(2Sd~v@Fa;~>XL;IDWn>NK6H&8BE-mK`41|BDQc+qhSUzs+<#h-S-uad8~~?g9ywXZoG2E^b6isF zY1|(rtBhY!kt{ml=+CMm)M*BEvH$SiNlDzgd2?FiHl8qT4JH`@o3i}G^ft-Q`fB3* z;#fRz=nX`fCkn?KW2sP>Jr$+%hJzETZ7~oIR7MQ!Y!uI#lNFZ!#K(dmoe4>KFYl1o zd(e37r(IRtv0={ec}uY`B#qCSf~wOZM~^Q?MZJWu=*OTbrSS(SM3yzt?tXu_&Um09B^`F7%4wD$g11bfV(%Q9anVg6teUSJ?=AmMt z_H)Rl`t|MIvPH9i-^=2C@z-s#d;5vfVoc;Pj1u_w*(V=MjA?i)yXU3l28Ks#h0F;JBEL@MTtcGcfXHKX%=5ztQsDP=+`~)V)wfrCy^6R z-PpeCO~3Wg!YCvyN7r=8;rfi6R!+_Dt1rL7C3ESSTwX5x)>ADzUNvp*IyPRK5LA;o z#kS9~q6z=IKi-PLrp&wyE_v+85kS&5Y+80nQQf8}oSjy$pkWrrWhQZ4a{M4 zm+%#xFTMSvzYR^|Qq$8oOer<3v)EJ>5x4#3mX4QP{reCVVTck%7K>3A3#;i2h47_H zb#{|0$BbS{d_JNEpL*+6E-j;8YEC1rPT!9{NlxbGZdetHCqBhzy@pNE9ns4){`B4V z-t)&lJOY;auCBM;bo;}Ye1qOB_?2B3x8Pp=YAhTZK__p%_Cac$0@#N-9QXcTpW;%p zS8P8XkIKcxn5;MzrEH417GHes&p8~IjejWv`ws~kR)hI zMci*DsB$&UIj_9wstfMA|4C1PzM<%!|NWDUIyoq}p2EHT{(CUOYOfzy6Fm6h%bw{O znK^aqrKV-vcKe+y2ng>oX2pw|&dy&AsJxe06@kE^tM9t)fyW;wYUFp((nQc>4M0(lhfGE?fcAW70{fz`|Rd`le8I zD##<>1XlCLiw|dVDd}8lCYLmG)>Qc9y1m=#(b?mYbJKDQ+vIR{@r252dcz$7HC$bN z>aq@(eDPsFj?1~WOZTG(4^WpNicMklB0XQD-lEsAnWZubYH+B7ZCYI2>&xL4{tX<8-M8SlP957{arEe66#0tj zw&~n)$lvO${>xxX85sRpvu5?`)ob0lb&2mfG{A{ixgZG%S>NMig8uc4K5v=IiO>2NqjTkWk)^n$(Pf@fVjPzjxKN&3Sf<;rf)b_Jh9VL3n zv@f1XuhU@J&hiRX(~K~YE3U{*9yWQ7pOD9%e5GzqeSb8p5oyip*>!+7B;_w#dxT{i zsqyUd8a8Et0mL-mM<4s`V~^c$i4u|Z5&e4A%}SfQY$?_PRvm9&H)+b0NmxHJSO$6kIlD$O>3z-+1x?Fn`sCX++h{3swMosgsqtX#2(hbvtMzE}m(`Yx?M> zl;bB3tm2Zh7cAROBzBb|}r1`b7rR^JYU(H+sV}A1GeDYuD zGGL>G4Uhdk`&eO5t;thJO#g_~6Zj zm;UjvOn=RYfT`EDN+KNi;Q8MdHopuN#${vV-#=)Q-}IY}+j&DcQF=T#zy9+tyu`@T zmpys`N7=k(nT7$JQ@~x_UQ-jy7e+7=LQ+t`>U+%^qCu%$KZ*fw$5!ZY|=a|74#gtxOv{d z=}QiZun~+$H>%tCqPEw-^<7+A#Yj$A^qNe;LuaZE@Ui2|77yT3@)s@NLlp1i&)(&@ z=8N|P;EW2|l_Yk$O})%9vo}!s=?_GXHfwz8@F7zPIj!2q^Rg}*KWry;L0NDZSt*H$ zN)h6Jz@}K{r;)h)u;eauyL`j^zd-o0gQtXZ{cRY^(7IXsl# zk9f*O&7W-ochWVbVPV0WZ@lKb%hVE7EN~|p-lvOlth!14dPn!{rv-h{lP9+16>#Gw zjNZQc2$$6KukR0_@ed2k#Fst(dEIr_#dw*I%FI2*vd}GCrA6Gxrtk!_iAYtZF%MZQ z{>O`t6<+*1>`6l^NpyFs!sZ|StsifgvKA$pzg@$+y#@^1d(x9tr*PtgX(6OI8nHv~ zzyAi8T)1vm6=tC*hEJ5kR$L^(pnZplEh^!vj%_+^TE7FRl^iXVe5bO~l8237fXi9z z)K$%r$BY?+IW0!CRipetlh>A`Pt2;eq6JMZfBB_eQ~?~Dq+qI*f=ZF`T76q0dNnaC zZ6kQ%_?eW9JT8^XF3jPQl0BZVNf+0cet-~9VfMvCKVJ|%bEbYa*K_PJbhuHs!K+U_ z$0a8%+qcVMQ!H^9GwC(SHbhif&`4IUgU}7{Jp|MWO)`1sA+qP`6 z;hS%e(5n85qg(3dq<=YlHqDdY->C^VcJ!{ON+jY5k^{N*Ta6yM5PnpV%i1>Y^yZ77 zps=OQl)>U`N;4%qnlLsw1PAf0zuc44`GF%kbCpCCbnrxsGt1@<{##OB$J0JA+kq={ z>wNt8&toV63q(L%vf}Hyxp|dU)qG5B(X#a?|NM;g+_9;8d?Js+O~S9U9xUi`3ld}B zYfoHXaOstm7#;Kwg|Cy-{-d7LWEh_uAj;7e1>ERa)0b>Nk=N{+fuonk;!ZQ~E6@Is zOK(1XOhWbN4b(li+qP)4d+Syd@Hdo-6Z`Y(XZN2m-w)?@r1a9} z_4|#Sj`J2RZ(ET1)s#i0c!VWQ4>qgc`mGoL3C2^WR2g-nw2*AZ3=P$$D1VlTe&ExW z?`d*L_fwb$79@d_jdMG_^3D)AF{%s?A!izAb0a3N4dZ}=Hu2@uX*qV(Y>gaMtYb|Z zbQv{p3ySU=n5-D|ODtY2h~fXtH??8IhGD~otyr-lv8R>g;zwa8L?uK~oIQK?@ZrN* zqO6PmSd{v8g)PQlm}b1I5G^z{2aOnW}Huyf_OR(sIKmuPXBz#HhTefEzPzB&>tM zQwQ2MZrFG1ilZ_K5hFl^I=LMtj9&wskoL8yDciU3_FocInwZR*yp{}KKr5$^#WUt4rKQi`wyB!3Dbb*8 z%4WG*hN(t~9Sj^@o}b0t@x&V#RzX*W{^SFHO5rj*3W-@@H;*@~!wnoecJcONE~$w> z#^jPLBe-k#mN{I#whK0v>tWRYL>*DhWDF!044Vo%refiW_=#Z4>y}TgOM3-RU9rDh zAVTGqi<=~k9I*ifEy-!WzN=~T%f^gcN=F*3n^ibz>|!{TVlgZ}Q>hp}O{LaR%rhKC zk$m;g$FDt@)A_#rF%+5Ly(fU0N2F?^9h%(pRW9#>-KVWnt5-JTxK%4QQ8xEp~FU$S5$Fa@`#b6*|ZCy%nJP+-xRz8j2+!>5}aCCuTZgVLc0dsvmbt5qEU(x zta|mu_c*TLObMRDgx_~*ORndjUh5B)aVc$1d5KqJ>G7wxub$53beg{{;ti_Q)fEax zOX9v$6oZf@5$o4PURMPakKg{y5;%*vByP~WZ!qW0bMUejS>xw?1AAe3PhMD*Gi28C zN<6}1mFIZNf{vpH&M~NakcOU3syHg@n7L0PF_;z6zj-2@|F3>NY;TZINm&2ePyLnS z8l2Wh7^qu#+qE5YdkmUa1uT_>gV7U>3Odi3xl*FuqxgcNw~HUefB^&g_wWDt=bwM{(MP>{^#WUP?AWoN zWWjdv%Y`IKUa$AmsZ%FToG2|Vt*oqse@~t~dB(+$;^@(%l@u^<6%`fd`Y`?otXgae zSQ8Mc>#w`!p1bcP393_!P0{XqYQ$fS(Y??6rgEuZaC7T&8#YdERK!i2G5yd{U!Ckr z7B4>nU#sG);bwmSfnBMosne#;VrCEHeevJb;eMGGSkb_N!7`h`%tV)r>QfKQQ=OJv zy>`HLl2W)v90#w=`+Bu#lR#NX6qM>xU?M$9RR4=joI$thCqBUL` ztT7CSqt8A2YQ6e7p6H$m?}3(0t{mHM;q;+HbJMva-tuaV<#w5eckJPkl9%n<<*o5e zvH9i&Ds8QWi0&WL_nq82TyE>jxK!XBxdo{ig&bEunfqke6s-2*54OwTrp%i4<;Ypd z_1c^$ldHk{Vq3tIOXd#XQj2D;E2F+Z6?-wux<3%9p-(g^%a;4~{3?Y@t6K-AhAY{> zsAZGPKflutsYB#grvk3ufQ7WhVoAi@->}hzBZe+Q(JI5+xMADzV-^xtM`;t9FIA&5 z4r~M!(0QUAef5bu3a`As64RPQVqtR@{6KKeM^F8x!38(N_;)XuRRp{XW zWIA};|Sw-U}Me8?gvN2oVVA@kGZ^|%jMypU%L7`d~v?5^2;P;T^q-1ls z&FbXl!iic3<|?cHs7WhOp;SG7aU*WnsJ?y1OyjsV#Xh9M8jM!lbzuE;F0JGAEh1*X z8@!^FU_cXTInk9EjT-B^tW29aH;GHj;JBvQsRuVNZ_%>J3ttRI`eXRp=W%^U&Z2th z!Ol&yJ{&k{KM!n5;A7<-i!L8OWDzYmrBWljq`?u^{h0SoePKk8E*C>n8Q0(5ld&`zBn>KCQv17+J7e9&(8#cf!?c29+*REZM4jpnj z*Sq*%#@RVM_VOUpf5lGC}tLkAr@?$6G?c;%XtBGL(6(fO&G_8sTY1|EWJRo9jmD;s) z+tE|T&t0{uSyAiqvg)8tHFt=A`I4DjYV!pf%fWQ;)t(qF$P!}}w(P_0qcKs6kL+xi zn?0!CU{;^!J+mn_nd>uY333Kc*-dTp`VIS{Bv4FDp(Aa>|DtXu zuv@Q51V2^gwn*UU?{2#6@>?IOQplk-iyLy>k;5k$ zfb5$#9}^vyl%s_n<7JD=mJ{2rMUHmAuG2kt-U1_u7{nu~sO4!!n&f6(eEsh*56Zi{ zb3Qk5>aYcCwsI-$E4;+3FfxB&-Q50M&gElP2GGT5@|sm?l1MD3Q(9udE5sJ|?cB<7 z*{JM<3TgbYoh!K{Zq$lB9@wS8kv2KpuxU$uK(<50&2qSb)0TPAHzmY`iZ+Fp4(~fp zk}N@ynPP#76$23}^Z*=7G(zQFE^dG4t+zy}G`t+6MX}*i7hT-4<82RCU>4W08=7-t z=d3@2GV+?Dh3jTF88u=uod2R))}&#_+0!>r*>i&_lfWO!d%~TO@o(4kF=-c*BC+@G zxs9Wp{~!tZ`A%84E6L@;fs-`l;$H!4C2+1s@&CnHDd;xb&zfu3eAA|N%TXhTJB}$; zk>J+4`%SlBaoN=shpm4i^RPFwz6W;j8=^rmzP#izGtjiJTX5v?c)*igXoCxbZwnJYVss3lMj@3Xi_j{ z#=4UtN+(py71;pbKp($3t!7PGLrp5uGMQGH;l424MNP8#GbFtGPdB#z{R4mYiAdx^ zhHaT=hH^DaSn28DrX4&80d9+@KOHgkLyAET!KuwVLu3MFzlCs}=_%tVO|cKK*WvR*G(fDf?JLITWM^*Pez@9)dhhfM z(c$=h@zGz?3p#Avaf(EaU)zcsK6c=-GJhJ^V%(@z*wsb|66?VHF&}eD?U(H#(ICob zXe1KUeeta$N#TiBesK5Nl%$5fYFZ&ElGoR{%2Rj$l z`E0~Y4~`+I8@|Tb9T!gB9xpJJ;%o{dcqsRvkl?8kJ67csG+DfHAL^CyconGu_*~hS z1K;B6HCw)RFNvMGtUmYqXWxQthIReK$svQ3PPP z3fxE-{zTEFqM>^EsY6Zb=Z+mS3ayo{wQpQ6mE#_IyEhmct!ii6OzxF;J`SUPm8V0~ z+-KkTG>i_eNVQnns6qST{imA(5ChcB4)}s>k0hRP9vzzktEUdHoSMR=HEDfaS%lVt z5zo$b6ADtfkKX@KAm+}B;-(i~F?H%(qR8(({TP?dm4pLC)b=j@rZ7FTPFBX6!+XnV zR+m7Pf|RhJiB$2(3cm65BduCp6sC=51dZv=!ybivCw8}Lb;0w`yiOv4wpnQtCe5o7 z?3dqoD?KaQ<5P)c?poG6I|+zq+nMXbGzKbEYGxoVdqp#?rLZabjvw5boXky|HQS`= z+->WprE}cV|LlWgH+<~crgdI^^PeTy2uJpNPc&=P{I%ELl2IT@Eo|Ir+?XXe+8Fu> ztE>F<#vBU`6wHTavf*bQf4Ez-OD?IRDpyJsE^m$ea zw`J2-U`SN~GF zZ2!kAzirv}BEN`&^`cCw)tH1%LT`ELp^UuNumAO*<$G3N-aK{4=)rJJzWwZn8C=0> zjJaBCW`BZFw)BomHimU= zzYajf%;4UuTX2uP{7E$sM*qoXb-5?s`LYt(lwVe=IyAZVt50Xhim6%}s{{}YUq~v& zbIE|IDSHjh|CU#m$%J{|j1a5AtlV{C8JAkO&!>Y)r1Gw7F1YB%J4>nawo8{Aa z9W&AAhab_KG->ks>u(BT#4r^>KuM@TAg)~yjmG}7HNvKfQp~}^eC+3Vc|GsJ`a#E6 z*qTs|8}Iuched^tYDu%YIvD>tm;~;*9>tH~2icUaDKS3MwoR+_v=r7^re(9XnnZJ( zteC8p&!0Ok1vP=v>ZD|Ty=dn9A3UFu&W)QmtU;p|FTeIt(kAAaZwp2wE4Ri4t{-gnoXcirOk(awEfIOJ%oVq;D+H)Pa;7!^w(rbJ9Xk%|?< zM~M2;Gk?wIGGZks8r4f4I$?}NJCuF+;pbdxHkY1sLGz4BV+L@!7ajB?N$7sf6*oNa zSSiN3c%pcL+ky?I+B@n8Z~vu!ekzxe$))7(-mvb)XP-%Gec6nSJBVJ^`}IeF4PJEp zJ+lAgYft@-%WT^6ikmCtQk8_8H@RT!;Mu4x8S~$8?NzV5^s2WS36;(&r3@8WmKq_^ zN+nd*qInaJ0~4DEj3gA9!5 zWUk2tg~g$Y%-q)F$1Fpd6&3I7e)}Kq`@My-pq3;@@eYE?d@1E0fA}<)26Q){OG?X0 zsnaeer!L109yvb}Pg#dug<~!c>;>Eg03U0VQ?K#q;u5E7uXmq*K&a~H!wx0i`-jB43s)k|_)tROF95-UzJZvx>Z-Fgp#4ixPM$|t&{8ZC|BH}OU+%&uY z=;8PkiM;j5>s(R+m&!HE<<>16!X>w^450_`{yT5D;o;wun6x9JWMYXTHr$he`3)U0 z78q(Bj%$&fTDEV~pC0@j*RaFn^*f2~d-IQXa9PbdTz?M{%RhhTDK529!Bw|uOGbG~qK5?q(~~qJR0d9=SV4@+7FY_58GFuB3nfHpn_6H~s(`s!N|e|^>P9S4_7Zq7Jv2)!ln3-buy{Jem zp;D2;FliFY*|sE9Qo?>KsvZO@kJAE&EP|DrAvT9vHPAO+wPQ56sfv;;gl+7S3^QaX zX1q33qm7J-W!soZrpNPkEE4vjWVaA22EG*0RF+_G`TPVE-bjG9{fS9o1vYF(kdzum zB#OsSHsTaO;A2dj9LcewP}K;mNz_zp|GvY2`r{+OxJ=r(MTH?-WpLVv1_@h4fg_G> zTp}hxHY=bYIaP2K!f?D$Q5-fFl;N9NT)Vz<&Cb9-$(sM%$2dRGu$Dsm~#$Jkq z=Lu@J>X>Im8y;E_?8AuNjgcosh|UKT4A&AXB>PXtXagP*Hn z58QX(ZxkxrPOB&Wukj|kCTaGZI(~i`AT)K#iAS8@_tY+2xcGTNbA)UI3_6e^5eb7% zi}2BA8UnB&60E2?nVZ^t@~9Qws9?|*y|BJVsi~rABG^a;7kxEGOn&b2Sx>$CED`{} zfM$i(+^IqobI36*7kCEn=4GB9uvF|5{fhM~>-&`!lOVQ>#DjrlN0oWkIKT4>9uHK*M0+wv%j z#lBgtj;68t0!$O4R82Sauw{eovT0i#S+zxxwxQ9@FzfCDEakwqZ(201H+BAk(&`W` zx3ZHnvi|;M@1TUlWYfC!FTeOwP@!B4ziH9hJl4ON*8AIF>^(HYnua*kMBQ4_bnZsn$zo_`JQR!~QR9a-$b zO;}&TcvBwx+ue-Mq7^^%+qZ4$(6rh3p~Gz26Gten07rj;e5cZHB4-c zZp5M|hDwzU^mw02nw1w-VdxegE{2_DzEFB_RMvvVt{E_^I#k3EkZt%(FbKRk`is%j#o zB8FwtULl0hIbAkH_Pd%Ep&eJkw8}oRaPCAdDK#UzK{^UeBu`ziC`P-Sz(+s&>$|gN zPLDCeACQQQv@P~+#~G11LV!)N-oB_$3hXmfOe_y3!xM4QinUxyc51y$Y|+AHj2t=z zQ*?OPyro#YO(GgC7ZWLQG8EP%PqmN$V(oxM;ywO!BE$Gin>BX^`Xt74?{TkLM`=`! z|L!Eg7JxNThRg&uh!OCX(9i3vVG?5t{y-J>c8qxl{XGqRQ9@i^!H)mmq>0*;V#!3| zWkU*@IFBOB`!dLLPrSTq`#yA=$9poWjLFpKu?unL96#JLl{*mGS;Uh3m&~7?g0V$l zpgCM}+N9~TLXogdMcspfM!A`;&`x+Yr-VV<8b*+on>E_0~-R9aU^?13PCDUZlP*oJ#cfCbFp?v<3uB?p<7cN|!Cy3w6g9$bTTgA>_VAdsUk^v^KGU|axfk1#&=?Ml}Da?T}MSmnF zP;;XyW=sv6G_s>2gVIsPz(DEEsDzDs6&YO-7QAn1suHWI_(OYS8s8dg__jY5`!^9}d%Dkl|x!wK2h6 zrQRabL~(LTQe@NAYuHrGrjau<-j#-_**vnkY)kHpFx-;^luh5@I5VZ^6b zhB(i<(qB zoyKqtCL+o_ls0RT=tOlD^9 z98HFz3`~^tc=Qc_mS?^xr-F0yCm2>xgPvb|gr%S!iI3uKrpiiV4Yh@2wGw zR{|xdk7S{$4vi2A(U1pwY0wN@*i5AK1fklXJ`v0KFq1hRn8C_5rbY!n8so7q8~Pe# zK~%!X2Mih&5=p?&V`xbun4Du1g>Aq#RNK}J9odvFSBKRaHbrevoCMLXfwpDF13}2C zYO^WwJyy-8>9}f5ioQ|P7~12hBsE6fq?;8rORuqvvW&(2lzu4K3y-?6sJn=0F^!TX zIxLGs1H6g_^gygEwD=a0RfV-ViKid4>A~n2YHh_?qJ_Nx^^iztM`jiIAs!mc)%T)` zroo%k4of@-*%ae-Y+sxk0ZKvyhfUSIVnw4-_6%67 z84m~3(*y=dsR*7Vs`BkAfu|Dg2%|$3hNs#GoGKVO!wcBaSm5m%>ZOy!cpv^^h`LhI zK^lwUUSrBRp*I={POP&y)!B6--w(`kr>#O6n__UYr(C#j;o`giHA$wbdH7JgQ=LIx zdhGYuzayFBva&O>8)EJW$K7>XSA{wUUV8jDS9U0j=_VMYn2P3aWdAP;^K#z(#~65} zI#`7^Mdkl+=bhJfzeTEvvPpu>N5hsSSQZaNrFpZ~sVUj8<)oD4CPj@)%gdpEQm8}-fM_zd0IhcT~tUB;-QPajKR+N#$aj8Rw4rtY?#n6$HB#oFD zGD5e5s$oVmdPr!68pZ)*5t>s)VwM(ALiiDpCpPnWz`*oyFvP+|3iU)$)6H7^IBY83 zeNE(<6UKrqR0qO>X`HS&#n_asP?IiLwh(F7IA`Iqxu+{mGoOiOv2DsW{yL#DD$;?ViOHXRsrXy@867?De zkCh0NnFl2Ku}5xc(J1ZdKfi{BiNI~t5F-nUNtwGTfAsRp8C-G_m&zrlrsUV-GE%b| z6v8Pnb=*`ST15qUV<(SCX)PKlGwqs?FfF??YhrCR2T-JJ3Xd=LoupnV_Hm82-R5H$ za8#*G2plP!Fa`zD-z$<)26q;t|J@VW$Q6MLBM3>RwAjM!qk&T<@138&KbwLfWk^l7YZ#gbw&)!2} zxlA)cc`1!13|mOOI%-U-mQ^Gk3g&5rF@{EMmson@rp}%I*=tNV&ZhLZ>x)`jn$fKr z@r)^*)a0%>Y^s)NV^9^ztno)Z|Kf93Ty=S+2biH14h7<0K|_Z&RMct5I?Sr7sntSG zq_c`SNu?!zG+~<770QO{Bep6?B*e3{YEjh{u=0{ZDUHQg4GpoO;5cqvrGngYl-5KN zL*hMzrmZuj^YZG_xOYTmS@@zQc>^(;=x+m2u_6)*DPcm9EtsaQ7%((B5cOSr(G5Mm z9HQzGr)M-{P>#80nN+pe6q{9K3;e1TTRE=ajW_;=J|9}``2HKOrf}T)?YnSlVBc+7 z@CSTePhsnV%er3Kq_7?D!*YNCU#;tyNF*6lw?K}({^%puUfP8h@!Tut!!TjhKwuav zRwdYJ6(uB$cx*1trdZ`2^X6G3J|TprQQ<+SZb^gsJKozqRABY-(Zr`-kL!D&rxNxmY?F`{sk-rs zE}!?D3;TnWvM7U~Cr6PZ3toIoGx6raN**d!=hgXekJ~Ju}y@#@BUL) z)I1DDVr3UJyK2n9g)zmDFi?WtDp{oJPgr-)hfIwJddK_P=hYiMbxnwd(y$J_rmCF^ z6!E}CSb&LIJw6`nqgt4xgRFHb+&zGFMA0>h>}==cIIgy~eaXevBx z83UleRkR3WKFq?RCj>3Ltm{!KZi#Jf1XL&w5=&s8G>nKMSF(h5lWHr~baoRltcmsV z@xnJMSAbE)s1n6OKQ&~bvjZjttN39rWY$L+1EV1zt(3XJk46ZsL!&hU0#W=mltWM~ zAt$@})G13a=|=I8_^=s&v7A`gw`?jN0%Lj6s%chMc@C#0*PAnAtzlp$5@nc*5Geia zUAMKp@VetwVfx(&5ke#T_v5lMmhaw^m!3QJtHGiattq`^ZnYTE`S+fFs!fZF{Mb7f z|3p@}$+GG&e@_T%$Q29{@4QS0ih3IHx;dI?q{inT1}xBbvGI*43zCimS5`D^c>`2O zGvfJaY6NZ=nD>tgoT`jXscc|aQyD^EBksFO^dQS&lhkVDM(q&Za zT5!i5VL=K(A%RIjm07`)QRJ1;zR zd8dY&tyhH=gGN0R{#04X_IeFljT$?}2<^YPP0n9l>FGx^7TLOPTHAJ=!eMgP4Nv#^ zY=lCZW1?kR4-s}I}aaimc}(sN#>G@3NF4aVDP-? zYum8n$i5S3rM~Dtx%09%Er*O+LQRgid*{-;MtMnT=?!yp(m8JAn5khZmZekG0L-2z ztPl)Mqox9@(Vu<(nU0-0XqHK{r(p1w$kM4)U*o*AA)^+c=ST6kYMkAB;N-l>ATdw7f}H-NXJ;36PD|oo-bRm^2&}Zkb2K%Js*!Vf zZQC{y#PWj&_7&tePEX59N>1gHxiJ&Q*Qgw*aj#1}$J?Mh6867p*zhkdx#)Ue!YcZC zki12OAhG#9Ti2f~iDA~0>?L*;QA783?RwGOzpEhR54YX;!1Y%eG!#c&bA(E+BF+2T zvriQ@yQC_H33$}ysIzP+ofk>0`oiXU1ICZ2wv76Ptp*MpTh#JGj!Uh}af>F83GxbM zPY02D<^(!;e>rI~aHJ6-|l$DX5%)R-_pA?%)jEaHQjWb_=?{8dIPG$~QTzsHW z(+fwBU4&fK6dD)hfAPg<9ouxuK-GS3{)|Zq(T|lJY@N$t7aOi^gLb!TCV%3@hNKj( zUW3M5QX2ftS+E#grsfZMs9d;k;ljl)6E>CosfqMaLP6en{*g;N6b5M~6*fu3nU7X-NnnlAx80EpZ|T=+n&KHdEyz?@3lJ~cr+rB_n-aj@!vdz;Vcq(`LWmU@AimC zmY8n})ehr21)*=&%m8C^(+zhsV;vQ|tU{lr3i~6mvZDGIO&GciJ{lIifBoC*cm4KG z>RT~J^n5=nm0Pl9TS+KNv`A4((x3^ed|1|}%6hO_-BxqPER_`5B0LdF+T`U78MQL3 zk;4Zz7B%7qj~a|lhLC^Ls&Bw1_ZvRh8#Od1Hb{%SEKQD=s1xJWS6}XQ;RS(67)$vi zn(|~34eVv;WXBfurq14owf;&~^TOn;{EoA}-Vb{+dh}q9%U-j2H%gkvJb%3N;iCNZ z#g)Z239el_ydZ~5t9QZXz175yeD(RuK(V$QJ^>SOc+cUc^;*95#(N48y`ram(+j&^ zdV7h_tJre!&fOOkwdIoX#>`r55pny5eg>|Ohm_t_v8f)vboeo^EMuWNgdGR-JF~T%hzr-2!E`2-_=*%J!Zsw(~O=twY5<} z-q1lKD=Pvp13UI^2SPP*#sX3ME}LReEvCg}R@`~VRhM7f73YCE&;-;krS)!V%%t63 zXy%(|)0|1b;uh^Wby6}1ee_cMY;NkJ&4G9XFUq`yBvStBLw{_0!3|MLw1SEd7X2|H zWU~k(U)iZ~`d8zIR2Wv{78j+ZHdy}6RzowV5AK-@d};e3#*_d2_ycvCw%dNZ3i#gE zrSt1^T+_Vtb?cT#B%$xnQCwQiv{`du7mn=Q-m+R|ocMqE<;F|(FM4Q1V`u^CC+%!Ql6n1|(Up3hz0^~TDWBx_!tuWH`r>VAW!!RaCJ zl__b-&0DnDx^A1~3oRHw90=Rjo7M-Vs8M#XORJUxN2AyD*vSKRv$?V3N5vFm`Rg`s z=aN!~jvQmsjyW!ya^b>-i(e0Hnn{g8F-&S^Z0gOYAL-bI9k!H{-waCOdW+Bg2YB1AqC;pD(=lqAH&sv$9QD7sZ&w zBA#VU>vBUzE>(bY1P^yCN_pg&k9hj^l9FR}3tJ5uJw;Nh&m7;`Jg?oz{?lnHj-N;e zpL_gXj%&4G)kz{$UezJ{;TN8+P^k=&q<%efZb7}A0~JTAWuaY@uJ69wM?r$?m&y+T zb9m|9ucA~~+>|0?MhtD;rkS5F3kcp07hn6xqp#8wE6b`l+M#Jq?=cfF=fCQ}wXGXG z`szRZI4a&(wwL3whK!!9k%(eNlDI~b#w^v8z`C`wQaO(4HlUUl{$s@RwOA(5w?Qc# z%OZ*B_wBj%nl>*#{|;totAtnago$b*FL?1Y2B|LhX=XJc-WQ*EDwqJG?71z5Wx=zVD-&YJ`-H8vH>{qfVYM zF@wdIw#t6^nHOkg60hsw7VWR=Gia)!gk+(zP1}yIyz)LxTGOizZfIDS>p5y1Zb9)E za@_d2JE|;2B_Z-VLYpzwJ(=sB5Pr)dA~lbUaTtES0Icb^1C5jk+8 zO%k_u`@B8n2Xb;Q*tnqrUi4}_DjmgqH2nl+f(%{Kbye3<%*gNK@4n~$oZPy31zAg1 z&h+v}!K60Iy?8{w`IyQTE$2-tD&>tHSi8PH$H6fAOq>%0R^vO}rFGLUM=YqsoTRX7 z`8woZJgUcZTF4eLDz;tOtl{T>Z((j~D)#klKXmXo!XLV%Rr-+8%X!QhKYn5J^?1*e$G^HNLt=Yf3 zlIfNj5XxYRr@GYuOqH>^9L{}4SIA!@}97t|XvW6Z&bkk{~{3FDR^@6%-U z)UL}K=L{G&4MwwL(~^{AZd-W>s}|wc1Jyg0Oly+Ety{Nr(W;ePYWDg)M=Ps?7W}Fq zAKts4%fE2w#Dyeyv|TFKZ`_Oko+@I=fvwG(w(r${Dk~0E!h7~?oy}#pSh@Kmkt*63 za${%D^JqlYys>CycEJUsCoiS-eWCjGn~xeXSBavws#L!Df>xQm$IV1{SIMESP4fOZ zaE1@JZ**u;KQlY4%o~n~Doc^0 z(IYa}Lor3ocpkN>fc3oLiYq4%9khSr(pIe+9*Ls+iHOlZT+w>?@PDk^x20j58>%9N zYNTT*(bS@{95l_CqD0^+N)EDuGK)wuW@i22!Fw}uILR)Pw7_MZ?-<&9R@93PO1>D- zmrKe>=Q0YpjH7G6F3QgyJZrfZ1`{}adBg0lCND3hK_f-4>X>)&xSn&UNe`0HzRvZt zhK<`BF@YnN68qS#_ukAUr#8vM6q@nV7nQ|mzd+FzjkpGp5DVM7!lGKLBE0m{OP61L zRcU3F%~Gb}J&h)nMfbF-$Bmu5k(S>Vx2VVcqxZBh?uw!7VJ@rj;PJC9;$J*xOg*mY zsXbvTIN&AZ=%y9Zxui}T_NuF=k7}I8adpzU>;@c{S%>3V*3AaC)_>ZN5>dM9f(OU+ zTOwiF{K?>YyvW_zPbb<3vL4emP|3)-|&Z{?{QuD!8NYGGEL!t|Wv zq2q_4`e%)%#CO<~Nm~w)%ImLf^QYfEDG4M(J7cpfc&y{oWuOaqOv5K94*4gSn!;t) z=aRFt)0120VD1)|)^X_4GbRwVsE4r;;7e~j{QIVz?l=;|=Mn}JMJ!#ksVsc;-Zpi) z0n!$iU z$xcyRCHOB>W(v7@4dwV1JEtC!A8 zPvy4l|Ar^g{MHu?9yJG#m>}2{`&%|j?J;E*&P-t6buBW!n!BNdkkZOS#P)XVbj^qf zb2So*$e!HHPNN4dX4HrtYhp@7jFBgwdkjd=yrmn}xKKbMo1#sJY{Axx$BpUHvF+uu zNE8cm-LRe$ixB0t%NKE}nS;iRC93z{%bH(#OE)j$2{G8M3Sx;|;l&-gJ)!6{ZV11w zR*~?Dm;dnFqKoc1B9SPow!@w?{y3Y89=W(7vZ-R56g0hR#*9r-h4?%rL@K+bO``$B zXN4@XWbUZ^`rMuXuo)r;6(S2;=8kNV$?e{~e!vzeTZNL%4KHY@Y2Ee)S z%|&V4@L9{T#hu0bi}w`d6>Zv84n#Dd!)b7O+u8|So#rdIoFc))T{>icF=S-5L1I#+ zsfU}iy`j&r8H9ME;UjhGv>HBiC3QA=iLjwnV{YX9t(gB8^2CoyB5r8keTu2_{Baf**eoXFKNu;jfXMsIT((ey1emqA3gt-jMmzFdfm8o zncU}n)<CZmD3u#HeQKOd2~BcJGy z#l1gb?n&IWh!{Sao7eo4oKi-v6}4|VaOAYw zYzi4>oK3-3_Uu|#FT2U;kqb4aU$bSBX!ZTK-PEG{oyU23&y3NXlem>z*RY&(j8NJJ zFT{q7o1Rp+Xu*%tzMSiq)Mw{OmUG-$pEXGQ6$ zn;WJNnmzvr&`jMx3Ql`Hdn1x!lREVZd-fk{P&s{WyQ{~i>QkF z@`DvX!hF%V08}*UVd6y=@vq-FFC`_dMYGPDj3P%srPgg)%5kahzV`u8si;)erqv~{ zJ^uk1@#9B#aA_IC#!konDb=yIx!LI)_vBljQa@N}`~1{5KkHwGMvxcesynW@_v-ey zghfT%rgFcTNX=QiXNeUT z$0o)LFFe<-L;IMlNHUMTj4efF<$wCoR`t0dqnF8;k$$3OeQw~GMMwssKEsL@w7#V8 zsHvLjA$H{HKfaQi)~ciwm}F?p?9U47z%E`sZ(W4MymLo>%%vr-I&eZ~>RwO3o5Ur5 zvwuNx>`;?}mXk-#4{4H3ca^{(ww_-7u#;xCWKvZhvsVt{qicIsSWLYc$Qn7CJ7LLn(`~A2-q<{YT@td3EM>IYF^N9NJv?@TfD6uJ9aRzslp~#4D3H$v#4CEP~IUodD4vK*mIf$ zAAITx3`Ppw2b3^5k- zH*It6z)>@S3PvL*^Yc3o9KaN4gH~i?%f{T$scWzjP!cY$pZeg-ufS}qT=`92dfJ-R z8<>XHqGhX6>f~(QwJ%1w`Pn?mWm7I(xNz|c25LRos?NHR7@n$%FFyIQW%D++ZCWVE zq{aJ@)pU6^=!&mKtGZuz>2=q1^#uhj?$7|UD|fm2@=GthG$f-ULS=Q3&^#;nM^XMC zd)EOcMUnM;bKYgiIVnmM6%;`vgD9AD)-&gLhVwo>&v0f%0TV$%F`*(k=Nv_H++8+L zp6MLxd#`GyX%_GdoPgB-*DO6XJ=N8(yQ}{7-mCX$Xh}@0hiQ}>)NhiSl7-o8l7zzA zd2{E^r-?H(U~c!_`%sdQcE;%)ONw_-`10$dknTLdHP zO;=r>nw8h0U5Bs|Qq-sx)tfbF1+_J3So=T!da`}%mLGonC3QD4rcR!ao|z_K5)&aW zH+#v7<+#u;6z$!AP@ld7>B>5cqG_A)@eHJK>#a9;>2gLOIlNOW8M<- z&)6*yQxl0?^6^K*)3UOKq+~(J%E)iKw?b6xy}r<@Hmw_t9W#M3x3UeBPRbV^yyxLM zO*^3feTFdXqt6-d3q|}58Z~_9oni1HD#$ofF>&hGwo&M?AkJY%YtEy%5!uLKL8P+hRQdvcLVZD}P#(xcsk3^~(G-&bm+aIF*{bj@o zHEmRD_=lfS)2(seEjI|s$)}utW_fw}(uE6XiYDB0^9p9pnnOd9*nRr;?>}G=<4&5U z(Ku;5CMO362gh*?YK=nZy6)~vlH??C@K0FgdKdyUYCsEx&=|s!TmVyI$FPqq{{b@~Nn0ZlD-StdKp zkR2M`0PdkCGi?Y^h-jrDg=rl`#^g89Lbw5b%2t5L?AX3(=*2^Hn$J2Wi8OeH#ln(V zCb2Q9g5j?!O~j$Ht@x^c#Ue&Usg{W0rHW!Dx`vB7#xo;IP^>noaZ@*lOCBPT2-{&L zfM77l9zymNy*8{c7G>#uZ4e9%a<8D*o1<8^N)uJ%F+Y4iJtH%(sJukM3^umrSh5~Z z(TK?ib()jVG0RGJvK-B7Z13*v>r#^ozW!!GX_*3Ti-<;4*66)9=@!okDC=0LTQqOL zq4Y-wC(&aMywB%z3)!O>q-zk@ty_2T#TUD;8+(9jRKmf*!NGAHfzgtKaX2b<$h7q} z60pMPz)Ij?Hsf{)5AZ1OutJENZaBWf+5^YCV~rP3+rhcXfN`HDXidIsnd5CUDZH5KiSmgO+62)~YrA*w|&bSWz9Shb1ST#RbeQV}y& z4P(0%&vJqeGMMc*A`vyXeeK-5+Bxr!9)mO>5F$>nUY(4m{{10ahHu(2AQuD^#MnVy zmSC`^ioZ~0h~*Wb@iT)vHco8QIDO{#tNcDfBX=1A6~m89qNb@b50as)pRl>YB zVJX6v;QPYWG&P~A8LDE~C|8Xx35Zo&Mlejdm7^JSNgAFSepYT!1D`2QpEl|5e}9~D zOAAePc1(&=)fTqRFf_D&Qfr{9NT^qFNFWxYYzkLM2C5z4EwYS`NYQ9Dp?W9HjA*!k zl2~yyl$YOH>`u9aiX^C1`~jq!BAby&EEEEYVkl}Dc+~bC8|&52A2)uqq97ZMgyrn4 z!Y7}4*2D}u2Chv_SkvIjVxr3GiJ`tx1J(+Y0Al-gZChKA*Ld8g)6mRInUX@icv$r7RCmrcQbrBb-(P5joz)O$c0#OTvcKe>4EQrnKlYCzSD z?yyUs4A53JAX*wxF-4zlTQH>3On-XVP%v?ztwk&Lp?*o%fYC7DGs+C2#0h^tW3rHv znj)k&%r8hu5C7ytQ* zg|R72708Kc>+#%qwit`Bv~Gru1kD06sLG~oPzEJSis+zjO0``5m_ajGI~vXJr^ItI zYM6M?Nw}1wE=~+S{@6paX3a276eNfde!~=%k`#X=*v$fhV57#4L`04977Z@P)I1T? zX?QWlrozDDh*4S@!~DXO@PdSyg^N7^?0HDkY%y{bjYgpjnrcg;p71EL6KRHl)Psj(0$R?(OprsgJ4w*VBX0am1xYF56+VY<6pPV2pNKLiHFnP1bC~z9`a$In-W7y{A0wM<4N6G|2qt;gDcB zz?{f5V)*5N8VpflWMZ5yhln9`R<<15h?JRfC9_4@k__#0n6-+g?nOUk3_TwvMiiKt zXqj~2M$M9_QZ7LaV}>rpa0!3`^eqx4QL#$5LoD1V+$&j%F)C$aBq*eyG%l7wo!V@w zVnLl!I2ytvEefR~xXeH|kq1I!w1^yvhmy2OC<@%mh+0Y{8o(uZ;RvNJX53Yd5D$}~ zrY`FFi$zQKp%HO{SZ&Y~ocz5syZZJ$qi= zBU>QA*c3*51vX@0v<=F-dwt_DhkrJ^0EMR?ZZ`kCN*)!oxN@3NO%jOu@2*7 ziY`}UE@?dim!(kqscpyYy`n71s^p+Bflb0`br2lA3c{|MS)bjOdmlM>UO*BSa42z~ zf0ymUSFDhU;*k1Y4h{|uj^hYSrQ?1CP6C6)A^8up{kdZwP@rg(xedqZ6Z{Z%V1RIc z&UU;;Jw}RPh+*}3byKj<2A8U;D)%f*CB?>BuO)@~M7f8-F*WQa-s|#K!c2J7=^QIW zl4Bx|Qe=Z3iAEXtZ6p$6j0H#Am}s%k>69&m4WABNiL#NHCG8895xPhpYru$AA}#@Q zFw7QB@2A1YPKQ{cDeSYSzv#F?^=w1|?NV5Hj8aH(M|j28p4lj4jfs>u}=GA?Qe zlu+r1S4R^IGD-vcwuM@hU^E5Q$m3Ny)K*ht3$XVfm%r6To_a-8mAVz?Z^h>Ewl|bYVr(?E>(Xy+|@8%*HD>~gjUvlAYsRSQ)W9UA!fXnAI>TdK&;k5}VyKxb@f2Ssm;~MX0l!y=7M%z|u7uAOv@JcL?ql z90mq=cXto&?(WVY!QBbL-Q6JsclSHzoag-mw?E9cS*vGFch|06ReSRln!>qnEU|qb z=0QLEGR*HtYLfT+qI5MZu(%c7ObLpXJ3udH09HaNh5$`OFcr|GsVU=WKp-9;Rb)`M zMye-{p)Z$Q?!os>8Nh-lh6FRia#**6nYQ;Mm;9uLQ0Ku2?6VC$8I;O8it}4{bRe#w z4G;#Ra5AQ7H;F*&4P}*8;>NnsIO0Ocu^$IuHX`zmw7P1M!7EB~44h-UFYN0Lv|)U! zDJntx@jf7#i*ogqRa7q~!Zgb$t29BA{?=XjxJcHND9PIB8@^Xf#t@^g_?+cUd)uUH z>g=N4yek}RWTmWJsG0FUa*Z8xq)WP|Q@3^V0>adC_Ra2DB1wb6xI(87RbD zCjREkQ=TC#HMdwap74SD1Sg$BNv-M-tqeMo1vPZ!zDf5{-Zh1a@C-eD{W0|tHX=~X zK6IOE)M~Ta-&&_rVxPf0h9`tu$aK;`+g-?A=@qBfesu{Ee)2 zO(IEL9Gx|G+l#-LFkci2;Ocg@pok8q;Jf^Euj?#AT~iD;{&^mtUyVc1E^RD1ed2`T zo;@ai*x}aBZ=XBSJIDb4Zxzdd{k@o%bvTi@>-b`dCYOFy4Zkq+n1ht+Bt9BsUiuI5 z*cal&j4_c;&Q)sBR`6nc@|#Bo0QopP?rs{~nH77M^tFk)h#}L>rnCf(E=ZB4QT-JA ze3y{1lk7wKk)JiDCia9H_lT&eX|^PaoK z!axF<8e`_Qo4NKow5)sd5q}&SI}v9Dw!j)KDNBPgM34c8$2Cm<&>nO-d_5~U1S-oN zv#}C5>E7er$)K@vR#&9q{!+X(bN%59k1+4lo{v zl-H#|8@T_NGvVI$eW*D9Rm|@eGz#EI^x^l8N}%d`U+Y}p)h3TK)$9m8-C+Tbi&j=q z>h6I00%|SAhq}U(N{W*t2Kx8_6AjlST@ZxUe~+|SF6I-?76qqI8BG`IlB7$e*9|2( zKEF3PqGc^hrS63crbU#J`W77=p?$Lj6jx?A2B6`FhsH(Wi8occF$D|_MM((9jgQzq zY~BHnV8edKQmx3T+&RV@@^qY*n3u)je{dpjgeu7tHZSN~DJ7Y+F~ytUrTmy3U>&%O zR`e4knkMv}+NhY+;f#x7RT7yqq|~kdSjlbJx7T~+z9ecCT<E*=OIszc;1OrA~%)3j37x?onkGx z)ipsL+vz`-!dS{WlbZT6Zi&*P1$j|X-N*bqsbn3zleiRu(75 z$3Tht;Q1UiEO=9l-2Q@+5?rxxD|mgK3`zEgfidQeySM9n1z1T}Y?24q`ilN7w!<%? zZqi(4-aM)2AOBcr_ICceo@%e+s{cVimG_GloBWpPPZRAa^56I=m7WHqaE_E5fXn|( zF!(h%(QGrOI;%X(5GlPVj?jJmAx%cbq=%{uy&G7j-=8v_bm_otFx$Lt7^8(KqVs?$%S*iwwP?z5X&mZTio zBv7(Wd*O!rVnwpLSYVHETkvH5X-^AO8dhFgJq- zHij5Y3zEZDmsP_*2dn*Vzvw&&lMID+vo?d3`NQAe6FBCPR%^LNt%B;D93rV<;Nv|T zM>GHdQWd<(MNtmXUd?oKzO~-={S@Qaz^2b#a@e4wJUl$WqNJf&u2H+}_K;Hi9-K)+ z^7`uA{fdYff;h=XZhIn4Ci2Vr2=s9}^xs3(r{p4cr%ZSICHAXZkGiYsp911hrH{)R zooQSBX_7T||AVfV`>Y9rE+J_#>B4MRE!NrKetjQ4re1JqnIV7;>r$7wWU2SPKApnY z@OZAh8A0di7nSh~V)NdFUwW6|0}LX2%~!Ad>JvVy*2?T;{no`GH~vVfo{#C_>=r@qe`DthjcXxk zD&fa0vqcUn^Bv&av0oq8PG`gAE<^Lw;i=T0uoia zQ%{;j((yYwLGW(1;j@`~EGI)xDx1)h7R-;pMJy8YT#Rc$y1DTCTS33b#vx2LR~hRa z`j-zY(NPY|=5UGR^IFqTir>8o13qg?zZ=;n|LbT=YAwZU8r%Di&{{o!lwBW0; zpfHUW?hui#zQ4k#Ed~OSejHC!2t!&RNK&CQ@--`cY!iF;#oNW(8?Y*jSlx`l7)U|R z5a)(!lgk(Q+^)$LZY}TQM2I^})77^KyB#8l-ee|oXIMA=ZTk18tAc%}s8o8jrCQkH zZ_dM%RI-{f7KQi8lFjEq*)K~?C&AqV3w=beH57w(x3gOH8g!`|)%M4en7sZx zte#G!72f&Nm=J!UV3XPK$-=^0eLnEd!|9U4Aw}=jo_j*gF%AjD@cUKvohsq~R&OE@ z!s#lUrAxW0<1ALnfeACDgmU*4Pv!OQRA;8(dI(SACn=oNWq+pl)B#1PS!H z#jZkY!1ue^j9)BrT}Eo%;BmEFFu2=2O4NJN@AC8D%=wOc#cAX8Q1{r|pc+#k-!xN< zvXPygnE&1M01l64acr~MZSQ8$z#OwlzpkNy9MfpAM!SXQm;FA9q%XkLAehl;;nBs3 zD2w=;XzJ$90{5^SXgS1B<>N;PkJ>oMM~~rr;e>uqg&`m>aisDu#(Wn}I-xp6KziJkA=VxR<YbKCOOw@uF1o8UYOcmk z=k}&C%>V7XbhSuvOHe|u#q@U|juy6vzuU-f+6s|m@skCshnarnjK7b^ppRkOvD2Wz zRZK7k2WH`F`@oa=#-Yn1wqxQb&iGWLOBcOe7DOT|T~<&-5o~|EypZ@%+M={y|@FE7I3BQ>A!HV}vaBxy@j&mC? zOnJW7di;Pp`UODb?iXchsWlE45j~Napi{q`o5+MEIce+Mr0_)$f~aI=f>!6~F9#%* z@fKHmwa-#C14DwMRBwFQ3x>;lSEK=K zgDw0g|R6hgfSiLWtQ!Y5^dBJ4!_)P2*-`N>#kQF;Rz#V3BYfH2;&Qtoy`m5d zk&$d6kK>I0cAjW~#VTHPHFqg&myye1we$x!>)3XEmMGei`XA=QDK^|QAIC^O+jHlG z9@r}5MmKHtJ4mv&^LEM$s9-L09x!9X=ql%Qrt|V%vb4GynB>-Y=tD!fsMFO0XmXuL z*3kxg+|e%d>oVEsGrw;tB`Xn_zeMV)cRC#|OZmkQ{D`h&xm0X(8a=}-6w$(K0wktZ zi*I(AKVXv8zNX7UrLN;}%AiRif5P@l@Xk#!5j5WL_uP(RW`2G5QnD90ofg)ER8AC4 zv=T;kSX0#G@-Dzg1EeM<5o?4< zuM^zsfK2e6l7?BYA%G_fySgSd`~Cr@*!1L%(u&cV_8)g&mYv=2c8gXUZ$P&DxmW|8 zwzwP1!|%9mDy`LLl9(r4WL7s>Y$_0~j)0B3J-~WK!&=+ApSoK3{jIYc*M#?fhNK_F zSd{jHHe1Y}2mc3TCRb{^I`*e@)?4^_F(1@k$99XS4IuozbG+THvlJT~P|o}X%$pKY z>V5jvL(TQtpVQXol#~7SdnFN{5qV!8PCqMj%B})oNFJnEmJ!G8$r*;gV$<{U^CaG9 ztmuc7fA^x9I4n_Rhi|vMFX4jf+)mZipg|x#-}^-%fqNd8S)uKjtuLUj_mlUV z3^pA?6am7m{De68PKn>O`b6)A=#m^6zveV`rfsN$2;C zA&=qlA@D^a+nKp*RB(T8r-i4<=UVMIUoQPW`3uP|`gd8HF#KA*AMLTXUw6YvQ0wAfXPe-pXzkXr55R&JavyXy{qs39@;Hm&s=d^yRE|6MtjiU|+} z7v$)0dS1ta7I{CtSdKj0w00dG*ISsFv^mBnC-r;%swGB7X7@w?GLkV#Ndus{8Y~{= zPZCUcI=bxU6;`$IPM2%BE!~Ay$!5htsSOPcVAXqAI1bC1g08L&U@v*p9@y_ICpkHI zn+h(LfV-w_KM5@;@Nqosa%Q6M-Ot8g&A`IuOgt+WbGh#GrR-hG8EI10bUk;xgbwv; z?Rs-@@91jn z(0oGikMbyYhtq|cYIqi+R5s$Q6{@_7STk$$tAAn(9I4_%3C75s4?@G4@m zV?r*=yg0l2B0k^1*{^DB9PxY`T%}&6>7-r89vq0$sUjzw6L9IPrnD!v?#xjs~~=4zFhC*L%L!s-_UdB50Tbci55msDA=VnBCSS zLj?gtb)q{GUw`IKtcjft-diMEa-x^DJtNX5n-*9+b<>R+sbjsRy;Kn}YOtMvSe80Y z5G0I*_i96Y1<>s1e{J-qL~LJLRI;OM#0~c8mRTm-_V#8yr?#t(xx1nwv-A(eX3J-? zP3oaq=zM1D4E!$@aI&Sqj%JnY(?lwy$8YJs(7OcoK{=w7fGFBRzn_An?yAAo+{(~T{ z1)EX?yYyACZgd0#tIMn6hPD3eXp~!En4s~5ii(u?C7yq=G3FTb$I=x*aUJ^rw|Els&+2UW-z?Q2FMcQSLJ$zg|3%5k06&pH7G z5XUguPz{I4{_Ue0-U5|1P&3PUUZ150Oc^KZevSFZT5LgkW)ejQ0|i)}c!4v9&>CFL z6+=&u6e(vpM*kL-==qe3!Hon zJ|X9K8Zsa;N&YX(0p>ZD_v>s=Q2O7PZO5DlP~(p-DAzC^^Y{$&S@?G@kyNMt58J^E zCx*WNY8Cc`55u<|6S}JNY!Nx}kCQra0b3D zz7FBi;Zs%+xm2#a-WkzQ5kHzE^i@*e1e1+q{#j5fvfFmdr6!9GyA8wxJw5N-PYYu4CA!|tW}10V8oi~gy^%n?9H7(xB0+(p-zHc( z`6PX_G%m(|?CPkvYoZdYyt>O>`jgT3h#RZ*?%i(_leg-VclrOm7`AlUJVc_hvffv1RLCTVLNLEJf*6 zdbgtf)m9|P~@o z?Su)Tr^Sfv@)Og?^i`_UUr=Aomk}thHHRp}mp{N82!+cPX1~3*x{nMS8yf>xp5jS_ zKlbB=iTT~nJmU-o(hdBc-ygU8r$!Pfgx~MxYkOYcKm4xxVE8>QzKRZtk5z!TH0%^; z$kOI~061C_dj6ZtYBEH4{&DX)2sYDXj5m*GRqMe%{tD5k36>teTzBYwzv#S-ii!$A zwB7FU#TjPaE6ewTEKE&L$HBqTP*wdBnZ;%{=6%@>6WYMYzS?0M)e8iN&tcMxn}Ney zUj+!FEZQjH&$rvz3xjx#|Fp)}Ya)92an)&Wn0o~oZFT(wTXw8>dN3D$4d4g918Af6 zv>&N~SsZRBs;IfYxLWPjH-#%NQ-G~v*j}yupJRmtegYX7Yu65sBqsc?Hqw~M?*>#t zS=Vbh_*Cw1G4=#UJrdllzxj6Rw!dBuHc(UH=d{6V3v&$`hq`wOY<+v7oAt7cJ#HC` zGzit(f5I1SxsrW^(M)y;C_s*Vf{4WSLVk!M*Uy#;0JS=~Zf_Zg73G?DscpSHB5aev zv|gf4E5v&HmWNlGbG`}>O(Q)1DPfWmppQG}iqwmHd}<3hzK)FE`pl^R<*567R@?jU z-FahNn5^D-Fsioq!wc*|bp{^idz89*yPa+%qL#eicGK*@Q(KOco+M19?W{MK%DPSUcoAiXAH zn6}T<*S`zbZ2MxP(};PN;^W0w5cO1Qc|4$wVPXvYP`_nEgGm!%-}pe%{&hSsqlGlX z_B7P6>z~>p8I7~n#@iBhI4B$3K)ZQ`Doe)qfePc0iKp+p$40f1?z+aJq-;!nHiBQwCyj#6f&HOU0D+xK->uC9(*h&J zcSb5jK@G1_RxLrNSgk*SzI>GV4kA&#O9KgSMhVeVyK1gh3 z=63pgqYl1${8ihd-QjAbriOKUzT5ZhlT?>$@b7eq*I6tAVJ`$S(x2lVEk^~EI4>nF zt>-EJOH3S`@P4CKRIr}j`|j@}T3C#KL{-e%U`$Vw@1v}(4LA}VF_~V!sMA;A^O50p<&q7XS61I5I~eHPIx0X1e)MMaT2(LN+Xpofa<#uk+0TWny$nYbNn)j}S&AMdx znbOQDE|B2eGPA>qHrzyox>L0zNzr8CYhVU?UB%aJ_5j?zgOMlpP<>K$d<1dDCCBD( z^`$J1+O#OLS+t=dq!6nS7(xVXrP$Hm>ivA2jj4qIAgmM)cYmVDm8grP(fxcN>%!6J zYTPzMt>O6dV?7P;@1sQx02th3kHa`cK`Ygz|eEBjzPT&JT1a(2-qXU?aa2J zwh53y@1R~Lh&m4_5PCgpyzF_6>t-Id-kCR;0qzFiBBxhcqYBX{A@)}-!eTs;Y2fX=Lxv#;*~nX0O!P(*ta%qrNSqEQSH{Emc(`(Kt<< zn-QV$;|^FN*3KFj9lVhTLAdB<)bs7E4Dk|%D-xTkIY7MfFsPa@+&tKa1Xq7ngMF(WU51z=_jp7JC?1D$WLJ-nLQjP{r* zEnE}2E#7yzLXR<{B_*t%u!)SOBV6;`Y)H7a^_IAPHnhgHn9kJ>XU^7jbbk#&XuSe> z_P=a{bYp3iQcub$gC-bNL48EZ*Ysv8_ZV1o^tvU4{#6<9$XO1w4I@)3H7AZ9#_(+7 zYSCyQxF#8`a>!=GBv_4HLlvjZ1%pUnJ)S|V=(69itIB_39ymz{r+QsPLT?Gvpifes z>=%Z@Z>bH)a`t~9^QN=89p*}8stEPJuNa{XZ9JI}>Oc7iEgc3_W%#&XZV4Lw`I@m5 zxKS{phjqGmLqzaI#Z`K0#Fs#S_C?H1Zj&`Y6N3F~P{Cec&yP|u4niN@XkyX6YU*rq zPC|2Z5TW~2Tez}ufyPmVVAl5n_gUp3&`LqoaZ*jBZNhv3(iIjJ5KTorVQ2@{YH&3x zP+%8l6|-U%vBRMdG$a%NEVM$nH+0tJPO3B0s>wsjvQzBFaLTwD=EyjRh#OgGGhee+ zh{u3iPyMD6pcMnNQb|Z}lC%&T;&rTOh&jZ21yEHh^K}aXuEGE~{rD9%TDIrHX-a$D z&NH0GskaQl=Plz~u@3%hB32PGf<0iv5ytLY9(AUwY^iru2wdms$1LFsp@*aJQwwbt zK28sGm2_hDms!Z)?1jHc*eU(->M;u>Cg#EkmljgWCswLT2NsP24NK|NQFVge3*^XC z5XGvqzDlh&Ue&<$+yJz;=40fyDyZ z04Scq7m6L*lUn#_a|CCkgDY*YX%Lt}(O_XETkyytJdtD%yQ1N~&j^)G2wDaK z0DveYSM~Zn3pwY8x&9NEFbxg z>gdcp`67TsKYn$6j5^5=hACA+v}XoN0%3-TNt3=^aWfP`m~?HGr} zzbqGFQf=YN7JJdm->i^Shm2+bv>JfFOf~^<_zmmcdgJR7$P}DVSO!quCu0 zE~GEeeVO2>A{p5{>G@Ka7U}qG|LA0~-m45_hP=-%)<6c?3RJQslYa_$rd6W|LX~!0R zk}LU^UnWHqg+$;{f?$V-%S+W%ulkU~i>0F`=#4}BvEk5_OOvCdF*)`5?te9KsNAp; zsp1klQ|c-Iae)77oKX{dQyYr^E__z^;lJ8o7ILzJ!aa67`{@zfSkX&a1%)vrQ9KKc zfbH{qkbZD*a23Uxv#pfkp;>Uv)Tf8I{9*D z^xlT@)JZ2hH!j5V-}#72aN$8817*S&E7{$)I;}3wmsPOV}ZhQOYNoqarYmn1;g^5i) zZXF$s-?@8G)f${y)+FUVOJ1gB=r2N(vGNepnIUWPR8HJ%WBDg1ZntjhE4=C~PMcd7 zr5LQrLY8_;<8ZueNM$S|7y|N}@8hsv`{59n6H7CUyq27cWYso48ETqMrh`M$)DYGK zVz18`Y79P`+)f|W((Eb>XgR930jSQ6>`C*`WEd?Am}C`k3Ca%n!hc+i)khSJy7eSBdqOl*nm6g`u zpt$XG3v_Z~E!0cnpCNG;eYfDcul+g&`T#f@e60;?Eh;kp69NZTk%g8&AjSjJJjm?n zI^lrjaS`;N?hohd+|~=UM~SfK(U=mv!~<@cTvX#CS`YoDUm;(K{f>H4N=yrspLyM& z$$pXc$}2aJQo;qpAg7u<>D)=LPRrOXuhQ+>5nIr~*Qs_cs~TF=(wg}qK*9Cf83sbZi+j7I0Fg!g5KrK}1XOiZy#Zasb*A?=l z(FP)q3@Z0qaTZmyetC z&0@o`o$e~HDKa*sN?Jy?V|QKw^9;>|OQzO8V{AV6mSwpO?Ir&l6V-4SD$&rU0|z&U zcHp*K|1F8+dZV;CcE+DYQ`4pq8rlL%RmY|^i-;+;7q>4vi|4J%95%FyXzaP|%F=e` z@NMODtg`KW;3{*2zYY9g6#2ZMA@O$o@!2~|CtIgaB!bEo06aJ>DWjh4p5PEEXENnv zLR(BKAYo9V7-}gEbu?73KF#;m0V!z8p<}RdaD%7v(-~|xb(!{6S7YHWp%Xqd`T-m_?p7IcUG>YB*rD~mCFj~^*1E;KpR9jm^r=^Z(_oBTe*$sBCzM0$(06@dc#X?KiN%;su z1S8(MM-32w*1&!vOmrWMiH(uBXFJ$^KETPI!aKwH^jhu7W#l(CksEds#X^vaQ5fi` z8`Juh7j7^;(tgf)LuW)S zn-$zaI&8BnCN$;=-2rI?#gVS9$RwGN0TJFItAs*c&iuv1ej_O(fxKEE>buzM^0k#} zZV;Q%30)T^ObuT^i!_Kzwypv-6-upr3z805)THQ2 zlPk4?h8QQBRY!Cc{?HvhevnadS+NZXpGMSo?^I`z?&(YwTZYAm3R(`|d5a`u9rc`uKi)}HKEl0o4 zQzF$!$)Ngfb>p9ODujG+LVjJvL$>%YHFoPQzTgOOx>W75FVm5zulYHRiz&<6kMsC0 z;>hKu8{D4Q=<9yT0W>+mT*>5fJ89kaBY^!HXO0msSf_=1s=0w&5*81`{`c9ZClZ6^ z<7q!$u7q<=o9LE@FLPCab6wdWS7!CzNE=BYD z3mZo1SIuu(^mI~#&EK%m=@(sh>H@-yAOkS))ukmB9HMz3iq2Xh{-qa zWl%O;-`K}02o-xr%Ft7d^#lO5(3Qj%5OOi2C8?ruAZ!8Oe;zH_z}qZus$s>F!Ni~; zEaMi5C>BEjs_>s2|BO$9F03XhkY$RDM1Z@$9J=1#5NcV=P?+(7c$ z5FB%I1BrFI7l63pbbKSKhKdeZL)}l8e|A&wWeWMo^S=#QJe$^j76mp|?4w=n{btx_ zgW&$ojreFwLx>C}%lyD)L#f8pVM^qRF>^BH4LX8iIk3YX3HUJrKUS-(HLQ0}*K?m{ zy>v~=-Pc116?A`&6eKh8Mb@)`q9TNcMqihWjTiZu@#i|V zUfE?$__RBNB$knSJPjXj4Lt9~$QnuMq%ye9J8!4)SIS(rHwPu&zdcq-ObUqZ$LTS5 zS)biLHlv5smQCD}l{vvGf(rbl!CIOQz5XP~H+*gst!ma>q6d-1dLDyV6{6N6?vn1H zgcQaRrMAf5pcI4};+494D?irV7`^sgP#{sq{pDw)LeZ4tP;#q59t~`1-%Kou5Lt;? zDO|;~Xr+ULlbodS(+ZNuKLjhX{7znIUx0GEaD`JT5xvTk)hYkYXj8rJ3?(pGaGN0Sq&n_S|imX=71 z%siijJRl|Q%7i?p4h<&Bo_i^u_xUM+ZnRI$om^jCg(ze{Wp8N=wCqhhoF zHS;x3-ZID6rFeQGMyq}?X{N#|Z~HFcowLbA!QRP3_(fkEt4J2p?Q_^c04|-^`L8rT zrrlP##3^wwS18bv0~kraYYTO6sxAHHul;KGaUs=j5~ zS%Walf7#Xl^0{vf>FEQ;-}^W$J>F98YHFF1W|LW*m)(zfofk1Q2#$RVYn+&C`p(cz z@Z#_=6ZyiQVA?9ECQ<@DPMo}^Jf6h&$=^t2*U?I8Hf=5Rrxjg=jObcIUwWivQ6Qag z^D}F_xpMRKA#bK=HD;kZdQ3h`1hrX-Dd*ABBe`{Ta3EcW>!vmtZ<+qNd8VkfoyZ7! zQs@RKI~ow#{u)$s@2u_iMmK<6Mlb;9D*U>zF=RL6twkRmkK=m2RsZuahtDpsj>B%f zsnYrqOEBEsaz%vZAybeKV)FO3V6jL#LQP8R#AODZz{>=KAAZJ{i^VyTo@uPP{8z)2 zc)heJlOi)VZtLqXo9|)UTqD2o<*k5T_^J!0H}ToxG;_B>_UF^Yin_63e7cIDOTvYU z0;P3i3GB!Mqp6?oiR(L}-+L~;kul+vOK2y}6sha`0p^O-Y<9MUz0M~m*>0!sTzeAo zlasO&MSnu(nC-sAI_};7(pVTDr>oK<2}w;)MYd%jKptVz#VN7{{A#mNJp7Y38R9h= zQnDdWlj~!2ID|Cw*qf#})8kUhAdZ?uQ7Dsg0!JbFv_V|fB##AO@ci7oc6T8&G1DTU za!as))!?E`r-K3C5MZgt^JH!vwDI$B@|`c2^Qo)w5u3w0DK*r#Qa+1icb!B#ZwV+p z1q1(;ggq&wGv7}z;-Pnp<^n$}DSz{_!A2z{W=-oEPwV)2Rm+iJnORS=DHrFFuYHNm zLUrf8LDg

    `^Y+miuyTiAE(PLKgu_s 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

    }4ZN?%Ah^u2^EJlGOut&x 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%0DC*`=2Aki!?8#RVa^ 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

    iSZF=alREooU1x>OJf7EXhSUXF0f00 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

    B;_}+EByD3HVx1ZXh$_D-`z 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%0A-)Q5|l8K2X+ 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 yrf=^_OO&{Jl*sU8^Hierag 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

  • __OWvH%{U!9(h_01Upzq$0O{VHg{Wy+DMafH?#h6RG0@ zFrWc(T1aw%os>APAYKe<8~}{4-UEMJDpE}eG_Y6@0x*P!h2ao_!N!dgP6CWZSnsKz zOJnM`03K=w1F7Z$Fbt0*KPH?+i1GuanYbr2m^2LMC!6o)|o1}g~%i(w=LV==G*Sp*o1xbH(qDh^@XBN|*%I{=R)D;AHA z&gQ~2c%=1|!QwFqb05**k=g+P3XrFc(D&FN`@g_QbC3-oP=w_IG$5dkFpLTd7;*0g z7?(;~UjT-VvckM@VKxZC5DoHP!RBJIl!WSX$a(|=V5ITPq4LlXPM|KLfgQ^PU{vTe zGJhN}l?cx*z=N1S!s`ZtagYzU!1oXh6dpnlhT#$RGJvr;gf#+#k@hIq;n53f0uA6s z2nKaIRAkH$z@tJ`5-L&e1Q_P=M!+NLn5Z3GQahk43G)bOFnC106TwL9E*D~#2(Je~ z1C~ExI{=TUXTvHE8!NGGa5NybmrX_IR)Mx58Z>e{*jNxX0X!|9D#Rbq!HD`01e(FZ zC<)*pS+R-j06aQz-C$B#F#Cx#pe~6Q7MF1TKr}eScEIBh-acH9;;AFABX)6vl&KN5XRf=)wvuEN4Umi$_GL%OU7tP#4-pn1cW#t&?z26NQ5C%D*;A4>mnMYeV+-|17v0ustfx9 z@vH{w0qD>qJS=#ZKwU(GwC_V*I(ic+fCuIp&^(3v1A~#qE(i84Vc8=Zq2bZ+(GkI(V zX)WQwRzd0yXdJ0+pze~!6_>Q{gJF(C+_zw*1K|s|4Z(=#0JI_!&H<<$qm-5^ZA$yq&pJfdA0GyyE~u>gOF25H|%cqBQ~VW|_|2Z3icm$;sSg$ynagk*qd zkoJ9qN1XdCXfJ6V0gN<{5YJ>9q^D5GrEQr;sx-CeF=*ni+E-N7|E84zDLymP+fu@81YQf zH_-QpXK`3vNap|qBhFPe4{p&2dlbMxDHLuS!Xxw%;)SG_pt{5{36?Z45D~uz#(zS; zalj%-)KvgRT>s!w4MLg=%O3GU(qB+r;$F*vs~v(a3g3gz5!PJ}bO(tS=yJkZ3^%*b zZDd|Z>lNU^;Z#@#a63cVyAh1IcLR*PcZ127xIQC1;u;3GJxt=2{vgAk1*~LFGT$cyNM>uOMsEi_85#X&*6RrmRR9&ieSY1 zS_A_Fg0TF67or}9)g{&pvcyPuh$OV}qiE|%dScD8g8XybCH>1bccZ^gYnz32#4W=mwH-Rzom0so&ti5e&be3O<1@TCj+`z%ogCPXjR0`4|4u18JS4 zLDPt9CyYLVeg(X6AcQ-C7q}NEowv{hwLp74+$`ZwXt|-kk!fVV!xp_?Q#N#VhS>3F zWT43X%bYelLk@Vra#|EK$|6lorVey0gQo!(KH6FuT3l@!7){}25>*S1uUe`S|2qnL zItuSMHMiJWZ*%u_q$sm>bU*+st~zXH3{6dSI8#Ea*xH&}Nz9t1y-G*o{{eg>1LFVy diff --git a/doc/user/0001-plist.patch b/doc/user/0001-plist.patch new file mode 100644 index 0000000..73ca1ad --- /dev/null +++ b/doc/user/0001-plist.patch @@ -0,0 +1,33 @@ +--- libccid_Info.plist_org 2023-10-17 10:50:56.030148081 +0200 ++++ libccid_Info.plist_test 2024-01-16 15:11:54.798891142 +0100 +@@ -462,6 +462,8 @@ + 0x2D25 + 0x2C97 + 0x2C97 ++ 0x2C97 ++ 0x2C97 + 0x17EF + 0x17EF + 0x17EF +@@ -1005,8 +1007,10 @@ + 0x43A9 + 0x0000 + 0x0001 +- 0x0001 +- 0x0004 ++ 0x1009 ++ 0x4009 ++ 0x5009 ++ 0x6009 + 0x6007 + 0x6055 + 0x6111 +@@ -1552,6 +1556,8 @@ + KRONEGGER Micro Core Platform + Ledger Nano S + Ledger Nano X ++ Ledger Nano S Plus ++ Ledger Stax + Lenovo Lenovo USB Smartcard Keyboard + Lenovo Lenovo USB Smartcard Keyboard + Lenovo Lenovo Smartcard Wired Keyboard II diff --git a/doc/user/blue-app-openpgp-card.pdf b/doc/user/app-openpgp.pdf similarity index 77% rename from doc/user/blue-app-openpgp-card.pdf rename to doc/user/app-openpgp.pdf index 614ae0847263f1321b44e6c9a8d31d39099c4c02..c35c99c7d5980240c73716d4c6c678a2afdf60e3 100644 GIT binary patch delta 289574 zcmagFWprK3t|n?`W~P{#DQ0Glnc0q+c{*lhW@d=lF*7qeW~P{9rq15?oqhYfd%F8a zjiFIXC4DNb($rLG?vF|@e3v1oP!f}1U}5BdqnKG3T!G^zVJ5LRwua;5gJY62v$Jrq zBw^!9o`RwU^b+Ll*O(DPF5fYEReHoC>jk{enkmkYjv`I^&`>afqV0j`a}JT%62|Z2uzvau0hdqZ>RkI6Es_Vkszl zayJwdwyM05^H&lUjz11m`NwxGT&axdNNiAdinefqd5Pbk{S)ILvGDyrr} zZ*o~U{{Mmz!MM5q_@54#XOY!WCKxi(6ORa-S(S#vJW(N^5udF|)+|!(77Eq=?&5&T zo1!i@ApIt=A^Uk{PjaxSNndK}t(33(TH&E%nrD#N>3m2nC&gama)yrC zs4oZ>ol-9C|3;WqBm&XpX;LM2pT#uj($i8HKa(Q)=!BQAdt((015r9v z#QkI3zX|$>|Gy1Lhx&WLzbyNYg8u0Le;}lc4m}xRPwe^a3Ji3nbKD=NOKir54&{K9 z*#GU^f9?8T9{79L|38o?OmY_KXVz(e9pJ{OEf;mk2g$!!|F-8ZB!A)ghv7du z|Bvs1zd`>oF?i70s!1of{I!Fy;LxYU^N`bo;Bn6vvt%a^LAf$M-0F#U=o@sujGVBw zg-IK1C;0#4zx_x1i9xzw@O!5MXUWR)-MaQb z4(`MrRSYn8j^r6A8bC+Zd5sgL>qW!CslZ$&!XpmiXX4&K3?7x^r>1O$IdFzvRw|59 zQkwDihe0$FdYOuY)VZPE!6ZXNP`~ySdv{RJrG=ZSL~unxgIJ{JVIxb@Q#3rouP#Qx zD{#ISP6XP8;dg@qV{=5pZWIfJzux$tn}7*E*?U+A5K+GIUSQ-PtQ@uM$l=#o>9uB2 zvHv?(ao5?r()|K|-mI0jPGKD$f84xLJ8gZ=r`*J+)`$ZU&XK-M(~~B2iZeZ^dMp*R zPi~NCxJ`SFRR!eA(Nq>xr~O7bRM*@URL%}P{08zff|Qmg(G>bwD&xXVtXs>8KW+x& zL+kiEXy{lH!2np$$1blRg`;4sF>t$f{^5rX;w#~&TL%3C>t8d^yCh?Eeb3F9CgtN$ zhdn*I;L+5{lqvTPmeaM~NQFBwOFvRayuUV|8zVl4iuSxpY2UzuJbB}e?U7JzD{l`+XUkd*bmq<<@kwv`;q7Yo1Hyw$A-X`tdal?0OgIjt?Qe>M;!ZjNBzXoXhT z=)uAgptVg{*jkrH#0Va6lt%vkwJ%q9p{yo{K_`j$Av5reAzxniNE)M5#I1K>FQ@44 zg@u(P>Qz{RNhQ{~xK~l*N*qI@E>0K}(duZ3$OL46%2xbqAIQ~K7#%KLg*=-Slj-YV z5oU)^Za3fzIWq|dg9jN$NrV}Wqag#@Padeae%V)~ch+kIVf|a_iz9C`0nwO!_Q9n( zV)g!xIyR-J2a_EJVU(8;E1NVc$Dp@x3rCLi6{QvqT%N6vC*@lgLNz5Ar|8k+CA{l* zOzVPt0el}_(G0YOr%1pzd3a}IAFdlYCiO~P8VnG+xa|bLv7#ihgEc8T`#K^RsWNgL z{8F?xK()f%4jh)im%s0^ws_*oLoO(zl36dc*K<}oY?<1+eo1-f%AXT(L|7x@ev9w^=v0Tk;mCL?Z|Yc<^JMs&6hc@zwcIEp zq&1*lHobNFb2@q~PHF}8=pZpmRWP>a_!4XI2S<-OAH^b#Rv~#65Z3N>g z+~dADcIW__=>S@Bo?p={yO*M$<|=*i1`gcIhk2hF?uB0K6XuN%!Ip`AIkNIMAg_w; zZ;1KS(Ni#gYT16FAEO2L$33xh#6Proi6)2rLE0|t3*>b*L&b<1=m3cY zeT=l8ICEe118@@9pb*SE!z#yZ7&n4O)9fb&V6NW@5x3Cg>R~6y>F#*0y&Y8-Rzs(G zB|*Y&pbgw%)n;85_P$lu)R{|{*L+92U>%smT$0DuCWt5>7wNA4(SsqWvEf~;tB?ZH z(JE_|LqM_He%S)C9m5U3{g}2=unKVP*>JMSWe${U&LeF-9i$RFcvt&(wsmGW2OOMZ z(o!SOtLa8gzRu!_UL@_n;&r{4aNta}Yy5c*|Qv3^>=zO$nw8`p~%U=Vo(;8?ri4FVU8s{mj}qQS(T)l>T|9;(rBQjp28Omhg(Kmn8crLI$A$cDeh9+ zGU|$WtcT6Ydj&(;1+7_rK#pnZ<2T&Nm;WNz{YAY5BQ}}zW!HTXwY(waS_zeq-cKa32 zwuEm{i^=bO)tJy-Rm0`iaH@Zj?O`HiddCF1lO2dx6N^P#R3_(5IM!JtYsZRxbQ9G& zFdKAAgl`R1KAp-~u{woaiut;3PA>!YsX&$E>inoMhFsAFp>;a8v`J+PQ7da3cR!QLX+xQ-TTSas}t0Ap3C57)!u|^Kn@@U@Bc(Gzb~i}*IF2=UImJA4vm>I zig?C4QAEvhebGa}Pf?fQ(1H)PLp?imPA{)8ZnG1RaSf+nT-CJ7A+AAS@# z=FM&B%fuEh?g!ZOfbL8@+ zwqm1rExvlCgMJm!z$-7hR5w9Xcc4>#V4{6%5LZLs5_@!!PNb zkOH}%>M(GE8@nfvk+lHZ;S0M&HSZU{uFI_)3kinG4fIRd@9%z>K&X;4QNh&V6!H-% zXyYv`e84RoWt(>H?SNY7ix~DKQ*hsl{qrV`hvbBNwWtb**R|xZyLC;tP{MNC1dz5d zH8g)hKYN_* z7+|<2?(+yts9}EVeS~OjGg0efQ4P>VQ&uDvDibii)8z7r^_CkG>AS6|POzZGrHI+f zQ6r+ZBBCbB7`r`U20NW8K!$@sPa0I6a8hh^Pv=OVD1|t(Ul3$m!F^4*<-Ge3<*kp56HCZm_?Vh0zVX#&%7%<3gZf(2%%_N)j{JJe%v9Lf{f$sk z)M9*PwEsEA^;3nmMV#gH@9ypLqS=``wOHR$Arr$koMr7v`(nCwIfaavciW%~yah;= zXn29~vvdIeA$&LBMH6DDMEIzyx#pKF4K~WDdz_p3&WJ0?r@-$9^(*NMu&}`wQx>y5 z!Jm8kK4Co4D&iDXPb9XEqw{>y>(li2B%_M)Br9#_o2|#b5zC#_l~P#})X_qe?kD!J zuDw^{r|dD&=upZ0sYTIsQ_(!gi9gywhHnY)WCsqsb97i*x93_+Q^1oGc+5J#Y{Yr9 z=+#8}ZF58l&UrvlgM^3?X@952e}~d+9Cq=h$S&)t;#sh_!GA5xN>9zu(hyTw-Wh4( zmLBKVL@sXtwXa}roL3PgP10~E%TBhUldQn>_k?`BkJzLCJ%$JRN!Ckzs`z!LF}y=Y z-L4i`psOOtzw?YamdZl+H#HLD!z$!?b{H`}y?6WY(fL+f;rLvIkWK?BR#H$G>}U$B zyQD5cQ{SJ!0k}=?rKqeQ*V3*Dt{xLSeOsk&RS!v59qGI|(`OuK@=q)@8WrqIs5Cn1 zq|S>5HGNhW1n=z%F+`L)J8+R6p{QD}KcWIWp+L}sp2bqOq#n>G#u6mVHTSg+unfxJ zyz*lyN}u3_U?;?1j2Nx(*Viz@2~ptbCrdT71Yo3terx)u^#t*~cn&y#m%%#v*a>wv@>#S>f}`~@oHIyh4mEtSig5+3 zpkR_ZzhmpT&$wP5z-tYgwALP3iGvfv7#7W+=4h0B;sAem6qcCB^i;7tsaM8f)qW84 z;UK*9TRAHIvVZz`P&8faq?{&yf8)P|(S|4zefV0ufO@HL=^99Uv>%6kIIdX!6H||P zJO=Hy+qT>a=aodO)H=Gxru!J`S)&Jd{up%{->Ls{d&1Q0dF^y2(F7(q*T!GjV_VE% zKYwVTB0T#`#vl7;SiJtomqINOMa66L2PtajDU99BFNOg!nlY-;MQ~XMw9g+&PqRkvk7W8zps>HbO}x+9L)U}UuMO{& z7ng6|AA*$FsfjS&ED_*%9;0KQxJ80sm@vLeiZYFMbiYogMa*uEDpqeE1jWao!8syO zN$?t&-L~OHTLJqPYX@PErx*9u?B-D~kKu*{4|1-rvDwuuq|{iu(eG4+VNb4%y`Jfq z?N)6mD4<7uAL8Z@^-HtNKt@XPoA&Rj;p{jZNzhm?Qsn@}5HV#Kd`5C~Mb~4j9?v#j zNC@si?q?Z-_ZdGkSZ32NzDkf@=%KZ>B3F}IJzEs;@4)LOy`_K;7n~_bpN5iulwEtTjM7HieLm}c4UlMmUzZNgb04Ux>dAwD70gKc&(7L%okMwR*>yn}Gm z%&>tqOIj)xglJL4gcvUlTy>=EiECw<~-+JG(>odn2379G8DY?FX3#!nD zb}LN!Sjnzf2y35F!A|;VQM76)P?0SB1`>i3nu7ugSFqCOfI^K?F@hhga9?`X^ub$| zp69)!tD}+2vKQ=PGnf{|C0^sKVwp%AMzcPg#0A^~s+r?&EG?F2iE|Z|p`CIm%TDFA z)W!q8i6aN(2>gAhd!QV!N-+?@B^DTi>xei40X}6{7WmAfAl*-;JU+pF-O^_he#Q7O z4(SygwC5o{KQXNIMVPDc1H&Bydr?JE9Ze6yxUsvzrh5jLex~uC23HX~msPRMgW5%b zaswL$sK#xETH`t+u1ySZFHKA9h|%(T{c8P<^MZ@&T0uAZ!1)J1EefJnc2gXr|1ob% zSrTH@cK^sWJlgs9?ZbRLSe$_94m_z~QVFlZr4>&7u;`mmq zK~K=)-FZBK7{tN1vt8|2zcyF0<|^sXp5)h^iD1aWuCFcaKI}CA2}Np+(ih^B2biH( zmxRJa6xW8!_W6&?nDt=lDE+;uv1~=h2Pf=@H?#@V*#6rXSlz&^2X9Tzn;(3_ACJ$G z*@!xeKLq*E`c)(RnIpG%Nz~I^O$8{iKfqp*p|Af#s9{Tt6~zSOWc^d-q6Uh!He%N} z(ST_Kqu&?8Q-it*WOvF0aQn@pWbVTFS$cUwYtYq`cc;eVA>KdYl%2lx``hyA;-WXjB0aWeLE`GET}cuKt-M8fFh};3dgiMA?DX)D zFY%QE8$KCK#+l;F&X|}SjDX!CQ1yFW{D4fIxh>tgetGu92Sknay;bFE>qigl*_ujAATvI!8eRH znX##9D65toh8I7->J?keFHRmhUvFcubC02^K;(bDTworp6PR$t1AJ+Ow-Iks7dP@Z zv28uef|dWw`esJdNGgh6zbeZg2Xxm$$4W9de!rMt+dTXdveGF}2mg>pc7#wnjM{I<12&(lPxE zM+^AJmhK|)+0M?VhxJ3z#jUBvBr3=nkx*;ub#oPeoA!r)(UFQ+fubb#!G+iw(o=a{ zFr;?Sb-7;qB@z~E>}nKsz3XND++#ZVKrIhVw)1f6n}e{(1?07i4p}`+8{laGf(Dw* zJ7>#Z>fCD$=GQRa==Jol+G7fMJ`nouf9>oct1d08ACuz}e<(FSnCu82D;ruH^_C12 z;Z8IrSn#dlD&o1pN$*$}L^&j}ZE`)n7hQ$J{2 z$9Ou~XFKL50z|Q+4^e&#@9c2#xv}TUwM!uxxg*}?`NYsTCT_mVHt~^>9<=bC(Sk&g z%qe}!2CkTL+`N+iI~V#Kl4eq)Kl5tZaOUj3jRakx=6s*+DraNBP+rrJBo@C$*nBDf zyLg8bDP0eidd6|7=viNhz_tDV`hPrSO7f2_`yFD>+vXlS+_~xQIzw- zraLabd|D|9)fpA^%Uy~LNodt%(2$2%^>C}}tTajr<>J)ueBWLg!pgjVEOD;TFLfdpR~Y;&i41 zb`F~V9w2|D+14#{|6IekS#A36wA=y~Y7IC41uL?u)~MSr3+_tIl90M9k41Om_tnd{ zZ=a=9Jap4^UiN*SJN7EvK|+})?0p!%DcOn?r^w)NgoxKH$kssggRk2E8t*6cjXk+* zNPUbqs-!+MpF`OeuCC8JtY23b_r94d^cKaukOV9rT^ehMV>Nv|t{GIagpwvA~OXAT!9JBd(K#|dlek^h40aL|(+lg>Qv>*8_TnRWg~NjnwH;?^;lqfI(t zo87?U#2G5)yl;v05&t_S4?8W%h!W|0^(`>N(yRKt0PyVLkEq#!!|%OxJYsu@Kgol= zo+(`A2bURR&wdEK%YHoGhn9+@nwr->)~&m}=+9$~5p>YdS+Et1dc<-Cfuf5|To)-= zLDAK5NBZr56Gn^e@2AQMp8bZgJJmk9>2~!7YT&hYcbkms4VqVe4%I6hdry|%Ndq{t zZCaBsANp=YN$@j*iLo4~qQ>RSHDTkukfWBLNA%3KFM|_#x)xL}_s^CQ+Y5EWyP`$t zGUg)Cme3{H!pF_Y$r)KdqInpOK`~k?zwbHYPw7tHk~?`{nV;oc&M@yZWejS68;T;) z)RYUcj7QV%k;Qkrwa*V;%S-j{7y^hGgJLfSTlqtda$^_jz63RWmps0%Z_o@44hbI~ zLCVf4+Jz%$W~x3*SnCNfLm%w=Gael@I-}JHOd()TyS4bnYJJE? zpx)L+%dCjAu9@%EcW2an3D!_W$=O^U_h$OkM+4diW_;q~fp@66jG7e__zYl6CVS_F zx-TzR* ziZZHuG-ge%--q^Tf6DBQ1;{n+63cZxSQq$a&%cPU#n+aYFwgK_K3T$RvKk0opRg_Q zGGW@NZ{}!Yq3Mn-+Zp*d^Y;%7zLsXw;Zefcq6r8-g4{)!4O;9f@$kN&?k%Zee>npO zS*-K=#S$bh{$V2Y^Mi3qAd*Onl3gSw9t4~q#C+h|?(Xzsij9Zf>OUkX>|Fn|s>;H~ z$@cfXoW_RzpL;pr(tvbd8j4Ju{7wsjkd=$34OCp|rC9SmPpXkZtb{LI=J4(A^Qn}U zN){;t9LCwR@lDy@wfmOE^iS=ayNl$~WrL+!#+t+#nRW7_{H9IK0r(AWsVZuJHaxAf z_2-SQJFwV3WG!w`#9x&MPS?ZF8snfT{@O^Sz;~#T=kg1@eQVD_Hm#*yi$Nbpc|KMz zsuDW_Hjvq^f)Q5XUCWg4$IOUQ24X?~m*Ij5xb>R~+K2jyxUsfF;alQU1-4R=t_u$C zeE+#*0#`kv%XtzKX<%|*qi+xM!{ea;Wf9Mv3n}ug)`s>*MYS3}`m=1NE}gzQ=7rcB z5SICQa>0SBavT-Z-0@rr;M@W&)?=g3EPm(5*3NHP z>I%I~lD+KHLyPE7zsDyiX)OphQ?q=hKOAR(-tUZYazLzJ-doJT1*`G>yU&@$H8UaDoc3DbS zPd*$ym$LDS9K=K)1wn7EZG4dXfO22oG?P(pESg(IkQwrH#_728VSOMgNlz_sa_foy zK9WgX{n2juhP`Z46(I_q8bS&Zy&lAZ=z_|IziAw`YOBm-X(LFs*kU~7b1)bJer8&e-OFS2+36WtK~R0S*Zt5)Y)G1$xTpzAOB zrihIoa%~3QjzT%wo(2UtPF-dI?l@Oq?}v0%k0(|g*=~qH9nQptfPB?m%|l^E6i(zX z!c;?|P)fHLXzO2~yv<+Pg-nT)qSdn4u-3%eKsKRW2d>F0dt=~@E$VsG&>hcM4BCCk z3xrSg?C&lP2@}w^YU$i}9zp9gbOo#QFxPlSNSkTxshLBLr@k-H2v7$Bha$9h%;rg@ zShwM4ftOx`TktN{5iBI04Rnwr3UqvBa|)(#db3owSHMtJ19hH2l)x9^_pkwbjohqH2i$qGB@H5_?~1G&U9)RlH(@TrTUk4!gBv^huMdktO3@Th z#HiCRSSTwND?8#%!q9?%YQl@mOev|D@aFEfh|TV)_)?4#gd()=rRWHW&8#yV+Q;(e z{J@0ON+-HJJa%1ppYcimN=V)N)jVDggQyV3nzYLovCoY-i#hOGeAO_Oqp7_xKN>-9SV;St3YpawX|ZwHvygcso0j+e6{3=Z*HG|jcl+HdM+eMp|p{ct|Zlr zmwbVH$=L|c;wps#ny-CD((#98)ke_d@RT;1M5)Un`aVEDz=Fl%$NO+|2%qylOUjv3 zs(ZU&+E^QL;_KovmKc%-*MZ}6$X52|3*B(5l-Wo43k6IcVq#JX)VaGF{Je2;PUE)+ zD02KK}_ly;@&342~2y0&(hZmXv#<#maBVk2I6jVvREEJV{S6 zl;%U+K|43L-@7J*V=n5&)rl|DI|D3Wbqa^qCrg^`BlRR<=|WWi(pgTzkz9e-zdC zNaOe3Gb#VZm&F#tI)C~>ZE*Z56P_N*07Iz-F?F(V2ysSrAXjyMA-HW)h)96KzxoH} zSB2$jMb}uasqaSi0oVCymLm-`Aq{MsxYw)XpGec<T8ySKMH3;!X~>? z=vRalaTrPT5lB9E(C$nrPGM#uAtY3iz(AvfG>{j}&`{HYvmklkcO1MiS-%vsA;z`_ zd}shXU+hF;*bxhAQhFM*0x}_sndbbCG$>ze3stCw2ev%f>ov0-ToIM23X~YKtU2-B zKqf-EGy=DqA`TTuKxq1+vc5yW@ReDJl>@jU#9lP+a23}Td0ZEfB*^ccT$YOP&{XH3 zaK7~{lMuz7<*X}!YDXf%3;eVJ{Lf81p^xP_E|r5VqtNb-Y8o6UL@Ab{Rls%sp%*w6 z400mMHwe02QUzY+AVO@*Z~d}8d3=02yz~yX;aUiCYH0eGJ9`NQaw^OepTqiADf;`v z+7mE29Fhyl^1G<5gJRul5+Q|3vF;t3+>1czPmzKsrqp5pLV3T}S$61>)m-27bn|Hf z*81ZHD}gMg*a=0!o$I0}CpLTe+mpwtZ1(nsN;B`K4o;3?vJ;cJV)oA#c>@p6 zO@_`hK3W8Tf!_3&@!v!2?a-6@FE3AxZyg_-?8K8!b=F);?z~i!FRQzadMAZM6U0^0Di;R_XW>=C#xxCQo6E{Q=ihn0W7SSqF zl$wGnDAX88`Q&0Hzjei^&O@HwI$pL%uC*#|@~RyVjPhiU%;js(e0F4u0He zJ1+n>pWP1yqJ}|t0$s&R?d{LVNwJ(aE2%AAFzP%i8@wGjT~x8OFwQiDuRKUte=+j9 zV#%iUGn?sLLHau_6~FRDERGV!v2+H|5EP^Efi#8i4h4-ZOrB!RA4Do~&e%XIN~I{z z_n_0~Z;BCovn3(<2}VK=AE^FZm0tidm{1CQ^Y?)FU(o^GA*E557R3lC4$+nxQl!za z5$gODq#)E8wOT(pffm9M*dmBBGzM2- z3lX;|Ao_RQ*X1GCAvDc!8jsXX{`_qeAY)Cc$T_M6A3Qt$-82qnLNSe<;nN~yQGt?A z6GG^0gD#qq$GO;yHid4VW;xSvKc@;H8KV9YHIGs$_GKe7`S*E*$7|!s6az^nWHvovXpSp2^ zL|P>jdlm*kB$A-Peuf11(2{%a^?oSD;Ra`*ArCYJ|2B?`$dmnf+@mTT0$wnJ%rWzr zl-*0ySSO-{tw$oc_W%do9$1e!juHnE7nu-e0D@K3Y80|6qZ$LXA|Y0P+=e(q+7E^t z)DSJ?HboiQ(;GyZ_G6{+X9~cMf)cCX3Zqu4Bl?i1BIDVUVdB@h7gZR_^i9chDH-nK zC%+8rt=BR9c585qDvdbQ8Ck3p4IHAa0sWiOkb&VRtW4P!z}Ph!jQpv1Mz2t6FH=;5 z1dJf?xuo3_ueoNK#R@;>nq;Rfv*?ZM%oQ~L>P?B0puqx3^yfOMP!%A2zGoXGsS?D; zknT0u6Bk*OdXKNdI$QmKQ_ptob_tpi{rkD5@2nkmGkJIowhj3~?*+DovGB~zl)r`x zXQ>^=uQQr??z!!Pj)J`y^-kN0tYcEk5UZI&fY{+>^ZdQ-A@!Op8cjr=YY4VT_#p$f zfsZn_N2VYbx#>;uhh<17hQOCOU{PKLzW|Q&P zwU6JdoA+1jBdW-~L3y_7>$$9{l1kYu0u91*mnLq5O-pY1wI?T6pIL%+U8c41T4GY5 zWV(xtI+dfi>!Nl_Q3vyV`3cw0!&N=_()3as8g|uwd_2@r z*;0Bj%1JDG$+xUFx%f3Y@ez2xcDC{}uk%ozXM)1ey{%x0s#M3~8CN1#*TF%in^#z4 zK>GQB%xg1gDDk!|_Bj9LfZ$lS7AM3|`TqH!2WwX2_jq_-G|`p*6&>xHF-|r7+f~wp z%xOzR4I@$*W*=a>f9t;-(0dlD#pHYHAj!gMB_+(!`f?#WT7s+yGo~XA%TGb^8%yQJ zaE6_k9CbTHJ=AHD?Lt=O*T9x-f9mp+BqupdCWFRyW}qfQiwwi&DjN`ZldRIzyIWed1`@b z=0miB-O{i#HG~)~DgS*&@^E8efe%h>-qL&c#MJMF`d?k?|JIYr!tq!0d1`VC5;6n} zH}_wysnkHWrmX!MH_D&uK%5m(Gn>f>Cgoq%vGTM0F70Krg9Ycpb?IVd3}zHO)gNzD z4pN;JjpC>z3Dl0}kCS_uj%{sP#g!V^R;>bC`g}ho=9A4h(O0d#J6Vm**!kcZeqLx0 zqYYx9pCKOc%5U#Q)lOp1+@_N=*P_$%`fqN%-`xlXv8_P|CRHSq*Gs zNv?8rG*IUOp#5L5pe(P3y?sm<*9W{-hyW5?VBYkeuk>v7rH@H|g@fk5}veWCH zL|StbUvY2R%xewT1~5EqBCHLFk&p7q^S|P{VJRCNWthN1shh1Of7X5rkidGp?3i-x zLx}<~Eof5vpV%O=jnbzmvH@9(k-`aK!x%7m3>bJ$8Xd3M&0bi!UAKc_HCk4FWQoJk zPz`$ne($Fn^upo1Udnb=a4ar=u3zWJ6kbzw$YcQlzN?#r0p@D#^E2Y{WkhDpg#0a~ zl_c0r`=d1e%;5g`Dd8v}Ya9?LL$MGZ?s|Y{_mURadk-cidv7IHz+@)r!GPt*>9!kT zFp=VL-Efn!r?qek@@DrY{Q%W6{TEuln=~;uj`FScAJR^va+h6w>0{$qjaW;}@{ zT&Fiqy|nRQD!hK8)OO^i#$%J#;E!4~CwfwObw-058~N+Pv`=Ef&OI45mTmXf(}lpP zC}=RDv2N!6`jD+&?0g?+aJ*cp6Vgl3cM$CWt;!vVhIMmM&-na~4&S#!stS02P|L%V z`|irv-q+`tgpO-wh<5ykt#X?~Kfb0K*w!HKqV01_Ey|XlU^vR&v6|tCKxa;wlQ?s< z$bMHxUI_m_q+}%oLIuXYpRJ`HIbFcLz>h`~pH{w+_;Ajp53YnSZ>XOaN?l5-nHZ-HG;nxRwh>|5>`x0t&$u3M}PgBjLfwK71ZD&(8*TZ0Ww zZXo{9ls-357;$Y_#hmopyFW;HkN|NeApd@4{s@6s6hS@x6g3 zD?PQwH~0z|H2#Lw!VHyCip&U>!JW3qxEvMT`oa)pE`&TEz3J&i0C{zF4_TNAbnf+? zrp{sOL^m0o|5z17m_^#cIJY2Xy7D9Lsy>-)rC4Cm+@@4F&MG_Ppjbq(Tv&sh9ilcM zQ+-w_V$!fB{22|fRa{ddBTlp;OnEJL-K8UvxN@LkV?OhwGc@j$!*LuuPvny(w9 zgI5_@m{hZFuc*ZiYg;9>fKaUBltI^kr({XUYJLioze3zd{Na&HQQb0tE|a1AoL-mD z)!7JQjy21IN{D{-DMLg^8@mbeI{D=%WbuLg>g?{9eFsh8!h10OF|ZxUK&55phZ+)S zp378T7&@7}r}G)&AR*@uUROOm$bcxetmyi4L#TQ}C8FRU`Ss<`TX@?xC)hA*XOeCN zyn72d(3ZAYu_tF`U4j|%7kJCY>B!KH0u(|f?w>h1%4pis^KBgw-1R(*R@xp-yjjM; zjd;-g$1gm9>n+HJ@{!l}ovH2_D;b@rm`Fu^;=xlh-)pW{aZh{#aS60HMfJoPv1n$0 z8IpdK@pf+P7chTM|Lu_U8cRySPp!UE1I*u(U+jU%bUz=zxs)!8zd!6jjH zdwJRSj>VUyFc-B#06N6+rS}vn-qT>Ibi17YKAn_qfx6;AR0_Vg-bl#%w=t>}^XEO2 zA_EK*=1`s?8`g_wYuI#ngqm-Q{k7QhEO-Prf-VP~BLAT_&GF}H%;W~omwLhjPMiAO z9UdN>g_Aij+#xjF0kkFD0gPlc(Gip_Ro@LB@h_e&a25`hzdiut|F;z^p+cX*{|ty0 zq0f+*gMVcFH`5jl3n%CQtbp^duqIFc`7k9~ea-IA)8F?&iLHoQdCuggJk|-A zci?^b2DEqy!^P?DX+jUMMQUL>UJj1|O0RD&;mmVH9YC07*lh>FPw@&zsfEYFV4O3S z_T~KWEaZr6?){?v20I+(IHCOD>Y_Y)mFew}=}~9bmUP<<^IEj-hqqe70pBu8%?i-Y zMVWqRMX6P1k{c+wmMrfK*CJEib8+nnSIB;BvEC7)jFpuAlD#fXAjiL%G`)kR@M6^W zriQQk`t3heX^PQ;B?S33|Yq0uxF zRmrVm(-kJRp34@HJz$E*CU3qy1pv27RXW6y8B|)o8>*L2D(*%nmuktLmkbv7H>p`` z_6X45SKJMPB0{llCe&u!nL{okG5Drak|?-kOPoM&<+Wx-;`$y4taBuf%W)k{Bz=$$ z&wj-WkN)y`f$V^)Eg5t?LeRGnU#r85IvH6}#QUyPtoVw?doL5#LAKrWbrxl}^;S$EY^q&X zl>HdntE)>UCLKH-g5CcX^2{G-3Y9GJq!_8uY#i4$n)l^TJt~3sP`Rf3n0dK(JH)TB zS68ZuOo2Q-ibF%2)aN35=nF(!g3>XhgM18|4R%%v;%WY^K(vJv6$Ied;Jl)-${O25 zHCz1)$^6)Y_pV>c5$C&awe5k(ve-~tZYE)kFtK5tLU|#d$GyJADSmz3#$vm*cbT%< z5`6;gA&J;Z$gJ9}kd#o9U!CYyQ_=cs2q(OMo~i{N7{s1qYcd+n$MpQC2(7c={$y9x z*_+n{q_XrVOKRd{Q8hq4aj-_A`SUjJ5EOH*4%C{j;xPx-ki^+6QJYi1*yf&}Ma7Pb zu0J7kq#{osa*9k3RVdmy<4>@Yq_RPTzHfGqpn%BzF(CP_SskBgVPSbRZKFW`ySH z@JU{|vXseC|5Kz$WpINRNNog#;`npCc|w1ILj4)gEx$lvzI6RH^IuWn&+oLU#OX-L zsck(l6<{o!e=W28JF+Amf}(_;^uqiZuq`LOa3YO~-wFQ?EysV>v;Eil5O?@L^0`<- zyWHXb41_-ev8Br$>4D_0*?)Nc*3pj3!o~hSBMS=;JNMr&7M+@B_G=PoA35D3)JQPF z8E1NosmS2&f7+uY=47o0#xTWo2$uF`cGJne2>d!8e>=}UK%h}c*eDRHWO~`1n0h_@ zvD>g1HEpNwh_^+rpWU5kjMcz>6|ic|vqvAZ9X35ck3oNBq~vfK+%RZ&~O8%Z(1IRDL5BzKvY+@ZVoxvgB)d9GhTg;Wq+a(-sx2{j=F*(T987658yNr^jS-g^KL;U3sPhVR0~YfT)@)Cne+%2eHL@bd@nyLMPSlBp!A1~bLp40CRGW&{6%B+ z%e;OYaxUU={?x9Wc!%pXF7DW5Add_pKa@jx$pqFiEp$cX_IOZ0RpX01hQ3G6Hg9J@ z!cb*phI{UK(303-4E>fwjQKIkAy0g?Bwyk6_|qgH9Op=O0*%?~v!uV)h6+UT7n8y- zLsJKASe0XB)jab2r7 zt`ak!HIzpsSODI4AkU6Y#y(@tcy0UHs@e*WFy19&Fc@>UcCc}=9dXw%yJky$uPE;D z{B^ij0XZi<5|H`lw~mXIdswAb~M)9u|sI*V3u@!j|$BxB1YbK7RPW;-^5hPr8p2AnBEAOa@GKq z*!nHe7%Bc_7-7#l(bLHsnUMDmx(_usd8%${M^rm<0Dic03`5lc`h@39wIXwJATNP6~R$!4N`}V zj2ur#*ee$m6^|D!kz?lwr%pZz2}Q>Orw{P3bmG-rjMHQ0jZqHIbA}5&gu>ee=_@GK z+!$xdu3(5DH6FDT7$MJcYRCuT9@>=z4&?mV9zwr1OJ~2fG)EA^Lqu~Sn|&M*kHgKu zr|*+~J0?95RC*iL6Ae?`j*a*1jnn+Bjc~7IjyzYKQqw6lk4)w{4jfSk(s?y{zUg)9jB>PKtsPA8+ab!=4?-!a6}%mVz#z-VJ4h= z;l5LBTyatSlcBbol0+A{mtuLZlbc+nX-*I#-D$V7!z8ajgLD0rt`!Ave^~5FLUi;nS9cF7zwF& zs{LAK&m8=YncxmO9Wd!k*yPI%HNTt$BlN%6ddKF>qP1%@wr$(CZQHi(J7&k~uw&b{ zZQD*dcHZ9msXA4sYX5`vVXo^MbIbwNvckc^zhNgMA&jM9`j@{9k^*gNmYb^qr~hH& z<0h#~&B}NTjDAoW9Aif5*!5`%L>A#X=-sn8+Z4`_aW{HVLRqP{`PoEILBC0XM!y6( z`p|#y#v)z-4pQ)dIl+5`caVHAHqu9`P=Z!l2!eME%w2DPLA(4PQ~KJ|MlULR7nO}% z$%nbl5r&!P-d+yj=yaQrweYyDD} zMZkM6bV=s3ckH-ogWr;P=aMw2;~KMs*b)Y!_?w#=i}Q8{&E+Co_-k&LA{p7;&{D(< zfh1g}67DE4<;r~Mp3mP4PO^SWtp5Qwxc=8-XJ-G;Vy6aZ>i!eWpasm<-VFw>_YK_@ z*b+iC$*VTW2j@$}qFEDQ#iW5xrbsBuKHN%1r_fRVLUo)B1cu#9DDV=<#hrZvvs{Op z*&!6>?P=%X5s)9y21!DSXsleOgBAuU)J7{K$D6KMSbzEqc32;Pbz)-Fw9r#YteGS+ zKSu8^)&IXVHsdCW~)2c$72Qf4xW34|+Dt(~<(xwk{=Vu+!g?;>`Y}_|9^n zHvKNkd{95&Jg`0&>Em>4PE*#p-j6`8_phv5zdW^mSxWurM!|lIC+ToAr;% zFG2*M>Q=TIv`rrSw081)s^Kc(fe;#-%lMjTm`f>;XA=RgEwToyr=Jz(8I-M+Q#?CA;-IDG`gxr7 z3;(E$8>F=QKee>clz{5NMcx+=f2{*oG$@L%k{cu#v1c=9i1`^ckqv#4JJ2_*|yK_1u+V;R*(u_ zwTE>0jVx68`U-nnTco$7qQ}C&G(T)l&!}G@TF0;5EX2-f|E;XRO8r2jTqN)dE>sdV zAtaF^8gfiNdpgHW-Qk+IY&Ys|8EyDYEjl=f=iP-Pg zr<;*b`YA3lMQZzDq9zf*(G-67yb?|%tUNN~aGCGk>kS=jhTErnxXKC*e_Q|T z@~=$0dMwnwrB{E&4RA#_H)}A#KDx)lI&QBQD-K8Gw+ow(G$!d{w%#GJLQKzOV4wDp zC|4qZh?dn-^nshWDc!r!pico;3W}d^7Q%OWmU#x%Rt$JEOY69mE%ri^WCE;Z-7QOS z5V=-f#ZIt_bY1Lf$OqtYC!YEQsm;?xIt>?rY9j!8J#gI#X_(Tg9q|GNnRZTVy1lYr zc-gG-&59AR9!jUY<4dDS(7Q~^M;)@|9ZG~csKu64QNS7*@@Sg__1tWn*!JF@?vIoc z6v<)#Yj*uF^HVyaG72qVS$opu-{{&trENQtE6;!e?rZf7_@}j_H0``583!pLiZYE} zx>MHtdN)7<5?6|(D=nvdk|2uu=y};o7?~O9pV`#(dh~U9xtJCY&H*DQhR^A2NBxKt z%SQ!wijkPvo_ae9C;?OK+4|au>2ALp6AD*C>xZZF>^%mr)fxm)s?I)aS(Iad1JGc1 z{eRD`9piepp2W_5o{$jmFc%BRI33AJhoa0T`#9qEK;*BvMxinL_1Um4XK62+4U6bx zXdcVdXwcCX;nEsFNp2J>n@MmGu_VF|#-ExWrk(PsGo$crNt&V!kMu|j>8bN=B#nRFCB9blxPz7@q*DMa0`YLnXSsc-by?H0N4@9f z%GV;ouh$VrE2H?MBg$X!|$Ryr|Ji-*+l1Y#c>QFcgYF_H?YaPr? z$}n)rQnERx+blL5*hCC8>lpZt0Jj|5oxz3$Q}mq6=Fr1Hv}b@V9V-rrpn||7XTcZ< zTC+zf?ZpF%EcCGCD&<$771y5pq)5nTn=XMp!uqA6o1KKvi}RD^i(lmIH%9F{sMp#o zNO_3})P~Ns)|hFhAZx$XQZuV_C$n1#7C0Bj=}kN|@eqGcdrwz@FWIp|dX?6rPKx`k ze10+XFMr}C4vu)Urrb$7VbQDdO3(_rHn;(l z!5=^Z4cox3598ej2+o=8-Z!tXZih(!{&M=`=-suOHq7lrrtHg(dtHYxl(q%`<9^YF zICx+qg3dDvJRVTzeGg`*iO=ID@T#{S2%m^3<3~T+9FdCE9&}ffZx?giiay)fc^h}= z!Eaw=jF+ng_AGZzKK0JQOxjOHm;sIAP*?yUYqmqbmRE|NHjJlGhP^-~%N>^BWqPq>c*GhUF6Vj(ENt$a+6K<(MLaZyD(+-2`j&qbioz-KTTW~+W38vZ zs^~zQV>M#x8I1s65VCmxc;Z3-_cN!Ht>dh3>&9ok)EmJLF_x@75)uNc(qqbTa{yrU zT|3=yMor)Hg`4xT70b`^PM=wNg%Qp+O@RJM9s2!h*@(^k;R#LXMqF% z1nWN7pl51j!0?=4EUz;;u;muuV{=ri5et4)r+=NKdRccVr@6JlD*cP9q=T@A(ed`k zcSsT^^!b*9>;Bg>_H6F0C`4hO+}c~!#}3e-=R`#YFgYk5j*rEM+jH_`^(8={{=DkAoOl~MrlVZ>NAUbQS~llJ1B9fZ-e*4K5@H|)C3?Xqs|ujo&@ zY1~UPQ9n8i>P(j8t>XpA@Kl@PzO(OE>Ta?2%R6lsn17a5zAjk198D*vt{8bdbH%SQFGtnOwOdj)o zG=a9IC<(52Hcf_gO}KbYEGln|V#&e7;8_Ej;>lE^m7%zEAO!B~76cAbPd#hDf#GTu zrvArH<4#0I1!HDn=J+oF*BJk|#jtulsJYrxGO39{_AaEiMr?EB>{pc$GKwHWL&-GA z@?Gi&S`meS*vf?#xss=j=3t|)cY6Tt)v3oinvyp`Kj#Nl0oafla0fu(D<;;%z>(W? zF#Z9dBDRS-x7W)a?21yUxl`W;U73a=m~l{kn0sr7TkoZ0^bINifvh_BC00lgq>moI z&j!HN>sTwQ23nDvZ96HtdJLZ>Z>CImBCkbcmw_^5IMIj}OIPVnOOt~ILR_8xLXMW# zvqgBKJg;|00eQ7la=prpr*@-7HOZS)5_b4=$u>-sVP3OkvUCWg(6TMdL%uxDdvoNM zGzScJiyn_i!j>~&IBelU;@dhyZCgW!<{5Y6i$ar7Z`Yrb@eMI^NsJ3b7|n)Xmh>GM zBA_;hiC{e4aWdPPC@}|Wh!bV8=nq^zZS(TD^<6^uh%S9@2;^0xSK}-N;tFx zW2+}k6Bw#au)Cwus#>-7D%?q#gDI!LJUNvf+%PNFu}r2?8N}y#knYaQz|wjp^6wxvE!h7MA$9w5GWKQNF!UXAUAB{}2$ESXj+FVUovq8dq zr_^3!yv>Qo^Om6S^f)RbwWzY06J3)$+^zX25;)w@Ws5)OIBr3nKkCWINRux|zyHuw zKg%WJ;WBrowy>xIG5A&I-#?Q068;NIo##a zDBeb5Tg|>8NU6CaomNBd=Ey%y#lXys!n3M6JP)r z@E{DJ+hpK+m`a9fsEaqanI*3$j>?tC)$aAGX~Mv9wbypOw@V5oeVtt? z(wiSOx)x34Jy;zrWOXK!$I3B?T$B`Z2So*FwjS7scC@d3l5^OPpboH=+z~(y3WfOF z+R6H5yOZ+4Yajk5fz;$KooefqD2%3*ME~rTK#vQH`^jgHmDumR#1$?3X-ho*$vEyc zIh6cWcV>xaTpCu2?p%@EDY&1)JAkc-YdV%ifQT8-DOF@c9*UY2Gdyo;;NA!NZ#Yny z{r{upn7RL##f5{J`@b~&w3haNvgiI?*Y`v%Nv2cKfbSlgtjV>f$egp;JU$LygVKni z(8Zb1ta*QWU`>RTS^TEle9roZnjxQG>ugtbv}>N8Q)70=k1Lf?AT_RrfZ?kqi^cU$ zUJ05-2v@AE^ckuu`%4iAFDGBp@VS5==(CV0pZ%Mk+7CLn=bi!Of>JTJHg)@4Wnu3# z;>wodgZSeXDPj(adGh>}9-@0VJj|xiwn^yL0!`XOWY?PM-pd@-tjbalInVFDZs4ec z=REWpde#riPus4qq6_pt&b@4@vL>C!;@i48nFnzTSx19l57TUqo?S#@qECt*4r5cyqVQ7Jzma5y{UHQ*_Oj9XGH%j z;Ry`32Ibw;3G+c{w3M_4cNdQ2pkBUgij~8-s#Whbg9kI--Yu1}C90)%6WPDZ3JtwF z_I?x0d`AGB-A6EKyM1#ppx`hs9=IKuENXxGu6`7S5GIzFXy|>p%PaFUO!8eqK6EZB z@T*;>ga?^P^J6B=x}UQljE;x?(@GZ6p>7I#HD788v{AYKjyf~dVViU_;9L%hO(>)0 z2y3H7fC3fw>aU~|f27X5mj8oS-aJ6jehTCQr7sJB)4luDIohKo12C?5WvKSc^UVP9 zW~mKYYX3dHS&P#QD|4?{TBV@CwBA|bH^kGqHa-3w8SvxcQRXMeON{&{Jx+rUwGs}T zae;@u{4SVQ$fk551S{iqhOn*R5O|!A)ASlLme5*Xb6sBb0dj?o=u+kaQgP;&u*WUl zdD;WOM7_2d>`3t}q&7%*6g01P;WuSw!3{}-@$>om0|#%BU=l8tG*8!c26q%6Vwgm7 z6ps8TvOu^r--t32vr-(81KeJFUZ&TtA=8sX^gVBBwygSH8*!kUtwNhqpnKnUrS#Ai z+;uhFCBeUks3qBESzOc6-cQ|IrJ!34qmCi~1?76{Y@%7}talr<+0u5>0@4T^{6Bu?xV-dCGXN|PW;4y}&%0K9GFrVgt~p#u z$91;IusX4UC@~OI(1l|iTN9!93swLkTV;qpPYG}hIhiSul42@N4m~QKJ7lShDl`a<7W9FdA1vr~y z2GAU3FcyPoK1`Lc&MK{aZ>!rpB|&fLeYrUe=Q)fywD%~fOv8-}NOSwL!eu~Ti+PS+ zB||?1Ti?qwm;4`x?h~U*`AXZ(>T2&=d)+NQdDyRAndd29d;!1tFr9Q36Wx<8T26$S zGa~yiV%hq=_V5OEYoGF$d(5t?RZ4yCx%&?J2f2I7fHus$4btw5=V2Qc+)c-qECMv2 zy5$gZ1gXNO3wIKTJyy``fO_THu>t<7xP7QV?=VA;WpiwfH`Le@ct>KOvtvJk2 zj;u;Rs{5LmvJ76jkQ@^>t`(iSfM z`MqOkj0Q@9h)kMPV8CM}dbOdgK}U~+DL(%kV#nHoq|HJ`Q}go`$2XCP*6PlSc81bN z53k}3DDI(u%nlq%+?r7-+O$T21oE?L~t_Ct*9V3xscDX(35qVcN4I{9o&9!mQ z8z@d063L@lV|6Qs3RBg9-l%xXkQ7~g(6>0fbsQm__JB$AE}%8#0lC&E{ zo|@v@St)eilJat%0N@eVH}@q|Uzkv`t&|y`<^ZKk$iH;m*V9hyWSdMtoq=ds!42>I%`pM_9cg+cl`Xe-%Q>_sI9OQR9d`%fD7IQ7Hp zc>az=8S$ay`N&+LB2uR7$VyYG)J^%QmWlbC)Zva8Z?!q*BPysxKY+Z6c(pzrht51q zcvV(pea+a2OywZp*J~=+%nN=dBF5U!ZXup$@Gb@pD;ZN%aztn(Nng&W4u-MSx1rs} zSdvgsRzK%!1cWtE7s2X-t%jM`#dNwyyP<(5(c>o~7PhY&jc17*e(t2G@-4iv-SZfr z8Z6Q0CKofa9L&H5{-s7=iwH&!s0NWms+7GQPkpJ=v>Y=x=0AL>d7H@R7!IgaI=8vqZ8nfiu z#$-o8&>_%r4}9`8zKA!UOy{ENS4^c@^sc^AsSq&zWhchDqSrfgyBV`u%UEN1JJazl zhra;&CN0df??pQ)UjcN-m9zP3HhzWrcqt>Y*ME1oOLg!?t_pJV|I)ZW>=Ek(>B zPsk&<0r;jm0-$-s!_c_P2>5Qb|KfYI&Pr=&m~8LjtfmZ%)6^WVh#H%I{f()vtvTVs zmV?frisbvpjM~U!*Kn9(n}gNLbK@EM%Znx7?nr*v>(Or_n9z4%9C@+o^SfI36l$4U zM8GxXEEW1iD{gm8j=`?HZwBxDWCVK$npAg!1fUuo=;N3+lQ3%lN7y1VKZO`OTqopA zx~m6R%lGYE%+_!{r)EWxhB(h=h%Yu#fF6t z02WTK@NG@};Oo0Rt`*{jg!az!Nml%=9{}xPzuPlW)NYZbV7jOf?};d%SAL&LgHTkm z2iRS2P0=9rDQL!B7wyb$N~)v2ry#qo<{-I+X$xqv3zi2ExQY!)fvsv@LV3_}EWt`+ zd73^@%uZzi@j(cBYLO)!Q#3yjhiC>5&6!KR?J+YRyubLGu6wXON@+jyc?VrQ-7POa zC31M`JDxPyB^lvGa23q%H$(Pa71g>Q0u04lmUIbVeN~@Gp}8TtR>o7B4KEU=_3^?0{VnJ}ViSDD;C?@XE`f=8u`)fJ)Kw%i3|ezmf@3aZRkZ8FXO?qZt$Oy9iS zp)Xb|1Uy7x$cPhd<$gle%Q-}bE;#g(J9jp09D~olxQl{SJ>>`i=l+pOq?t`uF;fcS6pY~NY=yGhJ7rbrcZmPIxB5R=5hVq+FHc|#7hAjpId-Jiw{?nn)w{^({ zM0-x-&?_3g^>>8MWk$KibU;LyeQ6p%=0V3#?Zi1MQ)|rvs{e#ricLOVa1gF z2Fa-Fy1iEx#+->W$X}5B!l{Z>3&2&jloWDMA@j*D)!G^28E9Qsw@3xV*xSf-qI<`jgr$5Z>3gEhCIyI3Bg!Jd6*si$tcRMT7GzUo<$ zUrht{!x26Iq_2sW5JaP+-;p?ynHeA0tvhUT5R}^&bk&oqPwF?W4UZe331380*9w$u(H`7nf39S0WQ#^ng|7xGZM1B~vo5g7>&!xI-U zsj)Bl%^EYhrjn@a5r0Z}sLtTQ#YC#Dn@4Sds^u8lF;^kJZg8JAwklQ@Hjiuds0mN|m# z5FZ8@2~jJBh#cN>35vOmG^S816q$5Lz1c((!w6Hd`0ADWH2|Ct!F#Z;tbzFZt{w;+ zyT%tYu4P+}+oOf*0+2+Pdy{w=*tc)pq{!6eNv%>BY!MUITO#x;zE>f4KNmIRd=G}2 zO)i!O4xHDtJ4@0j2vOp7Zn@${EPqI)Y|41hIrdK*{Vy>WpzPhGsvtRtHST3zKkN|^ zP;ug)NT7Ok1WRVmCMp z8h8Nf+(?T;9zc8q1n9$MOAZ11O&+NgobaE;^^G7jI1}~#v1|gg0HTS3jOF^(JGvpc znP^jdI1Vxj{3Seh?F=DTsDY?AJ}TtjVG5>J(f*6S^Pi3Lw>MU52QzRxAPi)rn7#Z$ z7g&N@(xf`>3%v`BK@=Q-fA8Gac_`Yj8Z3~=Q$vE2gaeinbkiR+&Lm>$TlS@A|0*)K z$y-4VwHTzgl;ZF9lB~sVxhI$}Q(4hd*iC2Rb2DagnOy;df{;3z-A7`LZ}pX#GcVrn zGc{(6Q%GobuUiT&3Y~LzPt1=?GzYZWd_oB~_93T-84Qix#$~g6htA&yNmSj0D5l3A z35d(~jCIm{@Qsr`D1w0=)?Ad=Ai(^1g^pH%Rx)oqe`xZ0Un~1y{Q^AlDPCo?ndh3@enY<^Hn(N+1tE(XdvQU z7TGf(nG4v<=Mf|*rm(J89Xojpj=gyfH2+W>VF)K)z)oAV{abI|cS8;jEp%-os zh9YAhKVLj3o-pQl+>E9N<((k;GJ#Efu2nA!?06?^)E}NxI?y_0;>zaCVmN~ z3M|^UWbzlK`Fp$=_&sFX#m}aXe))QqPRtQt6>yxHwfgv?uHQN7^Pme0;E(B2NadOn zOp5{);gnDUm!*K(Xh%bfPMG$L@i^G@ysk+31;(A4gALid3MvlMw1&Y0ycg6%|Clev zt&_;ttI7%*}o~t(wbTRrlt?(MPhfJ^zF3U>F`a3uUdH08c$j)uh7_QSF7J#FRAAC^Wz< zF||xGZqK%4aO))9V%9H1fpz?6Fm9yHhoL1z4{YFvkn)a4Pob2N8y;wcs0RcXC@xU& zGEzvg`8?!Gs)}X?o$2HVFeB~R?_&yhUOb9E>w`zSLH*iq0;vD4sxdIE_=f6G4wZY7 zOn0E#3vY-8-&7zLyWm1tjf^UtWepgfl4E=bn-L}PZO~clXj2JpOm!|lhS(-rox_4)@PeDSZuOvAHk7(W7Y1OzoJNgz#SjS{N_|`uFKzid z&Asz2A4upgbCwVnWooR6wKJtQ&hk?-jjj@i=CWog8q{`y{Tuh=*)FM_{J|vGQQGnZ zvFZfucDHs_e&aDJ@EWZ!M^gaBLoyA}5@V*=ME43~X zdN$)c3{0-sWibfx!D*6Z+dJSWe=-xFrXr*cQym_A>dyg38kZyklcoSR8;sei=LS5* zyOSXDHZaynjy!2S$S4vdi}Wllp5W;njb1BjeMXTUg$}VJ*o)aCTMzkM_~refr74Pv z%2j}~vj#?dc8`T2Zs24?rU3F_GxyvZUQ?a{ z%RS*GYwiFz2Va4$G)xzNxLN_i+7fB%zL01|sx!iG-Vo#0h1_j{T2HB8aV%KA2nZ&F zMrOr~V~=n?p6^HQRRl1B(~ORx`z7_n#}#%(+fY@t0lYN(|esoQwgGQ0sf*1=az(blEU&svQm89^j7VRa8Xe@ceuTarsYWlkTNwk(qVI6>lT8y#f-*IoO%Gc_fi&6Vq^B^_X3$D^GLwwD;Sw)5yry35VGrp`2_Kme* zTDwrt1T4M)O}C?meZv zsE^ceGt^@8*o29GG^GIU@$Fq`Lz4_U3jyby~V$Nq!=eBXLLMV)RK^S6&@JIOD@J0i zK{?|L_YNFAUket~B}7TAl?s`&*`SOgWp|jsuap~^@i+z8C8KW5zhBiW>C3ECPy0$nOY+-#^$g z!+e%w{JLLH`LFVwkA7@X#I4Zif2j0jv6I9eaz+;YIu|K_Ux{HIN4mg7G#htG8vbdx zo5|-$k92~D18?{jydOk$kk#UiR z0CK;nZd4B6sDV2QBc@Ee`o!mBlLSh)NSlf3X{`*vI#0u$2Ym|1Y^sRb)J!6#!R0MN zEDYTcscimN2H9S?=JNxTxG0E>0~ewM3OCIn&woxsLSEAukKCPr9BR=qh>R`{3N`ba z=OIZhD*~BG?L7Tm$pkMWMUy)a8NpDxFPY+Zz6g5J`^X&OoAm`b?pH=HwtELzu|T(M!TiEcv-M^yF?l9`f`k%|~h>jn+kXge@hq~Q=<)r)B+ zGx}nWLC`b%3@B7H6Rq*pEkeh`f;LOVyo?cGD6as6GPNA@yOE?x9&3n#xQ;2&OpX<( zPxEh??ZwkxqdzO2Ur)ec_LqTI$eccRy%+}TmT}HYDo;}-rqIjj{+(&H1VtX<9G_-BU1cm=5S%ms z0fw5~cs-?b9pi{7%P*rh@Yw6bCDEfaI=A9Oqn}{Ev2G zd{;&V)QpBR_8d5VXu|=@u;-2x_>-RFX;f)XW0GRx5s%{rQb|eG#OowKs1`_q&shKv2rm$aO!hu<`O9U%C&e(mi3MRkZc8Xepp+#gI?z*G%a(3^QdG3FQh29P^o*?p*`J#RlT(3Ruhy6#XJo0LeKAviN7% zQFAUJ3VK*1i)7FG%57(8gD+F}gOx2qNSk0y)qDq8`#FhVZHX4AIPIFOrFx7KS4dNCJ+Wji5Up&C1rI<^U} zjrWn{qUe2FJ+_*D3FCr?~u}A)eK_SJ>f~Cf3F`nf~dxYt3-R zvJ03DlpgpSEV=oblB|>m|6$qmDZ_Kc4Dc`NU0TB4bErGX#xqJ&V!^M7?+3j8O7zk|5zS?6 zbT?-N~v!%cog3iJ3hUzSqn1~tbDP;-Fsn6wOr_@38$S3q%~ zBT$(ave$dnPNo>N5S~xm@ukeQ!Ohf(% zJBcOrKl~pHHx>3D4X4>_nwG47F1&bjBa)O7X1e=48R0Y2#kTSnZCQj`U3~kkmu9SJ zZY~@#lIO?PJQjclG8}-EfhW&te};QgQLARH=#Lu2XiNm;YL^E`>qE>9KX;GzL=%Er zGOGvm=h+05qmxgH0MbLvVr%2%OUTXn-G0Asvc27i#g}hlwPV9es|3ol;Mn}I{Q_ye z<8TRKyuXuQ+_Y${(f( zFu7`L>jK#5J=~5NO%Ce5+gVOioj2UAIjywn$nYsWj6pc9?Vir-^>gj~eE(;8dpvyP zBM5jBrHIR(w`lQlA_y+*{~9L2%U(3N{rU~5>Hcf?Ko<7-r`Af_5B>s?& z!s6D7=o;WzIt+v{9Dt>GsQEhSAhgsq=;sSWoI-p?G?Ctf^llr;4U@qU%&jj-Q(lY5 zv^=mlsIWsJSOGfR)0@?ABib!R;D=ZUC3>ohy!W9c4)s;xAqPX|^#t-HQZcLw&G=B# zqjuXDgDLljRWboXdv+td6&GAW1>N(0IGa#ojStvk4mmwSFSQwBh?(25O1!1`W|@da zE&s!JB9xwIA9|HH7M81HfN`ghBGF5?tLfsvK;<3aQ^flRF(Mm&d} z0F|ey3T{lqcGPNV{FGgO;U8z_zQ>qH5`aszsNJN4*4odrnm>aAKB76PTWBw3R`voV z+=Qr!CTpUB&_0Oy1Ds~7ANL=`g!#YfQCQg6(jET;n6Nh;wm6>o4VhuDLLly#NW?D= z^yxgV)*OOKrZ)`eqDv6(BXj3?jIl_ zjg%xY094nwAHm^EC*g`*=;_7i;@B5t_>dg(p-{Wh+n?BfEl@eB%iNuE1);1R3N>eV1+zVOj<+j!qCa>%Y{3mQ#r<0@#RCd|s;i3fEA{3@*d2VJ zJS?E)w#wrk8?qgxhJY2q;;-i<&Q4~Ri)Al&-?f8u%7?vI%p=NZ3@XtQ?0ab>@;(i* z11<>jis1elp=TEUraY-WfYf=z#nMDpdJ3cu3c>9*BwP6^g6mpMb1BL zQ$t$l0jkfN6hBvxe#tm`Ckh(*3}_CM75$iyL~t{I9;Sj7WxE9rEEqX`T4g8ouK%9Z zS0E38NMB;TA;K=z+Nki z188NnOJn)iQE!&2?y~kV16bd(9kY+~^IdAoetFTDSJODoNFe=X1JzB^2{7L|vT`4G z1_E-R@duBGPy|h&;6pNEj#HD}VnGms3Kvy!<=aECQxU^!_j7aupSze^=4IAXq#3*Y? z8Pk#}LB|=|(II5RaI)mgyz*mYc1a|I_Nk2Ps}N60NT3+I7xLlZNo(^0`dbo?^eD_F z^H(zU9GFBdr1QeLCl&8)mvu@1%#D&~kYxqe`?8=8 zb2DNfQgaiguN7?NS(`qKC*6uO2hJxphKt15iai%MT+~r@tZC%m@ZK?!%btu7!cpQc zV7Q{2w4=M9W38BSqMwxa=VNoY6tReG$QA;MX>4(*6+&=h3`hM;a_1?ZiK;m91; z8d&&UtdO9P-B&*|?f@G0w}ybG%}eGKHIVYfSroW52!M4Q`RWa_wAkJUI$C3)S8O?T zJOcXznuNX72Om%c2_V?G+)blM0+<_(oJAJhcCgBr+17@oK)c!`)?mIO_xG5@r zG>`<7tR_W0YdoiKRjyhm1|Z@cdLG$tbhE{+>@iE2y1LSU9)lPspExXv|1&Y@N}r%& zAH8E0Ets=du&&!vUSOd*E!)rpnpY!AIc#VviWg5CK0@@N3WrA85Bc&z7k~uEk4wpF z@;I5gvRn@E7opD`&W}X5oRb$J+SwekIyRYfuQ z8jq(GI*j&~EdQ2QSlKIt$LG=D5*`Q#?l}vI2nqqiPvMH#h4doPrReK4kBV9sXGOAyT2Qbp=0!PJCugJeq- zz`~1j9*UXX0phV^L6OQI4M&4MS$8**r(rvgn!;MlH zm^pOtZ6V@;(7f?YER#hafBf#le%=d85L0O>Fg6ELfCg|Wg5#+|J{yG4-RQq>4P>jn zI#m(KDnl31wM@$A@9oS^E{KAeYtx;Z>(R~f!Zc9vab|xhDc4(PJL!OBRW1?k zm<#MHV;;gcvLb1Nsk^85yE&vgXe^Ems7Dog$I02lcz#{wy&ufME<>)W{)uk@HVaa= zfCDogFUtFw5^_G2EOe8>jtXYj+?r+rt2V;}binE}SKZrZaM;5i54B2}{BpvPmvGz_ zUpUr_3yl*%rexEf=)hJq-&4|!wjqQV#=VV#q&5vG*rD}vLaDoZxvS4TC5>8#CbWiy z29fReGhN)L9TI1I7071>1TaMldp7N|F?1) zpu!}z_U?$!bfQZD8Q74(#N5Bhn@hN_N6zeu9!BZU36_P)U(b}oYge}tBCc6E*s(Ob z*&Sdud4MDM`|sFYDn8mfaojlDqyA32C%}~pH&8X3!K%ul!>GdfGnfC&>;V&{jaCN-ogs5AQRH08C<0RR$RCn|=KU{3c zcue9S0yDllX)Jidwf8f0Ib$ebOEO_OybURW$^s_R09Mmv53kQW&e8H-kv~xCXd-9+ z_L|GFvYN@pf!A~7>q+elSrBA5L@`N@=#L?COi>TSQ6yvYc$DK1NU@TNH8;DTh%;(m z@&Dz#SpSEZg@uXh|5~W3wY1|mx&A|X-3@}!g3^bhN#lqY3sp#6YF9Mg$2U-!R5A*a?ko>{>XTg2IRoET=%4)@>ra+GIoBgwO zOPMX6AIvU*oZOcMhLhH1qN-`VzojU8Jfy*_fx6koBvqFT zMxPIY(cj9QaSL!Rv}>-+?gE;=mSZmA#b+rN$#d-uDfFCN_u(K!)`X!Dt=%5M`F0q} zfGUil4Qx;GfIdo9Z~*7}Z9_EP10lVz^!=JFn~E>z%z*NHy2M~_?)w>nV&`Bu-UD!n z-?ukXgXwPZFGhNrFza~XruuHQ)y!6+=1O`zRO8xQ&lB(`0ZW_R#huUr^W1~e2_=@G zlgYXll%WRGOYWngHWwhLe{Fs0B(Ns@=dHQi@c#d?bxz@xMccNHQL$~C72CG6VpVKo z#i-b}ZQHh;iYvBpYwvUJ+j*al^5zNI0Sr3TF(jKKdU_pC`q0r@(Y>B`3PXav#kjcKZ0&+e;x*12U` z@!JaKUSRw#`7O;rbJVGuoI>orSPgl#ooD$;3 z(A6Zh#Zx)$jxS`*>COh)$oQnvM~HLwSKLKZaU8LBV`JmVfRFrLha3@#p8YRtiJ=%# zAkDL9#xbT6y=1Uj-y&86xM6*aNC}0}9bJGce7@d>vEz{U4=s3gcold>c)2L4DDfzf zD8Z;MoDOgvunrJhqUo3?3E9Hv`Ho+!+Du6wrCfb5Lc5Z+l0ZpGNi4||iB>xTF9)Vr z$tkpsTo&fPdelz#Wn|?+Hr~{@Tk}K3Ss6Q*6cVvDXcAvD#)1 zc$qpynFFS_$+`3q;XSw=)uRxc{9Z_4BwK;I3@wkljdoudH49bc+`61-v~;sJ3vgJe z6x)SV&hS-fi%_V$=o`cqgk! zrqdnes)+-`1uMM@{{D+3E7qkDh5VGLTmC#KIaf_@ZEs!p!8TeiU+0E2)!pd16Tu~M z`^!f*bM_?ZVSoqNZP+H=z-5arD08EYFDsO^2rK5HF7ccvb092;I2*gnG7H1Dt(v-> zFSW_?Q6inWJS*)M<9=DYpmwDS42g7>Z}HOLQ+ecyl9SylP@=Bph8S8D|2yErErs-r zUkRE{r3?M`9&j{@@8kdqgD9n3?O-y{*^?lLSZnzxDnE*CM1Qs<>!M6kusvr_`c{-= zn4iEDKVW(qS?bluZhqniYJ&?atVDYd;D4vw$V_T&4W$`u%0R3Qytsh?im*=0iqT3L z_kwYcrJb(L9;h%gKA;_r%~=@bF&uVT3n6X(MuowC4{~6FfRcx|%Uqd0=V=;%LXKjo zE|FhG*xWDR)zAnIM|TOhua@KiG2G&~#~hE8?DSy_FQk#>b+(ZKMZ2a`B?b|Ndyv#t z%^IBH@#e-bamRo#`d;}4dQT#1`wDb@#8A?vjEA<|igC9Ug0kUbPjU z>+#{{?cz5Sv3F+f$n3cs6=ctzpZ!hmhhpp{ZHFf<0bj==B7IOIKe;=SrBkaq%N2{z zH!m~o3l=nNV<^FWM6v~DzWXB42A~D=q2rhY0(kPF$3Wq|>_K9&jkw*m#diz+_zv_g z4Ov#(iH+1#FPB<@MLZovy&S%t3E~3_FTeg3$e6Qvzh$ncKbyP%(i9xhwv%*!0{;o= z_{!cPu}vlb)0f-lmaT)g<13jl@~UcP)Y`4>*QVy0Zx!>MVEp#xCd5$jFUvp`yDP{ z3-Gat{VP5NV(B*G72a9X`2awh1ecOMOC}1U_-h8R{G#SQ8NMPBAY|p;%3{oRYeSwd zctxrUm4(1a16n<^)vKSIXB7H3zi?TOgltXJmgttYaXv-1GhM~NUNV1nf5NnDwIZ20 zdr@cJ7w`5!SA%zOtGZ zJTUvF(ST7?V=%{!g}az%MqZ7*eNBIZvcIe?{%4{{`4JUR3_c^ z4)KdJKYZv9=*44*{|0^=kNe@EvKV;6$-Z9(>pEKSU)0{4g?Z#AdE&d#n>Z0T zV!Lz7(VJ8|Hd+93!9hEAOeZ0)Jy{;bN18C3Au^-%iD~uNk|lj;_O`60fOebMI7f;>{0|jF=#cVZ=tz9%BMKrhD0*?&O2M++rfY70ua^ z7pj&2k$znfv?Q&G+2)ciJkvJT;qx0c04x-%Z+)l~wEoQ$L`^rb{NU!6$b0HH94T4* zK>8myb}zM2x<gBxJHHJdC9Q8$`TBwQhdg;uJK0;n(5k6XmH zuJm7VYQ6Ig5V$C6`E3X8A*LO@D#s$#2GDh;w#HpZaO76> zS4p|Dwjd%u#oU_KLHq$2{+jk_#_u^t^*OzF9<8g=0Uc71;D1a=3pv>x0kfz*r>wwt zG%unbf)5Dt_(rtY3AQV7;@9zRj4rXI4Fb*3i3;=Of9;>bX0NiQ923yYshG6~K z3igV~5S=z@&XqWcb6-Fj?0U;;D<=wfh-Gsb@D2+ z7M~G%DL19p#2NjatAC;A3Rhrs@GrBBEQ7==__VtpVdb{#YVaP1fr`3*JXgcV2BofP zCc5lLn62LK6->A>8z2Mu@0MjyUQ>5`omVtvY;$gM2=ZayK~o2B6Db;DlIiY?`P|?# zvWbDRlzS>tWngs1XqgN?D04Vik*_~i#^anV3ARg@8IDjUzdz+ z-JLy+Q^#E}ILIyWHZljii8tH1s5}ena0_M~;|6Fx@%`65vF;F?OfVXl1|jP0_Rj8m z>_Cf_Zq9Wc50|7&4{O9h0bU&J>9e2(a(!pxy%=?hpBEXa27}}=$R7EXPvN^5zq0Ok z2}`LHOTdb>wM9QzW{QEYE&U9uXxmvIif@Ilaf=qAyyrX?N&|caHvsq$+_vmcb?@j+ z>50%rx7Dq>e>$)$MG^k<+#vj_^oR=X){bwN)bxr< z8hIy;h-(4ED}aFLe=YGy9f;0yvlF>T%G)N}x|M_4ZkqK>e zBw2Vrs!+PqTY=@>BTjSSk_MSv+!N&90&$K61jWqUW&H2c1N;9$(`Mo3{-3aYwwAU1 zCKu-Cj=>)qC@ttRY?UNxnnvD`1IamU;%N?TdZ=wbCHf6aQdwO7jJMs{VvlmoLl+(d zC1rF^1HR`S(ZzK?2@6hpYJpm!9e^De3!D_O4U6~MG?*~h*)$(kiH-de^0dHgY8dnO zB-~{4_Um`Ktog7!)<{aM*La`#WK}&jS-|;O^1BbP_|Z2Am^#W_JvdZhs-2wr z-Zb-^s;-=>{vg$n%vEU65&}<$Llcts8FfMBxd47vlM-W5i)l=T8D#)GUpLX>3kWyI zPkGa(Qul!vA1^O`@b)Tbi`%57Q`i8GTNmhA^R-;Oz@AHQ$W z9g(}%J@uu9wbrd|vd0B+byH1T*$t8OWVX8dbiCu#1OCgqr zH3R#uwTCwA+JhBIgfI*|GAD4T*Jk=-y1H69Y%H7_Sj+G2a{=Kdw|>Nh=;-_Yvy=YM z%Mb<`_Q|6Os{Q;Cx-Sz&a5FB+oS0V=`%Wn4X$2oO>Ks~?DlWo3%C4mOPVCu%;U_v%rO?` z^J`Y+lCjO#pE63IO<8~P+ukX1CC2&F-b3e)O~@+t4XEX`0zy0z^4@ZMR{KY@d(+@1^OB)tH ztE-<*JW)!|y2q7%qLiBR56Rl!=Kpk}LP(4_eVjhdLY3LhzeF%^Cu)kz=IZW=5+YH6 zH{+v>Q!+f%(0&VkGJDh3Fbaq%r;l3Xf6GS!$)UuVDo18R)0YSyG_R?PK+e&)#Sa?v z&{rW^#RSU(TBU{(%ZbHJc&v4j@+v%HZ<6Kwn*7T_PYMTLb>=i+yGq7ruNx=RCVGW0sj-1%doi$&T=n0aWiMUi$yzj-|0}lyj%rb9l|V|)98xBRYksE zl^3lqe1Zbu`;vo>6vo@>O}c$9f$JVW{4WpO2ZS3nTTPJLQ7<~ zLPZkio(Q|RXVA~fnj`H;)h@7Xtec#ZfT&CQyc16xynX@o<=$_eX_8(LH=S+`u)WJ_$#7 zyZ6r~GzPnt78Q`NiPXv&nz3xTQRK5Ynu%|hg{bRQ$r79b5?52=O2b)Em+M33@n=Ol_Bh0&eKffrP;D*K-GtN3-53X z$W&Ueob<-dR*)J{Drwzs;XM>=ojaYtr1#Uf0v82B zXLO0u>0Gl5Zw}?8KD#9qG~OzG=QN{oHCsL%AD4YVWj@)w0z@}*k-B&zW4Tw+ti0Hm zS36RUZOJ_r!mdCIW+M{32*9qkZDlPBEH3!gjP`JtAmA?8AM32>=`e7)Rd?W&pe!|? z501AgUX*@$cqVVl4t8xoiZxo0?&qDM3lyW0%3?X{LWW};o$|IsJ@;(>g4!-*u;2ca zm?!V5!SGne6uUw3_#>n7popTg|4t+J#&P>kexJ&sVc*X{!Hrylps$XNZNN4L7Idx# zB&RviZK5Tql)OM4B~>PIjKkl%oaJGbU^N+08-P{1V^+ZtyZg`7^&Op`7i(1qcK-pW6`r_iVxt|}&}SMx-q>85 zI`~5E(ifKFuLrcX{XLBmae!SE}! z_L=ST7#a(Q{eHz6o;Ywf(j(xxP$+uX70vwA?B}4CY2O;*l?xSpiXx}-?g!t9qCwKm z78}g{nPHv>NBpm0FDPFGex_FVNuqpd?QGtT?j)|Ch!dG}#Y_D#4rczm%z?d=gk`6i;+kcdXeLLfJPZy=%}-JZPMtVM(X2Yu-slY?zpY9rcPO zfqMEzw%+v5Y4{+@P1p<{pRg%szvnB~hnJy7eubCAE5CimO;KY~Y#S7o_Dwkf-QI}< zml2poj&%A5+G&~YI0Ga{#z!7jZ=iC5T<_K=7^XS)CZUPWbTYTDz>sHlf#vNPRE+pDxL5}n{2W1T^fw|pr0pIna02p88$rNy+N3a zjcnu8 z`r+>{tYc?dA~S((WyUmhjCqZW&&^@2msRDS^kVHouRpNeKk8@_ZjiO*I!U)Yv&94^2VRIS7_qxGqEXXD|F zRd*=GQ0x~YVH~2gocQoOi{iKBBPx+C@j|?Ka4jtaJMHC0C5(wM%z(bhb(`T}8oCBW zm+fHid9Y9bG)nwTGzS}`CqE{&qB3g{sL0AfEXgidMRXZq=fM zrDp`EWt{s>@wvvbM2-RQO95*!!F6z%DyC$6>PYYTI^~%U8T2@vBQ=Pz8xSqtJQ~s* z*`Q<1A{}fmte^A~)IiP{>9Jj|ZCt?#xbE--_@^^9n}JB%t3B9*p<}==G({G!EtTS) znx7Ct6cxv$Ha5h(KNwtcE#BkbA|mP_?LAd2$Ux{TjfZS0Z6vZKRyfN4im=WLv+7wC zPk4AxC3GUK+joRhb0PJ8t|EVQqyh+ii{l)aGo< zga=#hLFa{A&eIy5RpbBGv+Fpmc_j(YSTRV_u3;?@NSIj?-!MTaZjX73lFNHNe_Ry3 zzpsm2l;3r+z67SJOYq3#)6qQcq2qBC{9vi}_G0MldQ^neNv?u2b+Wo)rT}V5U~IyM`W{b;HHD(-2>ZTwRA2uS+AW76q=xl|L(|= za*4p8K^uvosBd@uJ*bNv**_PQa73*}T@TIoP^g+I-d6=FKj6Xkj)J;}G=Nefd0i0h z@y{S=fJ7s_|5K*e^kC1~|2RF0w~24}+uJ+cIz1KZH-L#HAgjt`$Wtf~66u7LTuaFv zRG*2YBoN5ta}_*E5u_FDdwv+@Dqfrl?|vt(6uZZbgk_lU$KOQo#wVB`hCdscaM0(< z=&G>C$ZN#m9m#S3N=oLNzh!0x;{zT2pFeA)7)r!*l`O6zO z>?xszipKq9>2kNmF1Pq-klS~(^_+Ktdi886PGZbo_tIe#zW8xF-8k(iTNx#LGR{6b z_7!L*@TD0u`tg1H^6D|wpiMt+?sOsC%W6$z30~MZqdF9$x z?N~U`*?v`RW*^u0lvdJ^IqBjO_X;eBlsec2Fn3)4P($r&h9=}-bea@^q*8@(Dv=@P1(Hkoj zk2y=Si?xClm-XH^TW{Ro64)DIy?50HMX#ImV}`jr_i?b{f7&7IX9@(6*2rPHbX zEW3pFU(dVPx=MSa>5_G^rLKueQ{a`*!%5z09z)ZDJ4}RAo)gH$E@P$`VRBXbkVf|& zJy8WPOc0S2!(UGQ6nYZI6r{j4e6&3a3mWH1!Aqh8P%82VZ9ao=GkPu**%&g|h3bzG zCQ(5!X9<_6UD9&Z$zo;KltVW_(k};az2JoyV^rAov|4y3`@C%LI>tr#VhA!9&rE^@ z4gR&px7WR5$;%C!nnvpn*T$IiP(u=9+<)02M$IHCOnT;i*&6^2W;}4O@@Qc+Evo#! zJ7HULmny@Qgu=OA$6rYx0y1Ksd4L=pJIEkd0OdX|97b0x-bsYZ7@!1414@cc9HNZw zWZ?m7jB41G6XH{W5~wiQg#%6=m4*~XBMeIMbmLWfMriQ{+N_l~FHtDHvvyR$vG&L< zy9_A=!o1h$4I?ga9|mlDjzIPClz^X=LS7*`qg)qo#i-DiXxc+H8uyxLWs7wd$fnYb zc5xW{tHK5H0n(%S^gB6Lq46_H%VjxS(`O*+x`W5EvEd~}pRgzt3ugWk(Wu(!mSqFG7L?);;W{Q_qW~}QL zqHn2go0>3SyX5EXzMDOz$S*tL030(*B=U-HF{!_ zyqSLH4r3~VfmspFm3kY2he~S@Uj7vQAV5f@F5hjV!0h%Hc)DoSuiv1|p88CI0iD&I zx7hl}Eb<E`3fK+(OMek1nW_IX9b@SEoaZLJe(i9^Oa8&pq!}I z8I$7|UTF65r)l-j%$n+(lJg<-^Q1}LOgy;=sT*C|YYr%D61dg<-CTM`ERDm;CTNFE z6IGl2B52;Bvyiy_ZU9*6gW4C}XSTO%>fjd%qWr2>8Q$*X<&B_)Uf*bJaQ?;B(2zAD zW6yremk@{)SC27p3UOAN(v_CD3P))hq_9ytTXi z#nqj|p94U~+(h*8{@X7Iv2rgtV%^POk?oHO<02GeGPE z+~57%qXlnb9@UNSV9I^p*4YFNv%MUW(oF5I=qyt;=5BW$5`T*D3sz=FkIM zJulvEt&hFki@e$(Y^D}mb8TGs-Bhz+j`p`np0>=C(k@s|9FRzFyshD%+b3sqHqL(l3 zC(aURKjUyPr~w0il+MvTA-B*tB1SnLTm9wEjM3QBYi&o5Uu1S0bnXq}=~lu2O+2C> zFnKGA3G-x7D7DOarSJD|?GqbaB`9;ja&dUD3z)^Yot$%cbbIqGIeQGCx z7f@`_1Z+3(reDY>aZ5KOM3JPn`v~}WQs2J2V+vh5ml6$4kY1?b0tgm6d`?p07+3&w z$M|J&`4|`m5^$A9GZzje@j?;;C{o&+r3v*2)5*>rN z-%xU)IxJ^EW7G4#U%`(ej4DkrflzrNw^hyc{bT-^&U5+~x)H)a2|&eB7UMS# znSZ$dLFiEc;9`q|D=Yb@!z=##s@@U1RAxoWFm)bCAmnU{Jxp(N(Z^7dHigEnrq>Um zZc8mO8U^2PV2&&kABS59e-cM}ZphBe|6yU4sWpF^_lrCd>d;@5jY*2SbcE|f1}3l| zvF`?XNoMR9a)NC+xhX&nU2HsJyudhkm7{Q196v{wh=_7T0~S`1lCg*zhYlhWcHONm zDNf48Fc>tNBo8z`K0#Jw37_ESC!;Db_Nt{S2%OGv)e~gQ?1hk zuT$8)w#4sG=R@(fJr;AeySlG-fS(Sp?u!E22HggFu8Sd&PpMDZ?+<)#Ovihj*6zR< z$UV5EbedN~RN7(D#PmocTu|?em>7Wf@y6ogWV3bbwqoh5A`ubM_XYEJHr(hH-&wWp zW#uZ6Ypg2xf^Ds%>-FWp?7SrMV>>1b!#BnsgTBow%#kC8V6%eMv?FG*@sNT)4?qeo* z^4Z@=t*l)Q4Fu%aQQ7N?Y9(#r$~0(+;#E;(r&JLl_KVP?PH-U_qpoL$$RBgEHKd1- ztWu-P?6$R7J$ypq$oL@dH^PU{vWLAO*s&@ebc78KAk#~&IA&EZ@!8p*OaRv+;C8Ie zsTIaY^>orA7Ug;j7YT+bY_wQ^h_XBdvkhY-QtUd@%NA|q?6oBhIP`+hZ}gLYXl0UR z(2L5a6lc(*{nTz5OIVm@j)5aievaQL{PoSzCB3s!;*}=_JUVC)4u|Q5 z<=6t`2#Z}%(M>t?#Kks>&p>}{0O;A4*m-aG-~p*n0`kJX_;vu{FuV&y z{DZZw19%pHBZJoW11`pw0kjf|JDR`!4&;YFqZf@+ajIR>!+4WM34pHnqvO_DEgJY>?$q$246>rt-@->cLS;c@xt|Hzn6&b| zcaM%-JyaW>-Pn6-4pX(zg;&hF9Lpr}NIXYIk~qlPl&IQo&rKkKXIzZx06wbuJTGuS&N1F_qL;vaklEC$a zAd~&KOuA^%oWB$-Ttt#b+(yIo0vGR+5e|kn?%4-xhdtiM?R5ipz>l8U4w3l3y0AEGL6$_Y;TwkEdM zw^#`g$QNXTTJGq7#4C}Y2?2)|VGOTG;jm!^*AD}ftD@5|cwPDC= z5hf{TNUb5@{V~D`7RDKaoS`R<63ATAX%b%aaS{9`C`x8c46tq=3$v%NN3m^4OUy?f zOEMM(fAGl7(1Tk*SqSd zoKLT{o;6uO4maRE?1yakl8~lv;Hz}L8F-X|AQV?O`gJ9+kMEHxrmJH(tyM&#in^pQ5^mt8jc2;B6P&NdSlvBfu1ZRUU78f?QZAEgoU#GEw_5@s10%3l0>Ot`QVG( zcni7Ncj7Hd2FsB!k7RKTES-Mih#h{pGGD10`THaISS=b+TQV-&x67uI6fq$=ZE8jU zz;TXru}+=KCjGp5xqS5E!-JE%J>Bab5GWq`{Z}>R_~=EYjRSAjU;FYWa?OTWQk7QD zk@CQ2=mCgKsnB0^>gHwuE(LfgR8iO;t+95VvPUy?*?Ptr^TqcXV8y?s2s7_GsL06( z@s-77{PCzcEz2w&o4VbC9zb)A@<%ZOke~Rn5M?bh6bLGg-l?||_1Jc>6)Gz4tW~ur zSr5=q&Wau4AhOj`UXs&5`Hi%us&jv~Y&OitQu;Yks{H+h{v3jtEFeb31OXs&ENMfX-a$Ao6cWY!xqeuXeJ&a0iU+Z8^6l!*gnqYty<0`Q2F9i~# ze$z!BdT7~FCqH!(C55`Ct0r}%ADzqwI`mIuC@VB0Ino_>YU@kcR1nZa@IsCf0@q7U zD&LmF8%AMZkA*wZwwc4O+<73P6SL#VlydR6Ug%*YFb|dV-2xU8+p7du7W4Me1mw?FTkpb+kx4->&E!( z{)iewM*Sg{2}4%A*c|h$dc2&FRZ>UQcM?|(QzA#)Kx+QR=FW|8&+63#^x*R4jHimV zqN9b5wIw_S1#VO(_b4Xx92f6}8duj=&u|jRM?-2l3Rco@y#4RdHv&zSA0=1kuQvRF z+RF>c{l@o%z+O%Te1ZjqB#Ep{P3*@{H;rKdFBkpq+EDZKxSs8A1Y0V=$GCyb%3yuxhCi4_ zVB?s?XpHan%}alEckMM5S_+Hns%m1V+`S?HONnjUj>N&cD(-$^u&%BY|TvIv3v z6(HL>knSE%YzYH8d^sR@X7>}WkiN?FKet+0_d${^RbQ=c*DgaLhxeU(X7{7Dl#iaxBcB+}=o5SZ-Wi zk89@VBjg_wlLK4%Q5l~h(x#8lqA_m+wvm=&w|3V3~ot-uMty#C{jSIC=AR+LB(HlO<;2E;Q%M|S&6|y09O`4c}#(kgPSdu z{?$^TlM+>WBSkbG!1<(6IS;&v-EK~Wg+U{<|!aW}y_6aF8_+ zEktTy(e@E|#>H2RLGos8mY8#ale<^}g#m#D5JQDizt)j_DeZ~z(`6}%YL;AnpPFKs z3!PQ66G&R2x*Sd2s4WbrZChRs+S(v*?JsBjY% znzU#lYu&p6-j7UsEuFDX5uLKRfZE^=zD?5%4lE->h`=Cj)^d_9Hff6FcP;L^guVI^ zmS0BQ5WUhFhVwH_Sg$co|6(kDSHr%od{yu0P&rOXba2H5Zw2fwx@<&ZReGwZeh+Z| zl((ix@|x{5)z~y~2}S^lkP}iw1C8U`4}hHYMy2IRiK#KR<^<5b^<}Z~Op=3UzWrmc z0DnKd{p+uMX0oc+CX!TqXiO~tK(XkWps2yj72kRHURGQC%@W(L8Ge2UY%{C|?SG{> zsfrAdTqGZ|-yHGr1bDIQqbailRJfuR1G&Eq;tZZ=Cb?n@dE-A}bAVAgc(XW<-3JH0 z4OoR-nWeD(-^bG*TEDsYEiC)?O)(@7JyHbQ|H$vtYZZf%;bFF=(D4gT2K(~G$1?O= z>cAVG=+guDn*F!0&|Mw;$0X|8;%rW;?s{ma7EhG9iIAo_xTaq0GJH;cW$gz4>l`5T z6~7-$DZiN+y@av77yx;CLr(9!$z*}{mcRrcx zsIOf7Hji%Gb}Nbn_4dpKN-?r+ZxacMkI3b4GQl`p*|c7}DN{ncw=%F(>Q)F%z@?Z`qQjymQfiS&e&`l+9yrAh14}9+yMXw6`@D ziqeSi;W!iUO2p>;uaB1V138X$i8Ae0s=D4RR^^?KOV!WpB|9U9JO5yM?|!Xb&Th$4 zOe7J93%VGDg@Ixu&uS3P0ME*;_h}?d;UTi`iYm?y>&^y_NFgbV*ONA-Q?W4-poLu3 zBah-@lDW#SVap_o{C!Vaxb%Vj{n+K$I{Q9s>4H=8=i!B7o}C~znNof~ZrvXAoxe*- z^3fVOxCrwJg2abOVW4K9k@MycStBPT-Xup0X*B>O4z#R4B#U92W_^~}y{%%#Wdr<>}x)KCHpEuI+>;Tz|`~W9=@i%v2sE&Da|&=GxZj$r7$Rh2d*nTbG6D06Ga`F5$Yr z-M|2P%$PBf8e2v@=ZZ)1_jpM7^Aw7X;2bg0Ws92NHWG_LJG{ck7h1@q18d~at0_w&FP$#^z+|A1NoI=@6XAP@ zK67ttV!nL~u4aHs`;`OW>7^RaW#eb|{YI)Utp7Z=^sW2$pR9PLG1$qH?Wulw7&D(c zmT8!(@|}(;T?7yO-wVXQ;gw2%#;oqu`b10Ax<=QWLz;3=85+;=|7db}Z-!oER~HPD z1@TQw`xpbTNhN6Q0hdg2_6bXq#9+6=2ws3`=TnYCRWQY8?5AE3OrL&Z^dHsDNx8+{ zBc61uxh+Sxr1UHX*IrF>K{3`Bj0zfNz7}LIF_EW5C84t4#{;%Y{(%t=Y(f)u==xN@ z+)$RL0<0@Q#n%-MAU)+a{^nH)vs6w@+dq;u)z_0ztedQB0r7(rD6|4N2$0-U?V8TH ze=$9^(5_}*dTXBf(O(S$Qx~8AUcyO>Tv}I3k+!LBli0^?Tb{erE_RwQc1@T#m< zZW5tv`3Sdea{6Z3M?TDq=;?R?SIsPYc<>CA`0wUe5_a~$zVsdVK3-5UIMJ)jtGzjn zQ%!hvSC5Gda>|GVkBN$P_8{&cMeSKslea)(RnkACQ1RsTE=VY;RKls1oIud5O~8MF zm#O1C;0SR4`&`S)%=(|5pBh-L_5a!L190eEuXP3FXZ(ExbLNe@L>!wOx7*EagqRIt zlOm?l%d#r=^IuPh+(q=3K$;0mNrbIU)eT+>f$Ps_l zY1w0u=miV7Shi_dM1Ern0_eXxzrr48Tq#9j6!D=kkx?uCEP)+0)~1gOMe+SS7aGmj z&rx9%Q7e}Oh*T;(G?Sb!pPQ9Py9aBJ%jc`Lj-BZWlvfr!BoTU8?%ng{;t>asGPT#T zDK7AuJqJ9@D~3$+6Z}`%YU|3c=_{6VN5P6!R`{Ii@r$Fim>UAyBUt*+WDACscW zM_i3|Zv{0)0ARG$NWYjoE)O}PN%090=6GfPcy-tKG`WSk;zGy9T|{B-()B>m9{!ow z0ycW;*qZs+bi#I{ljYkI=UqO*3mEgbiy^0=P=CYBw5>90Qp20?p!=}=pUjbxI+A>4 z=3RSZI3yd;6yr5NQ^aR8XRaj*$A>Xoy$lK)1I<|+GGL4pviE)896m~lN+}+~ey(+U zItb-Ye+tmOxPu%sKL=`|&-~KeehRPODzAO#-?cImn~KU}4Tsng*?<#;-+> z$pjQlnkO)>j6$hm1T%q*m7$qpK7*d1eUm!KP-=3UB)z<*ZR8S!$;PRg}f(ifN zhXDVDR!DVz;x5_2)6*s=H7xdujPxJqmujmI+us$^tm}5?zTkv^`vE<+c!HZf)sx2M z6>xjUqhD&PHDi^E$f3DBP~RCw&ZCG}X|^9|n$c8Q(g#{{*(56*0f3pJHV|5y78_m{ zdf=eKb{%G+kjaR@W=OqGz*|hqkW@X+%r>9$$Aw1~tDxhx38OGRR{NL+4iSdQ4>GeT ziczovV_-s|BzJm#b&b~=<86T>utB;*FVpJ5CI7FNOpRUhoNO8Y@3>jT>O*AC0-1~b z2&LR=n+0a_7>8pBG|!MAK#kT$CYk}FJTT>^N@m0F*V`9yzPEE6@s~TD$+N~!>YHqD z1?V28#(%udz#MdWgDFqA7c13S1t zqy}Cm#nb7@_-6&NoZ!luo!Djazh`F%ZgxzuAwo$g)Iw-&YQ3uyFx~Vz+kY#3>w%g< zZN(OS{`fTi9E>rGLlA)x2wvVjf{NA6bNY-sE8y6jn>35hogJAg<5$!01sIX4RR#Q0 zpGyr53Y2p4iDGsjQzU97Y5-9aXQV(%Y*jJPa>k(9DLBD6V$NB(ekZZKw2}n_;zO}! zRfW5$rg+&LSxt>iG_WlMkT=U83cwx2qtx|Y`$#@bc&O!T1->DgLMe|6`;j-Kd2n^( zCZ~dNY^(>jz<9yknw{EOyPBWSk7UN1JqdJ?G$iLjL2rDi?LG3p9E@u_3zDMd(K{oL zHM_Vt+KFA*n8GUxF_gdfSBlqBsD}*1Mun1L#YHoNYdB}iCiPT~3jch0z5@|B6xt|K z%I2_Zjk4ti2`6jhXf)Y*0%h~e*}I*rV~L2V8t_ITQ6LCJ^l%* zae5_>lHl@#xEu|9XKj*XgpHNS3A*6Ww!$)cXk1~#s5?>`2QM(vYuaMDPq$ULccP8`BipVqywY@No7L!faHcl zad{b!e*0^n$=Oi4+mGQ10GNU`oy(joo_ zt>*Ro#9JG_$0dT@+bc&QM@tB&r}J}u|FP7cmu<0|<06r_B$Hue*l&VmmJ&P|yqI}A zadi|!0aZ!TeQ;~7z4M!r7n)$uFgDLU^5-Yp~Knx57+&}Vv+5ZEIKy|;%dve6&BR0tn(A6dJ7q0Z=I)8ocPdDMMa=8rSHfayD zm=^7AJye;BdwHRJS>ykUf;S8lQ~)R8o>yX2t4-ynL=r%m4tRj-?!`A)SM%^Na`8dk zn`Bg~^P3T19&b98cLlbJgU7&tc|Fd%PY zY6?6&3NK7$ZfA68AUQBFAeV6a4k>?D+m72d5PjdT5V8xDE-KzBkty=fy*XQ?vAcHK z0&P*q5-l6GEkTwy2-5s}hotRFS=Z@HUxw0XI5TI?A#EC!5siiy^k3HN=>@qrNo24| zcoI$Lkx8(jX_P8(@idwi(XZ&u!}Yt#^&daoJx(4*Z(lJ?F&Bg1r{6=4mp?O%Ao3N7Iwjrx3&sOBdu2vbmEN8pzj9h)}r~c$Vkgsv^0oHHB=A!bIn846Z z%osLGg>vhs5OFm>tazUNX?=LyjZZ>+QElvrt}*!`%SV%6NM3E`%W~J){~em|^NaXK zj}OCFFRp&0iiS{|FRDJ|zrugAwS`MU?iu49E*S@+j0Pw^-&Y}~N4Ekd58tDX#v7qu?E=I9T*dYSiW-sw~gK8cI!4Dg-`A^?X*r^lUQgIwhtM-8QtD}wu66B)}4pOiR1^g z(}f+xLTNOr2Z|xP84t(Kk)qtaXN|K(2+8VtwG8fdS#1I+(ap_7f?0YT_BXIk2(%b* zjoP-}z9gh%GzTq!qp&!y)})SMj1=XW!;P8(F9van+O@N*bI@aEB-Si}hZGwj_7fNn z&!QI;Yi^#QAHIDTP>+9`P5efmsYJ;0?dzPYbwSG>} z<>-B%c?dw@ zN@?5!)5_v*nZ~8OWX8~4GiyBVhS}h;Rx+pjNO{Yg^HG=2=zGR|lnX3aiMwNeIo7I> zF)1|+dk9NNso`C zm=RfHktGVKaZx5p)=M=aIqS(50%~&! zcaR2~Tbks|WuD>(a!LY*$hsIP(AG&$6Yy0bHX3qHIhq9KjDluR)FBFpI+k0Fuz)%a zRx!bH2VQ89*7^7e%L8eDh665;W~AKZP;#Dm#FF)MK9RmS7IAG#f(>}g`UT_QtC3txKK=G5| zS{GJ{lct`Wl`VS*FPz6`@Zq?nD(9gep$&kv*P#3ia4yQ z8XDilCPt8MS&rX-N8)MS6lD`tW*@{0@lqV&0X^*lftUcjmpsc16=|NK`pMwAHL=*@ zJy||mp0`jbUd^h%#Noj~G$0Nq?X0fEnRt8plCDP=Z98B5AjD)cEBJU`EcwSqe4JgD z3-K7p*3%U3vq}0B&`ICE*$A5zAlL_HBV1#pte8 zS?aGDp3#Q#jHA2UKW$T)P3ofLlln@`pG?M0!7tjY%eBo>hdmHh%lVYo%~b3Uia-$mtWg|$5v`t6r9?aD-q<}b&Dx9Qc?{aCvY3|5i(kcf zK7Ufr%W6JXDFyk-xG3t1H;Z zA)ZDh_u71O@qg+PlEUe{W~BnH)hbcA<8=2B@?6xP+j=1)(l{4oB^FoXrd_>yAoaf` zgb0sAm^7XnoVdsrZ2Ny3J5}7^c5B=nIUE#K;AR(pv5XrWlLzIpjAy6_Lvj}90Qv`#Pj-1&4BaKqKw4g@-Z!Z z^dA3lxcvJp%U;niqhUfrNkc`$B0fIes!MI^dYKltG&D5SG!!%}laV&rj9;tmM)anU z7irypXBysTCQCZ&^*6JwD^Xxf!(|$7M4!`el4dur4{4aE;j$a5@s6%6&yzQO2{@zS zYZqqB!qqyIqm>C7J|?r%6x!yVpgOqjrbd;FeAz`;4>ew=cpmMdp(pRZb<1D@VJYcbhh0oIBPd#Pt#`eqZ zHme8h=q-D?Oz|qamG8#RSrUk0ZwKs{yX>^xJXWbR3~mh5pPZkP>aXjV-*n5hadA#96=@92fSt3ypv zl)onZ?M|K*8%<_K>*|(-_>95nF?iYWOHXr{%I=%62w}wk*sHB6ij$09Hn3W_EZA3Q0x36mWBS6N`*vih$$;tv? zXlnwHVU%M8$lJMrj1~ZDJ6nJe(A?146kulxPz7oN)KtWkRREI83Tlcfe>9As!YVHI z_I8f{$3;{{RZWr}ASNuYDh>du(*q>cR8)WeR0Z0C_?yuK8HeAZuX^v~>dhPLi+2RH$N|7v4y==4{vtfHbUz{b$R)){DPXlo1#bT)K$ zaRM0pWdnT!O{o4R2n2|_I6D6BA@?7bv4#4xb8N}p2uK(M9>c0*t4d{fL*x6cp08D_U@J#Y{f6ky`p#J~ojQvk92^VW? zc|#i@^}hxE-zY;H3u}*m$Nf);2Jkmk>i2JgZU=saaOw!u>+V?{~!<-wLb{NMg0!~anblM;sGJUKM2Ik=nn!hGyX5)0QrpVtU-JJ z9}7GCZ;Or1pL`Z(5Pg$>KoEc6p9&xze@)?^01i+*Xgmy^%>R)DTBhkA$O>X%YVoHC z+i&Rle~+ra!|hxg|4{%GV)hRRqWPyhJ4hOH4|{Wf z*!+PkpcVWn#RjTm>tbW{`{`l!j}9y#A?*He0F|(_1^&YgT7&%`H>jk&A?Sv%2AclS zik;>Etd9SZ5On;Q?17FJc7J4N2d&@U8g%#kf2j|$IQ)U^panX(*nw^YBkO ze-87XC)NMGs{DmjoE`0~fEpGipx3m2gvc2>J6gDZVg}t7EFe4R>p#Eg{;L7SpNsAv z*&-r#?p_S+pmWN=%EJL*;RH<}XwTSu{*`O|_glkXHx=m2{0INOvH?J#JJ1+@Y2MD5 zFW54*F|^cI{OeR16a^3C$u}%PO_>D9f2EA6c6=PM+-*|ehk}4+|4hmPJ6S1SUEkyY z+agVhU`*@R^_HZH$r}?Tp&dhCIbVDvapBP%bw;(oOu0q>vQAQ(Bbl6htz!0>%+`cf zB7oZHu_#Y_*JBLp#2e~W3aL(6>uMg9Tj4BA6NaNTn)@OOUI+f-R0o*z+apF?f3#t* z@DlA0gZxmeQ5k6ao-Pz^y3~AC{rbxJLlfxesvZJ-8x?9>1U2`7syocgMTiP%BKFUY z{UV5rq|O5oQ$pjcAtjlz545`0D|KJZeW68X^3`3u3(S7b5(f1{N9k+euc^d(c~MjG z|K#p8A`Zkpm{QY+kpDKuvvTwPe123$^oo+vg# zne9Ee@K!OPhn2PvXgD$)eFS3~;n{77VS*J^C^}#&BGOfWFW?$3K#X$aU9NP~$v!?T zi}a1la@*e#fo<8*@Iy31AaA7x)UDKtz{8w>O3|kuV2YF>x4au%9Pq4yf0X=>+%&Z7 zq4FYdxV=@(B~(`JyOVY1vM-_oH2Hl1POLH9#U8P{jF ztlgo~UG({uRuD`FLN63TP2XK~wDk>I&}Sax$`ysRr(oH= zN+GZHR6K03MvrdQpipgUX&ejpUv%F|3-9Mbi}JZo`>5DMLh6i@e?GR@1OO&?5t@o# z;+9Age{koB2z#j3@qBV zVd|w+-(6QEnm+s)h|kP5gD`n8DfW z=7e}l1;Pjq70-0JtjvDNpi`cV;mCX$&X!nx(IuI^*^A@|f91SZ3j;k@=SN~=GW-1Y zE8%iSa3Rb`O;+$u%hqc5rdhUzAoCycnmBXVzl2kamb5kS=IU`1;xoM-c#Pd zmyw--9jD)p^)V2aY@wi|0DPp>Uu17yC`6m~onJz>`8Qukk!#}Fq0Wvkj`XhF1XBv3 zJyZCK)Yh8$fB4G7KQ=;hQcHHyVn-6`wgAE4H^e@4^eq|hcc5W0%b^%4i|TDc-uejt zqM3U8a1N0Q9$Ta;B5K1ri}Ku?y>bN5;X>61>v(JUX?=wuh9oz6m9&YA`88*{V`2N- zyARijjfD$MKNAzl8ih)b_te3&e@+Pjoe z20xvAJ$tRuac|OO@8L^64NXwmgN9nAFJV7fdS^~m%%SM_UgQEH0P0N%%OdJ1L(4MLu1{vFXWmChhkcDl{dV8m3)l-O zk4uUw}Co5A1uXZ#A>81WO{TwHL93X)ue2%D73qjMhB;qK z1ZT>G@)s1uiI2yb3mgXtJpc^6Ei`qsCvcL}C(U&6Pmq_+M$g7{lfPDkW*&#HhOX3w zf4vQ42MWegVNm7fB+=sdWn{>y8*r3om;D(fpv5G=+2CPL65?^CP9Ewvd{X}g3Emlp zdVhu5Y#ZoHsKj#`iALWH^r8y6gbW=rR)MQGUv!bxVDix2Tk%toGn;&rmORd46#%n| z;8RKq`nC+kZFM}xO3n7E(H)fwT72$ne*^%@)+Wz~%6Myw8B1DZS>Il6M>kD?cs-I& zmo!5-ADYxAAKwZI2dYjZZ0U?4C>kO0*Rhr3eY_V>8Tf7CL%_J}ZY?Y4tvqE}c!*sU zUL!qS-!WpHv=mb86Wsm``v$nT;m|oeOt2u=WFOgH`FHr?g+xrj^#1xs3D2}Pe_DL- z$Qkn4!xy`#9~4Rui)77K4)k+zLvQ>C3{|}_5A@@KiZ`v0bBLKXp0$DV50&Nn46#Jv za?Xj^10%am0eE9lHCxt-))x?gv3@GG@^I$GYWb4d=3<5soz{Dr?Z>qgoQ_NSE7}L~ zO7q%+E*H>j->}%EXiSn8(QMCDe<*e0Adu#--TMVP4~oPQf{HmMv#xBTzM~PLI?!j; zu0i32K-DO9s<`ti;rdg*(MzNuiv;4m zAD-dST5NF)?{Py9__2IjBXyBBv7M)3r6LGNBn9YU+Vy2obY5ce-I?s+f&tD zs2_~{;33hgX?9&W7OqMw=S|DAs}y?x&NnRfU5#hv3CLU6`cvB)Y-45UWZC0`%FT#> z$((l9JrNj3*vWh^!<&krjxYZ}|NEeZ8ps1bH;Z1Xa5kBQVPfzJGuiQ`XgQu!(fC~hf6GfTS8yp_c08@T7QOtCVTD4RLh~aaV4s~E)B59*~MLK=-P|=W!eBaj8$~Qv1HX1Mu{53-JPYwhBI*D zbF4$9)z;6Hi}H1 z^Jq(tj#3@k*Lze}fB(*~$W>m=`y^~dgI1*eCKEt~4z|F9N+l69GaM@nZtmclH|wPw zr63y^<9CZFp3^vt-lqI|T{P>nExt-6jBrVc#E-IFFAG&=Y3eI0@c|bUftr!_^keg5e~K-zcvvQu9VJOfWw~6v z21Xl!o0Swsc^dK;s@O@4B6wq3O5PZvGQI zR%x)%*Fe!W;+30xcx_?r4rLT)uUB z&=PEDvmwF9m}&LC@su&xe7`7rXoWH^p?qzxSWY~9f07Y}n`>sQYmw(Kw97E&wUph& zS#k+stKy7e%>48Kz5ZVOn+VHMe@k$o{kc39$oZ|i`WhC$Ph}Uv;RKU(ztfWW7DUxoDVo@GeRg0BEb`_v37GT) zW480hz%Lao%{Pe%f-Fc7N1hg^TlbnqYsf4CTTrFGX8Ea(XGh^3HRxxb^hG#5r_?so zx$@Du7ZU2DfX{M2qiquR?k$WKi)j?3MHGK$e;g%1v_8Ze8FSe>WFu4n#}bTS$5f|5 z@g!crst1~=7@83aYanv&eL4#~Vif`+<$1*cu4c75IC7cY)4|&8O84=@hqrr=PX&+8 ze&cQw7JC{8SnZwK&{nkYYB@1-uMc>c#KlG^S(>3;Uyk&?pi3x7;xw#%aHfo?GiNSy ze_R|2xva5CZdIZyv5? z1d7s%GD{#^Dq4Ct``RUWKpIeGrlTNVw8JbU{F;m`) zdt5@7v3THu+u=s7HQ`7$`Q5Ze^yob_%}nBTH*1+t=sQWQMxPFW|CsZFJCD1)WsLn4 z|2`yPlg*Z^OHS^~&psBtWq$fuMcrwa63*_1bYUIiV27QH`gRTgrA~4*6nAQQe_@-4 z;>+-6sP|1b(~E(`_s@F**A*!Vv!omvOlIG7-UIfsVp}bhZQ`vG23saS5Cfndke6HQE z_9dHi_sT9+j+}%Jtw+P%277sIfAARjXexh6I))>W$&(dmOn@CA=VeR^EW&EBwd7!( zXeOEq4P?~v8@xNf_7!vKi!l+#6Mhn#O46qXj}I6r4oP2sXLi5Jg6w9!I|>^w$wgVu z_kcuJ%L_h9B}?8|R}{R~%}hXao?}1XML0TTL#9e_S0*H?<5O8}U!_w`e+{deAWulf z*rx+`)~;eM3B6Yao<=WyjC@F^BY*^_(GhAh4{Pt}jMY(J`!nxN{l&H=B*TbAs2+Ly z!reACDRq*T&9Kgc8IXQH+g#OKXNddsR6r*{SHuEKhwVLK=arTc`75>yYG;*nGnmyz z@ZpE-&$*w3$uM0$Sysg|l z^}B8%s0Ue>n#S&wd?tO9(y(l#*v5%V1A#jJIO;iO-+|j=Uc#2`-f}r4Cbs1ibX)@f zSc^GYnwXA+J1A}ShoekiDnvZieBXp$?3PFU8Ujc8Fev!bk~8CDe{si{Qzg8lV6Tf> zbWtMj*^J*0eRkHlU~qDmuwEe}@Qg@eS@t+rabYwd2R7S;!#9|>fOw{O6TK9OxDI_TEG4mB@haBvxal(blmj-1t0eQp7ztFk*63;AJ}d%3Fc=aZ!K)3MXgR=Y0*{#**#DxbXGk3o8ZQ zAS)q}KD{~-e^;{~q5)19`o-I*#E-;M%k(Sqju~qdb?Mix^Piu31rkK7$~@LuOUV%U=;u|xl@y|1E7wX% z{_sEdf0~Xlk0flNr9<7MYdvEs#TaupMYnz(p%v+Vq&A`m?&g!M#(! zC)z@_=Ih{AOe1%F1M4MQEoP3F4j?Yok|`7ue-oQ_`}um}+`@Bjv@*X1S`r22B}M#V zJ`eXQCi%6})u?o}sfa~)T<28>!m!QV)l-IDsx)S^z_gW{Jl^P4;b-ZBQ)~>PFxQ8g z$X#nR3t8ZdlnBnKXf$0;Gq#35qs2$(#hC^RRMWYfbVDQZ1L#fv&!*wn{2_QcvV^!3 zf0E`>qVS%O!PCykF(#k8$F?E*ACqyavvX|l-47UjmBF$PpV4xzz9Vmat&&)jD7)D;OcDw!BOXcRI+q zCYQI@Va#+a@+zoRrsU0|3Ty7L$7=r2m;S(@7BY^|p$R7zEbSlR^Ck8+PoZQDe`Z#= zBrTGFY^XU2d95ZzZ(%=n<}A7}k#mS&!P}Z3x?m0b+N`~aZp6m_s2P*gBD2bba?BAL z%%#a^EV@w8Z+Z6|<8dEJ>UOv46S~{ZFTog%bk?%@TdP)xM*4d~Dti!}^e{=+Y&8N#t9-o1Vl$_9Cof~Dq zwspREIV?!CX?7*Y@Pu~Zq;Nv`CO?U2e@l7(xo`DZ`n6ZaaIfHgtSE-?;%jzCdExba zIs8KT4zz;vx@%+3M>O~+J}_5+aKFzWuk5}#3F8w(S}6JPDo&v)X&J?qe@jL=VL)<8 zQLKmo4tmdF8?>ayP~0s5A`|JCfU`fw*k-5OgIix0tqZ|Y_CqI*Y#oDLwOroym zIGdoSvPnTVDbZC6Qx-4}e-8tub*CH7Dds0Sq?e^a$9E+(&c_!&tRbv%4NAwE6`$J} zAYDJYV7@E5F87S#`5N=4%>nD(Bhw-o-j@Pa=!FY!colCotM}cTUZ;$S_R}VPgs#CJ z=a1#4E|WudD{^UJ#zF9;cx?epp|im-$pmeIQ^{;S2$EQu;E(Fre~cYQ4l6~4jku4W zorvc}?(kGN)BFXVXaS_Qnv8F}Q!uxLFc~Q3R~k=L!DDfz#+1no-{%y2qotFb2yyFu zy_t3lDm|7*lS8b)er8u^Q%Z}{96YjrqVo*QBZ!_y4bNy4KmJB%V^WlebaDAB^9S`Z z-2t5Nn6py8L>2O}f1RtzXa2{--sR@W`Vv&AF{F=r@;j#>}P6udviX2peP|LiS~6OHgQj$7*83IVX6+=e;;uiJ8z_Vzo~qu3G1U{ zwg6t)^*(MH!@oa?Fv}SmVn_Gl05RTqBSCp846vj91wJWTYIxa7vQ_)!m{SfKa8xCK z7`^R*_ek|MC3yw^6YTW#K$5)@d)ym!Q-HWMQ6YlQoO7Vkl9h>wyOW}*0<{)!t z^px0z&rSqPe?ts*$xa+A1~PZz`GfSUJa$nI_(A>Pmr8+FlgNT=uDEMv*61=mBq@iK zV1B1IneRyAjo!A?FGSYV$h7xsu%7Jnk)$MEC5J82JystGEAvIjA&Y zls;8Zu|Mkh0B;&jJdCGscUd9ZZrVMkkoc~qu+}gye{o)(_atH>c>Xmj>6Jy(N?dkw zouK;CkEPZgo#bId2nWu6E0?j)XwXbmD6LX*?{U-LiGnSB?`<5FpzwKYHHC;J5~CPE z;rDuRtl#}B({{vzyrFP&Lq#K3A<}ugko#PDc2C*Lw4J+pEX88+NBi-~XU#bxfo@w^ z{&(zVe|YkgQLW43L3!5v8Y}uPsS0(E;+rLPQ>_Ax4Ce4h8w8}&Te`CZ7)Y*9W7d}Q zCRi{+yEFvs&QS41HbIw?WlctV>dTYgD6ZPjYP6oz7qAd&WTQ3u ze$J!CNUMk+Hi#pK&*`fw48!f2g;OZbG?LcHoCH|zpK|fzW`^StF2}Mwi)B%2))Em+ zf9|4%&8R4BqmoC>`wFVslx)hIDT3->dZI%vX1^eD@XNyNYsg`AeV2Ml7BxQA4tXD7 zn>Ar9jy_t8!*9&4BsF42g~=Tm!4nM_^lZ>O$ZryB>5_5)z)0k(^w}AgYy|9aHAcKf zR8Yt!D!CtWZboht(siZJP~HY+Wq31!e?3zo9FM(Mv!%aujx@^DT1?(VXR8tHgu zcE^s4%Xi*O@&vrBaG#q65^fDN2A4&IuM7GXqR;HTVGj^_zDJuJkX2~rtpFo*^ED6u z(||UXIKZWSj&)bG;Mj*T&NOn^e-w>pXV#aj+p8(VC_wHUiko6k;7uTlvp-TqZzqp; z1(8_)+iAPqF>*I4xV0UnDB8O`r=yl z`WCxl_vve?v`KPbm`<}2WinH-?C7(<1lL3EMtu@TEwy{k#hN~>!=OkUe<{F(liFk0 z#dQ$=bkZwS8s=bb;KIY07yb7C_|r34d`gTq%gD?;RQeJ4N0UsXwJm6f*k3)K!|5vo zGe@J?hH~(PWTTZcqVU`n!|X>&Z)duFa#EdPGOJl2?OT02rf2KRG);6#hsz#NUc}>00W2!p_?3DxP2WoH2k|cpm`k$DQ z>ito3E&v6TU?|`P#$tieg#GE<^vMuE*i0GR3>6o;;GBJ5!`ZqZvT36T^^z1j+rNn! z5!-m!b|Io(u*THW%j4ef(N2~VPzCiw+6T00DikEz5@Mvv*eSGpe+iR!j+=f@BIz`1 zZQWn&HIm$Trv{EhV^R@V;l|DICJnm?_Xd9xsb2m=m{T(Aa}w06*(>?WWnU}4>szOT zf9=l3uD0v+dvDnAo7XiR-?PF_--~mr_dPXRfUpq@#-FrsJk{=K&avEy*s<-EetHD7 zck*ihr*J;ilYDW8f7tJz850y5BkfqekHsyLGGL{!PDfCG5h-N9O;J2#Md0DGiEjn4 zsbkCS`_J&DGx)iPd5m+W;?lTc3FmB5AuJzy`4b?hSfk+OE_m_*fdm`Q+UB~airXeN z3KP0dLiZ=W5{*a8!7Z(;djyOMImf}#7e_+;7L(^)msgdLJe?2e= zQyhON(8zC~3pH;Q_@NesbtE@G+DAu-#mX52S4LwC z@zdMW<>be18-b#jw_4mB@Ng&!B6(@^{tu*4CV!jgvHm*ve4e_VK@|H+l zQLTMJFRj3Qe>=Q(WOtF)jmf%#JO5l)>CyK?)WJ_^pRDzTE8(9aF(qR@TqE<;=HVD4 z`1v`z%GIU}Wtl>TX;DBZ?o_ZD=)a{6O`&R=9lA~EIH3jm*5u`*Q!>iQbky0xG>C0l zI2KY8EZiXp6!2;G!I-6?D8u6$kI~1la%K2mZX>2N{x`eno-l{S914M|{5&g`VTqKWB z3<|>5t2ewj4}l);9&5TGGLSz%Xx|>d-CiK9jg%3Huaxt-Z9F5pu_Lr7P8|_4oR_Ul ze{g!3G}Ty?nF%%pZo8azZBF3gGgXOSO z%P>P18uz(bJaaS~f?@65K72YtKwz>sc(|7&>ribXu+rSb9(P=)w6TLNwqTebnpI#CGk*J+eiqiPa96rwA*BFX$(ev~+!Z(9f$Jkx1(I;w)e}-$C z+m=xXtF!bFy{>}uk6x%5Pl_}=b+wqeAeoW2^Z2ISMop_<#R-Im07t9hSK`BUPMIAegVm-s*a3j>j5! z|4c%JH95o^*0-+3HLI${rF6Q0e|m*)Gr3=Uji6T9ZRO?y%d5X=vse zZM3tbKIbpObf~Xe7J0dJ*jsyFNq(6?SAo?W!-mG%bJGu-dTR4r1*;2af53ir$NKoy zU$+sdWdLv9sBR$LgLd9ZpBbS7e_Y?M9YB+%W7l)KG2!OrVf$3Mk+tl8MTPN{b%@B# zwtnI+wb0$UhT}xor)DM9rE)rfk$(MI_uGjmoaN*vsGI>wOwliOKt-5jG%}AGP5gF; z?6BrC%9wX`+TT;eG~=4ve@kFwIN<`qoC6phe6pZ;9rG}m>ug)>8lER>R+}ognNPI} zc$?iZ2dM%X>gKo9Ee{c>^Cg1~r&+$-G`*Fv?K?yi3B0z2PiXwA$wz|NfZ6uJ33hY1 z&N~Qql;4zMAQ%s*%Sc&xIf&zx@Ky2kw$sI^&MJ#%I}4uZJ|*pJf8y-;iOl!i{aLM# zZxfj4qp#?M940{+U^?s6rSV>%=`2boG)9yF40?U>%6oJPTiK-m8{U0kH~ zowTWxpXz!xaALCYoGwH^cUx`-W=GBo|CfBK3gtI}PK&}{9StEXDoGnjqpZXy|zjStS(wr;$KVQYs_%F$Hx zKLl0f5rmuJBJ9mG$>ucQMp;{r-;_S+Q3SnfX%p8jaSTB4kg7QeH4i$7k-;e7`)SB% z*SC60dM4`Mc;k|xF8KQN+A0;87i9`grVnnHC41o zy*qz1rXioM8sNWd(uc@V1F^v3`hCm55}L>q+DGZKAt(Ms-UE!SOd~q-0;k%>D@PA| zu`mb0q1?V#vuRz>vGjo$<=UP#ZY$71VppC?$1Ty3eR{rX#5hUr!ycM>B6+3K+l5ku zT|M45=|-g4f4INifD$=^EKV-wbMO(_563}kFyep^MP{0oB3u~OG0x(*8YcSKuj#kV zVC(t9Sp0*B!&IhYx{f5v_7I?^)3x*YXCgUHqhlx zgBNm-=9fiMBhv&bS`{4qg=TWoO4hxnQJ6U!lTT|He>991Ve~EX!~@fe+dT)lF|^wF z77sh3Hw<5|H1(tyceY(GmY(Nb+aT&;${qs17LLXuMk|;n1A9CSbWT+;Jhc_4dJJ;) z_XfZr5B)E3jpzM3KVIN@jytl!w`U6r5cYlxmuZE6H~ppMX;H1bJy~VU0N&9akKexw zJ&OEse_}prLRsemJ4Jahq6}Hevhr}5`)M`FC1mNBF0@vgXLg6MdKj9#ZDsB+t2V&J z1_gVSdgk}usE;Om{yBZOx0m(nC|?Aj6ZF^(hq4_y{Py-J!{*t1Ci7ifSrNuVs@;~^ z@a%Oq-5*}TFVAK3LhQ8g5G-VD#~V-X4*H=_f4<^cpj<09pN9Yh<;tmRba7sZ3R2}^ zj!V=>Es*50ti+UixJy2&IM6LLa@Wyb1XKk3Xu1CK5u1JZKBQdDFcQAn93_~sMmP5i z^`paWIlh=}BR1`+hA`T91#79Zo`S(_2&cC|OVOn#AkLCFDeU}}`(si`@ioSH_paN( zf4k!KiWC9)&BZ_?Vquf0TDj+8HwV3h+PJ#aPq5PPAFGJOy3w%LG<9++ysSNsAQ7K2 zWjP=B^YvBAktv>w+Cq`+Q-Y7p^vNUeQ+J`d#rvR!Q=yb5jCXaNADVQM!a6Q*#lDbO zuxOG`6}7=H&Y9ANoJ4v26167+Z)Sn}f4Hs7>{OHle^QM%Tcu^cq(xAzpt}+!O}*{i z6zJYkx}HJUHk23O6GzQk<^(BpCafu1auE+1m(t{vuQEVssybapyoQ@E;e1~*SHu_< zdpbx72`tk1oK>NacfP1{VToEDgs>+Rl|40>Oe)zS{SGaf8gqn z^7EWuq!AOlJ>o@-)bz~Vqo++huU@oS>SE%pliQZVsshuN?x3LFOr2+JHxtXB8`1em zCUik5ao!2#B%=f+wT>PB_9bGYEl}Y8-7W%?*bqZl5e=0$XI^~!P9Iv3d-I!0l=V*A z$H?zGz5zb1tw`?I7OF>|NkgGMe?I?;U6g(u$^}Z`INZ^ytLao){gCq>nxdRk8mJ2#Tbbr|Wc?jP$ z=mx*;FY--|Q0tW5-|qEBa-Sx|s)~M1bb7kiGoaBS|L!>7Ft&35=c5bZe=r)B3Wyxi zaw>!wbmU*^_)7830{M*R7Cr|AG%a%*LM&T zd#v@51d8ys`1WzA$5>px;`h8;gBr=nu4z08vy6JnR&viE+&*>C-1}e-X&64J4%#a9s2@ zy{EE)>BGCUJOapEb+UF0!!-O~`Z{UjWM8+&`+CIIPU5{cZzz=o%XjY`M1Rf?m8ugF zpQT|6H$bW{Ovk#%Fg&_&CftOPYc8=^#v<%qQ;;<32VE+Mktx9S{bGU*{(##APsF*n z^JNi|?_pI5&MLG8e@n|YJQ^uGK--FUQ!6N@_Ut-vu0l?3Ol0)Ed<@(WG`_vQuqyRj z{kFuh6m=Nj^O+)S4)b+?#qJLnW@U$^G(fbsoTI{PFw=Z@_0oyQnYbsTC0>N95u!jf2Ed$Focn-_={Nd-Jl;o zNsSMae{l$FQkoS9;(IQT1;f%>whi7fWpTzJC-!fv5#tz4@fw-dXR9K5pui(>q2k(# zAcR(0)P9u4!(oyiKXoM9(PQgw%=9;(`>~rm>U*5(rTJu6;A8i+P(2ij{{;fJFYgtu zQ?TplZ3&LUe*z)PyceGmQ-lO*aEI2yPbO-~SOpa&28$`v5e1C#t43VfP0vzP0c|Ok zL2V_^eQRMUj9Bf**F8!;uWB170-jG`>kK$h8$I=f2-K&koN5gKc_nHd%!k7 z-#irV3Eb^UmObR(^=!4r8|DSU%9l5wSd`Pw)vY6vU&VY@tg$TP;|^(;g7XmY0?jetso<&wcDKqHFLbC&mMCr?wa$ND zn4r?X&`){sql6OHT4Iw&>H7i}FsQ>s zgXkQ{6oQE4vY&7gpiR1aVL3qKIPwkS(E7;WBWHf-XmF20hYnm-@Rp_CNo+>F(PMMp ze-obFFnZHI=0`?Hv7nCB5aUw3PWCIRD(NI(b;xNEdmQx`6BYwv;k&mhVnu z2!b2;wE~f(2m6r7`|qPy&l1q#mM1Cv7$5j3F?sPxZPPX?8}b%?aaLTZA)jy>yo zjUAYECjdl1yT7r*QY}o#6s0=^`43=Du#9UARC{j}HNBonxbtW`$&Sl!n8~F$J8*!$zF|vM1X!;a+6~EJ0 zUeU?bOZI%f8xWpAQTm8eJr_}TuYbhcirZ@UU_dQo*Nny7KT@_s>>-<#Us73{_!m%|3Lvs-W@(u>l)iqNBb$L z9PsV)SsR(z&FQA~k%ScspOM;Ueed`PuAQ!=6|Oo7n8QtYo4DoLE~}4u$A8??6Zh$9 z1CtUOzWXwzj@n>4L~>CKTN)G^AbNqS};vH&dY27twA4Ys6a;)`TtFN1O;I5)2cu%?dqFi~+XTEGZB#}2 z^~9NBM+%%K$x_Xsy4!5tuhV1|tRc}DQPbuw7>;%)lJx=0tJgv}QGbbU%M0SmS$CNq z>Q-9aB%t#!Xln=Ui8tm^n-*RuSqM;-^k$uN#71O&s(q)@6MS6{KK2s2-7y z5a@?E+h;HNjN`ndUYbhpp%siwx>RoJa%!f`s|L|CA3ldOO9)gDf@FAQ~Jo0d=r zPejv(;TZq#{kINp;a7jpuPiy0%(LhGz#?piGEfF%;E4!_(|eIi^iQ%A`7Jn~{o|8U{gfFFrkD~cmg zS#e3J3JmaxGyBSHnGUwnDtxhcdP8f+ytS!R)$dW88Oal2N>OS6(JpUhvc!@W-|!E8 zFyzC6pYj`i$y=7DzK7rC4VuNS+y=irlfQ#|Fn>?Xa@r17&1Rm2V6!iEgP=7jdV$CL zp>|ouJ?vLOf=-BH@PM8LV5pi0?+Ik`_J&{@#e&uqNDQ!J#6+i4gpxq?G|1dg>y9<{!xzseH!oueS^8oMSm3uj}fyBF@7PQxyx9m_yU(qfh7)}K6+8( z2w@TPlL3A~{+~tcvLQ8_4b7xX-y6UV|q*Tw>Oca<1tF>V)saS>a~r zk&$7-L4SYcTDemexrJSq!2m~Bs=q>AVv5rRn(!SLYD$vo zk|Qu2;?&zLVNk)$pp!{JHJswD#_x3dtJ$62%BBVslDBVF@g5>*p^c z{dJ#Uo-e&v^Pq{YcW_#Q_FT=8=9CME%-Pn5pBAg|E9h#)xJ>qoNZbZ9NPoX7)CyZ{spsbK-CdiR={CDd4HVe&0Pz( zv{wx_6;o z@xS#`kELa-872s@%(L~GAmJNzt&oce-t4apX4TwlD*hh;ddv4NsM)>dYigzJxDyEv>pB zi^NO!Wa;u!rq?Gmf(yNxS8}{Tv^Eq^t8Kxw*m5)?r^kg5t#3UnGF1UMo7HLV3_V-F zklhu*cVefh|NMfywA_f(MP&G}48aM%%S6Ni$V)XZLo%*QVt-}c(XCG}6FD}f=2uK5 zGi5S#>(FM;XdCM-2=|h4v7n|I-_bmKjVd>XoPbCs% z6}P4cELo}zyDh`4^wn6`?)M>_1%9pv3L1Alg!OL9NAC`;NVX>eYB)4EaMbQ$08;9# zVT-b$<7oAhB7ZuC=~{yz+Q~h9KVQwP3$cb0mGlMp7Dm)#n%Hgvqbf_c4L!jb&zvwn zDpIW;8Z7w<15;pU;e%a5t%X%2 z4{ctC_zlkWlx|6iV)Sc*zO|EX5@YV$r-v#6&2s1GHh;4<(bi<>pF22;y>Rk7vp6MB-Vgv*+g&>%cRlqqh$xGCw7WPQ9Cv3`aSEA;bTl$y<$&rX8CCf8T-oHV_D?t|W zRCOu+=&+4~bs&PSH}%P7e9>De-I#0S%YWhxK?i%s6Evi^g~Yd(hi9~PeQa_)Ix{Glp`2X5Chb>V6B#9PZ*|u%lwr$(CZQHhO+qP}HYI+vE z>p#e4+&GcpGbn~IT zz+nmWnhGUn1aJBmEwcBVBCEXNB^L+VwIEfXVZWDPLkPOGc~x9&pTbyf8-GB_KkMp| zEQ1)s!56P6|K%foaxF}c^WDfu?*bri6Wy@W%qz&m1$s5uaiG9Jur1q`vGl~cgqm@d zRGpa->Qt<#3}f!ft=;2^Jh@kk+D(XV&3>)OxK)}JndjuW_{ovb_!Vpk@?m1 z@BBe#4#vn_Bt*TuVEy=YvVSTV`U*C(D~OZ%UZns8Wp0|@)xAf2P!4wR!&?>-G%?#!6%!_~P_g-?>{}hjH{KpAbm2_}?+NU8B7$M(ZcQ;U5?Ty{E zfLp_CJ41ao$YEGl)19=BjQ!$Ndvz8Gp7(X4L*;UoF7n>>8B{Yx4Sx_7n?;7&^iv9d z=79zlKO-@q z*R!uiY1z}si~r7_Hh)`j-zHJ{AWv8*8B>D+rkC2%FPA@hJS}UJoWw}mv9ht9#q$W zrSM`;9CeV<1&x$xP}s$|yTaT_Yc3_CnHdLAtgD1R9Hi|)B-iBZepD23tjSR1k7ur0 zdfKmKwsDu%Jh?H<-&KU&x73qLrfHa1-9SIaNdtnEi+GiUi#-h5?>HxHv|tus&aJp1 z=yKTdXD5RS1b^#(_zKu7FFJ3H)!E`4c&*aXCN##1OLP4nFs ze>XKg%6OP-=wa;^FB)1xuJR3rjWCl(I9|q;<{{TfFMl&FQ0j9{-zDnh+@#gL#-6fw z$1{oJLP0%SLHMuzLoX-jToQc;%PU#Ai6~lar1B zNWRSGJb!!$8&u)ITm2|j4oDoJ)#9=B8JhS0WZ2$)^9UOU?}Jp@Da$MZ1ol9mc)FrC zwo8Z>>d`H`oszGKBg0ZVoC@ zy3AffmegCUDDD^9={6W$qCGl>Jasg6t%s@)g?~p>Cux0QR&0vCsC{ocAyWx_E6g*L z3x|^p{lSqHTyW05%q7gj(?4``uDB#y^NK{8=o6jIfGhv`fbvnkEa_h@a6Aj_+-+0^ z_e~Atx<)r~Ky!36#_1gqCzg+$l+O$5o}Vy;+q8>@5A|Lnf+=!o3`f%4(9#k@Ij3gH zdVjp#)k$@*RV^rlZhu;*+Jt4~9MJeFdgDdGm-$S$gAqX@3JDsGxOPjVrg?$xz_b)QjWjDkmyN^@1EN zk*RhYq2OLny#5FcrqmH2W>}A0@JaNZI;H8$2&}4xEr;4QfQZXM>d%)Dx$b0sG$}N~ z0ebtyC$Y1S>L76oX*Hh=zN3X3$Ei%sC>+#)`xq&eAWEB(7l4`QQ;y8%$arJtRezFw zonYOwUGx0{8``u3wneK@;LA;80Nn#7o%!OUkmv^&XcT*fM@)4J(?SEr!$cPOd=C{28%R;UjE~u6s8(0_&Di+he{0t^8 z$7&3PwHrb(cZrnjLSBq}_D(xhA9-JhGOV${*pC(_!cb!%C{`&g7kn2kSJ|3>zhFTm- zUoI&f-ZI6|I@@6m4L14&*MFm*eBuMIJdBU3{0plKTqlWr-Hj;8va^-o-z!=GAR*e9 zI+TS3rfJ7J4-BGB6!JlBu1We&Z0b!r-oS8lc)ZC*3Lh^WFX^|O<0aJz$325uuo~}= zsY+71+nDThy^g;}P{`3-Pj_6Vr!QBo*H7n{U=**hINUbM-7;vhDSz!$Mc}?D`a+-! z^zkPkF>oBZj=;Y=use}9>kO_ejPu-B{9~kp#s1DQGqsh?rulbGoZ4ylmoEXCbGr6Y zN@MZf=XG`j`{nB$$_$l1jg&2N!_+fM+jQaWlvnX1<1kdWgficX0WeV`7dv*lyQ&AM zdYYNy(rX{OKSuJ~nt$Z$l4;(uJ;1~k&lT@&I;90hyPvj>0qfs!pLh$37_20X$GTxy z^~7^hYCw5FogDT;ftihFE%sKe1jV0S*!6+9)vPjaxKiFp3!{6aJ&4xLWSS}Phk+03 zeAW0(Km`^FDEZXIFTKZIx$7CbilhgHUNWEpRf>z|84SYZ;eT1zNS)VmcahSw$xxQN z2MIw;g0ZsrSzm&hMdr)~DX&@iYLlCtqUUKej=}p}HhXZN;Co!U)o;*461nN4h-FCp ze0o0e#bFX@e6SA0u`ut?6ZdVu3T6}Yi4$-L*VO6WgBZqFpn(GB@VYw0`8-MKoNa3M!ohF9D;i z`8%P#>T@gV*t2w$h$}GnDMP;;p~_L(&t6{={7C;VQGb+<_Fwcsc4Z+m({4%P6#8n7 zLQWTEH1RB&mfdf#BJeH(4lU^o#hT2I42Y$YzZ7fMTI}w?td>=QjmEY?EU`e~Fm{`4 zm;c4M8M(*JQF6B1nipL{tDQP8A|M}MY>vSdzZ2-hpO5;Rvl)oo#*;~tB~ybgE-WQ{ z`H9RnUVj6FfdRDLHEOm@^j_Bk2(oF}xNVDp7v+%!W5Wn<5sNr0Xs{pB3Iwx2F4{Xq zDFenBL(_MRd&QB(2jQf#ayQ}`6)_-y1(zBe2=IS?p ziYD)AH0m7#KH0o{Br$184s0)=B;Vt^-{m28sDCE+!Kk$`9dWe1^;02Z1~a>LR|hzO zFlRaDI^q>va&5yA0z2k(=zNHEd<9OtbXp(8ON|;p*~?Ciq3M}a=ZcHuo(?^6l7z(; zVebapC-5x!bxo^@)*TsqNj2)@N0TLGL)_e&iTF>_`7Oyahj6Y_g-U;2Gu3`J@5hRh zT7ROD9R3zFwabaVcpF;R5uK4xvCw)k+#*YMes|~aCkE12q1;#BD!2^L12C(NhJz=}5IVCn2l18QL0x>b#5dg302dKb{D1kk4_uaGeLcF@goy#Cewgpi``#4dUFN<# zzM8Jkq8cev>ddo7iBs-zXC@^p|0u%?7r!aUjTcV0*=J1#I1l4(4|)rZbgvB$Kf&j} zpS2G>v*`rPOfVjq015;~0aTU3(aZwXZ-+WyLIWE)t+1i|x0}@+Oy-X>-J$84y?=pd zU=y@-9|ra}(?P*li?k#Q4;SBvXQ4RdC6nDAwIw|Mra+MqpzpR<)(DglnYgVPG?V_A zU4Iu-J;pa*TLt5?F(PCUQ11fU{G97yf^cFy97RD=Yfn{!Z1Rm8gC)tqZ%w*ZS;fwr z4Xv~f#X@-)RTap56fTapk`DjFEPqD4B#eba;IVk(h~?+Ok)1vs5@Zn@+ac*vYmmPD z+^~P=6N3B}r&60*VX&PdIWr&>3x(!!)vn1s2j4uZkf_+}x|Qvig7aWwyYmJWcRue) z_gQ=T|G5Z1Us3W(Q>A~ZPFcsz2rlZdw~iwvOb|p*(D2I zihdI|uga=O2kl-50-gAh7mx#N8`%7d)0g>njI($R`|3p8|C-ZNl@SSOL_pXF{k9Gw zUZB)8J_D6zy$yAlLEMk{`F|rk2DbArB1p_SP6U6%cy=~_iQ%+u#pHs@8q;^uz?gGt z0&9z?G4r?b?KNRa8AeQzVcS8e0azUT_4tVT&T+3MTi*$K%Q~!dffbM!_kB}rE^WCh z|DTi-N0`q=^U^_3Ay_G^Js?L9KE?cLHX+O@>&275F6l*c0r;OAkbjnIz}7*8fzkYx zGNS|nBUq%V-d`iDa($R|Iy2oo7-ttOp7xV&?%TQia+i)7N*2H}|o1Q#f<~ zhXkR>{d_HTCPM9TJ$4^t=;52mDL-odM~FXZb46D+cGMm?j!KIvAJVU+nvO#**r;pV zJxDbRopJx#KR)`&+kXT<$d5|K)+&NO>ARwlGjaz+l^V6QWm5aZe$s7$y3@PY3}^fs zGZ%|d(MzHu)Y^ko* zC^+u2uMVvijDNV?CGhnH^it(;WKEw$+Q}Mr|2V3eam0ENI7*(FNHZKbabQV@5(&W> zzd&%N`|wp^+^CU%mnd!EQw;^(Bw^FycIufO6crlsI$7i-u3y{E>`Lxr7Z>f+e?G|c zFu?0YxWJk*0QInz?rM)o+yTO-n$cSt-EG}kb0-5rrGMne!>JvnQY&xoF`w}YWZ)0VeY<5|`mQ7#vUwMD&h71laMHn+Aco?W%F$nROr^GkfG0CkE=v^xlKb^~hJcwgp zm(|heN22kz;1h0cF;fj;o>`AhcJd>Mg3exjkgS~XHdX;0Svxn5tBZ_O~-_*kGczID| z5OZf*TuVBW@0Cv!s%Z=xslp{xhG2=~<3?2gCNv*+%>}bjm7gbqK0ojS#mrp;8F2B! zW#y;27j+XbesD|lS(&wk#$?0G3r@)D&%A04Lw|z;HyxpDjxcX5$!D)u6jm%)^5|Mj z`A(P}O%5Z_Eb||;WOh8@d2ER5Fv&-LPDpFrHeBzvKy$*f7PIV8z?9=2EezrvAu4=s zr!+9;z!T?}I1Xd6KqqfwCCf}D+_zQ<=~B`<7D<|9|M5&iOh^qu!Ll^ z#DEVk)yOp-{rGG2kuxv8$baR)oj|j~D!oB%uq;eaJD;Gf3}1q%z;;9)P&W$*o{e>t zpDZAG*XKy@&n-~M4UMwIShLkb+d8>M_J3GvLk}$Rn552dWR0^l_K zkh-7mv|Y@v-0kwb+6{M8)V4bNIJ5Rv#{jn1;bx+9ja{sy^awB-35MRG(NqBiV@M^& z?2E96^Y*}|m6!DK`+YFDpMxtW!Z2!0|J4Cx^i*SqlNSxAVaapp+li?bJiO`Xr*(L8) zsY5KJy`()tr|tl57=sI@oqvZHi?(*UwWmE#o*C?H^Su#`s@Vb!d?dWRW5_*OJ$)s0 zH2IU+(N-RFK|XIyl{_K@JhVtSLx0B@jQbli(n(hKF@i%{f%`FiFEHvLltrv9@c(Rn zuK{iL5Z)4*%l#`d+Ya1?f~lxHEj5{hX(F6-^t0<<`_phIM#40?LR!2aizXt7y?{=( zTpG+7fa$e0g>D?^W+&am(cBGW*r-6*3^vGD?WS^EVVEy&hqmA`e7*7Vihoh~RM%Og z$@fwO8ZeqG8010!#t;#%>d&0mE3+-;q<12jvCnh#eV1V47*iJ3d-2+kjpTGnxf48< zes@foVmaPpi2-A`+S;M&)9KN+yRyzp3Inz5+|PjHjXGG;jiz88UTm6-HHPZ zF}OnrEsUC7PUK@5xYoEnE`R6dVmxDHFnOw#Iswgi@NgezukVuSv(15GG32R46EzOz zu1y(wfXnS!@lTxwp%ep4nTLZgdmL*@CYK?v5$r^xs3Vr2a6w|2?8^03?cJyL$-h*v zq;goBFBkr#(mjv&e&HCI%CHkOQK$D>yT)LFr^J<3J;N+K*%yvV za>c%FJiyN$M3p^k2tHBpddvVO)W$GCNEVmL*w(T~x%@95PlG0Oj1FdP32e{~C1eQy zhB#RrZ$V3KfZpj7w_7A;0L)A%(w?EDWx+xR_Sv8c@g!+HZtG!FOh~A6nERJEh=<+2 zG8JwL;30ul*-!bk4}aAJql3@tv3I^OvqyV@NE^M`xR^tl$1W5@=M1=nM+9VJ?&W@k za+xQI^bk5z_j!*O+MoJ=r3Sz(&|lDJM$@(^`LT{HM8at-d){B+@^HY#(rZMUQmNTw zh|7YQlkM)6KQgN+ox;a_rKx^)+KH&EUz=`c1X#(Nx9C6kkAG8o`fb(exK~yg-JI-P2sDE zt{-Cm8q-o)B2-6oDgSbDcH_JMg74trk1EH-y)zLc*hMCK!CDucsh}CfsbO;3i!V6f zJ6rxNT0(UhDuK6LnBTz**V1nx9N*n5?5A|U4=W0-JAVSLKMvIyoU8ptC9O%1gfKUC zZy?b{$a@B(-8V$+_}hoi9oF3V7Yj6h(!zy@K}yDsJ1}oZf%Mv%oCTyHrnr|pYsLYM z+==Mk(QkMN4%BZp!`%p3)&fAdZ=xX2X$8Y9#q>8(mlmb?=?uFqT-pNBU;A2OcvQSe z?WV(wfqyi4u+zj(e;8G_ae8_S81xWy$%^M`gnBO*ktV@Ccn>Vhj;%=B(1G?VnKBKcrR#>KZ} zf@Qj-HvA-2J|H~42@f-m-D!C`GMCMI8^oq2AL)L*T+YZn_XA2Dt_48Pld#cMg2jwi z)&q*Fz@7mYNGahc(uH~3)XWD6+3y4z$4q8D_t$0A5DJ@MbmkbN7yxqd8P#i&24>^~c*vr$SoF8)&aqCLrB-6kyYKd_Q$kCI z-ZT3fV0i3KSeJLZ$KmwvcbWnLkNyU_w|_I#(P0n$q}8SP0yf?E%+{M%HT>4o_vn1X zM2=}(Np6M1lpgyqW%VLoFv%x~bNr_6I_rFTJpAkO)u-q2pU&OV(TXfwv1CBNPcuU9 zrWNJM`&T4cGGdnnZ99Zj|sNkBHGZMN@H|@SOmmEgJ%B0z{SNm?IFrP=)q{ixdax151^zFyf3O}8WyjvFIdDGalBL# z$~JyNq`jY!KIg;xRyC^6Q0|%@8zQ?o+?zQpL!DmtM6YyJh=-m^kWC z550dRK}0#yw{o^zjt}qor@`FKhvsIdoL6HBkZsnY;mdn)Ad;m8e4s^|Zzl|KF)5C&aGwC6f!D-5`4z2h zL#C#~L4B7<2hI>zri|)jw`bv)h#!h=||ZD22x{CFU*? zGy0{jKk0JN@^yo6K^ijq-g_u-262zLr|hzm&r)mlyksIh8Gj5Ch+XV=g)!%5TYocH-(W^EsGxUaKxvh}&IdhC3K;Qf%Ja!!}~_Ifs`| z=n-R=gt^#kR1DzZMp?R#+1$aRhEb{V4swbp-uXf#_pJU8m z{AJ?L-{{?_9e?2>T}Mo13%TL{>jmDQ{zkjtY3Y^W0JPw_R)&OPqN8ADx~)@qP*oART&`u9-pec$JlyPJ!0W{U+87{%YKWm2BQxFi z5V`i-`mkU#ZRuQcS}<>Mv9F^`UT&HWuz~y`7U?xGp?~qnRAn%jPTS9x>!fVgm|p|D z6o>Q9x!RiNuGV`^+8fwNNC1&nyEv*Hx0aUt0;-h~_{~>DFnxjIJjf-5HqN`nSc~ci z+O6^HSXZHep=>r*o{%Zp+9w9RhjKvyG!K&ymLJxSy(6V2Q&SM9+KfW08#5E1px&55 zo6yW>x_?+l2>GH9W)WR?npYz_e0&uFH5m9+y9W}~uOPs0k7O&T(LcKT)!zKsMIS4+ zy%uxIH;y96bVmZquEBkDwf()kDj$RYHV#A9fZoZnh!a;e-h%QsjEpN5P|Ctyni&QW*#kuSTUaLE7V~-56f0c@wqBl zP!@SKFMG-nw)CpV3X)UNdmJm$xiEHvp1-I+G@xXdo_Xmw%Z7g7K(f*cyUj(;r z&41@iGZgImhDVr(z6)38#JDap+IGbj9KKc~xg(&~%MKV8{cYzy&klmO_O#elN^C$2 z`hQYajkF!hBWShaRIl4tN0ZW|-$$;yE3QLoU+0gCBSgouoEgJDg0z*y-ozRPQL}<; zT+NU+>CNS=ntPe~=YTQG4z$tAsck$-@=1R;ppmp8D@J&awokdYMgC6kKG?{)1@22d zzN_HPcHTNLlXl^f({ zopF{m)rIQ0ocgkkI1-@y*=?5FkT_gMfx%|`Hxg~TQ)mHMhBm>pLg zJl)xniASeli4GVVMTe8F&KS&1AMh<}0nOtKlbbZ#Q5L1#qD+5TW@{icOlwOM8Gkg! z3jIj&BJ3m>xPKsj@Om3pm8MSB^sq=bn{SwXX|D|n&=MJ3rT_>5W{{Vt@U9-TA7wIG z)n~O}>q{37?$D{&SK@mP6qEMp4Or+CiTXv@sSffS1b+Bys93L;t5{@A14n@!Gwv{n zXw%UA{bFD&Zs*ejVE2?jKqrP}bbr2}iID)gUbRQ{=H(OQ=ieeQ*w-=``0H`cju$&P z3EJ))R68!lL4-Q|?Qi@OcR(`HQw{2Nk*CC%j~B=vPvV=z6g-Q4eDl?&4&RIZ1&|3F za{C-<^i+hYl8_wJGJ8+#jU~?yRyshl-df{X$#@xnsQtf6xYS)qeScMoZR3(~^%)Ib zi*gOtiW?p<87eX+l8Z3T7Ws)Li8h+4V{^;VSrWAj*W4SBbAV;@XD@It)SJY*OcxKT zN`NYJ9hjn|bv3KuydLAX|9~XYTIlB1;0E@7tLS=_yiQ~sM2I3@Lu$3kbe{zTJl74(MKSzY*su`eYE%a%4hfDR7?Yo&NxX>-!-Wq103DH zhNa615~SiG!=M?6wQQjy|1k>4(z!yu(F8D~{eR7D!tKic?93jDZw1IMy# zDR%Wt1>0fw^PzbUnw|6De9zrVQ?izUc2(q(zdSB)B!3do^fk3{tw-DiN>>gzL-KTK zI|NR0t#h!hzmQ36uI{6FPDw`U0pG44O9()xYxudOUq2Sv(j95>!2CJc-G|af1^9Mkt-^I zm9YAP00mwb8ut5!chy}NYNj`cwXx1b8UGZc9XEp+I)4RVPQ+Wu%>Nby6OS1K-i!Bl ze>x*AWi*Djcokg9tdGj)voZ;OmFYdiCaJ>O0`ST#8Bt_7#-}K5u?I2(dg=o|6`18O zA@S*4ucxSEiCByWKOkiU%Tx|X>*fQz1dLw4%g7uHm%!&ndkNH(D|)!StNjlN>$B7T z%ub|BdWDuK`^=|r6(wJmV8(O!<4W7yTmfvUHu}%4e>@V##iuVe2>A!d8759jv)MI=>Bkfb zr%cm+XMqVba&84@{o^KV*Q$e(SAkIC-OOvJPQ7XX#fmni(KiCZ&;Yrlc1dq>2t{s1 z95(!-_lh{9kGa@7R8q!m6IuU4aki_#n=MefKWzMa&FS>wgGuck>V?WF)f3piaVWtqHnb4%D}UX3 zI`Dwxn#=fWDIS+NY9jN`@9sn!Rs9RAG=W~;1$IjN;8@5OZh;~LZFX!0u}csr#}GJ8 zDL0Tk;A9hSX#-JJ znG~^dg$FEZ@?Pn?!D>bt5oMNTzAyPhSz3P!g(5*N?cicR=P-@WJ8xmw%wEq5WBO z!RWscR6L1jkbeYl)y*!KpkPVt8MjHe_-_US|AsJbI)8^_^7>+ocgbiH?b&=|7!k}D)puV zv_S3m2yppw5uas28=Gti7IenuHRKlri!*CQt-yY^@Jp<6x_g*PYk!va9|?aeY69wh z8?KCpK*dzXq!mP`kaFGoeDfh7-HE>$ONArgg_6~iSd+a$GCsHp`Am5K1K&Bp7w;Bd zOw~QoNONEGB-)PCuRsHlr)PRl{HLJ`G2#JeNX4X8M5uG#`WME-WR}6y)T;>vPh_ig z^@0>jZyqbHtHWo0Pk*iJGX#aUb^<bk!y}lF#{wL zlrw0nAMpM=pB(?(ZM#U;Z8cZhW--pc^l|tP_3JO;*7MyJpMQ8^osIe&EJ*U6ee(=l z+F}$kL9}GOsyzr6Ke3FR3`Qu{2|u{@-#TXe4RMVVPUVr@p948SVdByt2WfYV3_7c6dSseI2DsG83 z*p*+Fr|J8tZMq@!6_`s6ZSfAj%2Ym-!^A90_rt_6sr74xkSFt5MO);?Erok22KkbD zF(q~Xs(+|@Vy7str1`TAlx#4N`6$wLsg^kypZPrG%r>~3#F=Dx&LJCGTqUo+7R?Q0 zlVLW+FrbU(&rJc ze={+uWWy%efHP=`pA0?k*-XQLhmW4A>83g zxvFlDG&Ah1*Puj=ahSH{Bkv$aU*Q;vOA@;NrCZ7ClMb}0Zwhh%hS8#}C-GA5tt~$H zWQui{xkQFQFk>YYR;XILAcSeDNx4~2PU&bOjD%dTQ^SC8O$Zu8IjU4+*fc5#=6}V$ zYY~GsE@L@P$+{8;i)ogXc+E!?)fT>XoDmnFB`~AXluw#@?R9bjB>|dRhbUhGFZ4Hu z?v^;&n!vNh#nywb!bWJcBnN{TMgNB5Sp_4rg{_pF{!9**3s*w_)^ouCBjx~gS z;&2+c_Y(6Nduy$7yi#9<-(hQxjDJNDn|sZ{c4yh?-}LLldUWW?Pbq2u6V%Pon^wX; zrlT2^AsXvjnJ(p+ZQmtF9r>etxWCPr0~pEIN?gh;zW- zuBo!04GUsWhM72S&X9i%wXE%Tk~X?+VmE1KQ(WPNgHowuxkAqx^Tum>`@NO3-GbzR zHF<)Zd$CjDBGJGM8}>v#QGXPdFX;({5z4O#^>!Gzn?EMerv}0{8yDm0w?=w?^%W%8 zI(=ukQtgTncVI-;%*Sp+2UGzA#K%k;_^otd|>iYZ97O2>~FdUBcp;* zyCL~ZeZ4u)w@eZQpxev_OQ(s}vxfV>2+Q@|m_$K~AQw-d3C&#LM}LmJfIOH>+u?5b zhv&c$fzSPc$_qlM7&yqU$uPQ(p$g&spX}hxJ%~?nM@DCAc|I$LH6U)~K*YyI2s)5CVsv z_23z9v0dG~XkV{A6o1pwbnFj;Qif;{0pk8H38P((LW3ShekIxKf@w2 zQGCGlpb%p^sqv%2K>=KC&BNl1T10p7bEn!Dfw$^C_*Jw56Ms0rM-zp%6$=4~_!LLj z);S~>ab|#>DiGBTi!b-BDp&u84H_(@zw&Lewt~;Sb!UNSs7JeEFX3E&mWnsJvdSKCmDZQ>a9)>Tn*o=9#F$8TeT*0U@d)RCbKjhvX3EL1Kr zX5kdcbbwC8PJjO;BG9Su^#A6?&n*V)HKc&V2YsDKWMIA3oyZ8WCxWEPl~cY!EKxOK zLh+_;BvV_Jt`ATg?`|~6B=ScTrKq57#;ke4^x$)T%Y-bgZ^I7Cxd->qH*5gW#RkJw zXRYrAoj!=_-yx98eZtfU+Vz<;7LEGnB5#*yHb9RN{iCd!EjP_-`BxwP*&Ky*BD%R#1QhY)dk%{#<^llCSFL}Hrcd#2nH}gg* zNQAT@ILw_>@42A-(U9!E10$xA`60)M7Fq>_31Lw6W(X$Hu6xfw)dvB_BI#yRI6?L5 zf=RtxVwsPKb8tUn?9@z#YFsNpYYF+1ogA|~kADE$%bmWil0?$$kT-k^@emB`(xIxD zszq$_0`E43Pfl@t2ql;fRayTn&yTNUYVbPl88@{ebWv?P&!^2Nd4rL~r&OpkKaf+B z%mNUl@@mM^lK3|WVRx79`#YG+Uz<*t3CP3*0B@kE;-I2z_$bfF>)&vx!0>{Mx3c-q zA%8?5#o>`ix?MWw58hit_g=zQz}z=t{oRD@fJ9kUQs7iIyyc;%Pwz031o)l8|&qJE0$7D;@vM+x@Ga$O*0{n zUz9qmqfq?yUK3w-kJ)9d2A@hE?|%cMP~4QqJQRO(w3?T#sp8&o*s<23=+snGP*O6Q zyVnXpi7^^LpLc(}e1nDr)LPK;;^LdZApZ-D!XmBRNw>pYl~FF9rGWl&$VX zLlP>}>X^ygQwPh-nW3c&V(zvgURvpQ@Z|>xPy0s+OqAPb={JTCy>lb902=>ZxY9N| zSD1f0!VF!+_VkW;t-fTfpR@Kq%QVHf1=k}iB`M2^t(KTL`h2aY;KeQ2iy0?~By}N2 zX#>O%2d?oR=1~K_MUFC!f5j-2EJlI3PESh6XK)my7b3sb@gYhhg3q!Z`y!>S?cS)5 zC`Oe_7mCz@n@UM9a+&m&pu<)symX>_%}amLy;yn*u(%cWoL&n$gKgkfA+(7oWUW_gQ5~M z(P|g_gUoo;gK>OO(xx+8-)U?j$mP)!NB7aMb>WJGd4P)!Q#9Z9Idph7IiW5c9$bG% zaeDelYhs~N*ucUx#(A*33_CX{Hu`^`t1__$-cXma=p7ht=W+#(VO?%-F7q{9^v%^) za(c`3ZcPuN=5z5B6^)tY*AbXiV-D2aSi8A0kkvcJrZhncCxqxO9Z{bB2N<8#j;oyu zXs>-6mQpwr03k;mFIaqEq5>h->bb`!ZXBGF(?CT(gp;P$&0o+zO#cdf|T|WZsx$ zDsKWQMCG-mMh`%|ejMC~ARz1HjE%C(KY8BDwV)GtfY%jbrJ&&nIC;9f0eNpUd3L9 zpdaQi0>1%aS9V~!y@kQ8CcuAVgcSyoc<8`A>Xf`J6V8&a6~Chot_dmx(~0hx9)%Th zO?|Zw;7>Q4C8Si=O57uz9@a$7td-OXt_yzc`xc#%hH2g%dKo?@5SZ9Y_rWM%Hp8R( zKIlul^LA6AN!o(fIocg_d*A(?2zf@;9KkC9AM6&MKol(2*7Ri+PtJd`;2gic>j5-m zettg)F$bIxeYQsPIcMT9XIu_wJeMqae3&`_bUZTXG{ub#Ip-PPB>|pxRu7h4r(7_7 zjB*)AET9lu{jQ3Fg<0{~ZscJ~**oJe`Bxu*amYQhjkKV~pm6+X+&kHmapotZ9%d_E zPV&}E5mRkG1_c*Ql}ms9wfxMXRDJI&Q{2>0$}rcjlM1hYRlwI}{2fM&kF8t0AENr- z=+1P_x9K#XNa0zO{QFt86NHxQGkHGy$?a_?j@y*gdV{IqKbW&1GTG(lZH!03x#|+} zK(|@cTn;^HrTg==wh7=^)U0+WeO?QN1JNM0+qgEpp9cR(h&+FUTiXfnAdz0m2p1f+Jb`; z!oCRBR|jUzuzbXRaWC=9VmA^s(j*a8qSSNA4n+PfSExdc4Q`yUS?oTmu6O*F0T;Y= zxYhIHr&+GpAkKen8T|IkN+>P%CQ*;b*;PmqQMu(u#$V=O)yIM1lKESllFSa zv)S$7R_d~ zj~T|zo;cdiM(_Z^I+TPJCFvv_>QP<6$~07smX4Geu(|d|^^kv`+5j8+*wsHqXu6(& zVsxTZo9{YNF5%@Lh=c73XSSS9j_B$KiWQZ8Km7hC2G0!74Jl1Gw#p4WK6Og3&w1`m zqc4Wv?K^)FsL%$*^Pcxy%FKed9G=^i;6i}!ZGDauS!GtGu|j#2$xHQVmD;TSwwEcj zZvFkLn76;rj7eiqG%V^6+$;YUjYu41_ShSiWR$oWx+F<;yg?K=YuCpvx!TszOonu~ zB#l_N`eS@!w8|1#0DAd%U(P!^y$#(ujcs&5P z2|eTsBuv{1lAwVsAMdbKv~lqgmC2YT!(KVKApE{wmQJCx%Gul8f92}U8t#^%Lip*; zDz1O01&zI9R@n=NtyY#{$C@CFxAm@v#eqIt(9Om09TocEC{bt0@hlsb7YyV(*H7&0 zU}(dO@oj6ZE~d=z`1Ym|){m)&1L6b=*PJKK;CC38tV(Br)#T#Gp4@dEseri7+4sYc>!|rDj*v}TNYLZQINF>fR&M% znH`>jLd*eZ=wt!16*qJO@&dS=%mIqVPVb2h09JoyW*&G7fE3Uc=9i4&?BETEtY<)TQVF;vx!a5&)nEJwQrbRqfBG8qoG#zZpG1LG9iDhvz-; zPrAH>nuwaVk^~FWpEUqj04_iWM~gqS|D%oaT^ZnSY453~4j`Mq2msXPPEK~bOiZq> zu8d~Rj!ujq2Qx-H>%a7=nOislTtN<2fcJlI2cR|Zuf{mrn!LBu$sG8v0)MsyAZK9= zv~>jjNs=D(M146=2!aCCC~S4AMe)WRD0N4?{pJ+rX=%O)?PAT24Os>UGqK6tha z@}T$b*fKh~IsFy=r=Ezo94~;InG?Xm!wz76A5sZh6ETpD&AVzx_&@Cvw|MW96Uf1x z>3^o$$`<5m>-oP{Qwv)Y(?4A|akhVBQn$6RcLqv}|6lC83I1=J8PEy93;@~#fNsX- zOn<2Unv_3gmOtkA7I=Hwf$RXLhSrWiZwpi4`xm^YqoE5B;N;*8^!EIxh_Atue^N!qyDH%E1XRbZ{_qhi87D0agwU zfG5lQD4PJ?{u&Yh6QeE2={*Ht=j`MSFai766mf--s2!^yzQJ24Ir@8@)5g{f*uk5wV|W=KT5o_IQ^aQF3`!`0r-#hysyB?74(mU_ZrUsfbZ*f`3HPo zlj}d4|DNsk5BOf*{V(|6=SS(!gX6Dzk@@cf^?y&)zp$#41IT|0sA*yH{%_(RA@YV! z4i;{oncpupmUsL6>)*e={1*Ym-}mu9vPDHfZk`P6?}N_3%FP2{;dmc%78W)x@Bhj* z{@26puM744@wfs@P)jBrav^Qv zJ3fwh&L$~PsK9@}#V?(*03`Q`_lwUrf7>E0iXcqu*VWdqmE+eY%EDWQKJq^J$PyyM z*&2-M0qOGder27cGzT)-dD_M7Q|WE-ZA1X|;X^T=?>`=*S;yW`FOx`h%i5N6p7w(I_ZqD^>37EeaJPwVth)j5XmPbuzGg=x~=UBYzMM4*pZS*Jv<2_rwY{!J}=Vg9?8voGJ{Qe%itww#p$ zR~0;0++Mm2f3GVB(&slIo%S{uDSzP1dIULifMOW0%CAM2vjxrHi#12OwW#=kMJF2b z>(ml<_|JdM2WoG+({R7s!S&By$uB4{);^wv90RHoDZS2v44t{fuD2@qKiOFB#X`ho zM!({ZYDj2XezL~2e)uh&s$^PRja-m@)QO=)5BAkT*BKhM{cwuoIJQ%awqFmkjS7FkU57kpyrx9kEexP&l}zyg^(N8P z?MgFP@)8g}k>V?dBG2^i{0$!8scj@ZLsf0s{OgmF)bAxA z8jh!~qv!xLj3tTuMEZE{xERqC=zLnIUK6Y&iVH~YJ6O-lkgo7Uesj~xYgr6Wm+8x- zm}JO->g)irWsFeXDe^I5(@dMS^4UDA#m#?u%+*pN35LaKXpsM*q!vA^91uN82KEzp zo*oGb+`fVX)0<(xMIXX6O-saQttWaOhdiEqO|%@)Md9s$)xP}}S>WzulDQE5=C=W4 zp>Gl?Y-J2`MbNr*TC#FuvCCq!Fw`L&zX_Ry;kbWe z@?WxZVUip3R-UkBiHKM1bj~TcYgi%=S!-sn>O8+e4up38-!WZ8Iz{u!N?AS_;M=yoovB^StJ+~aQiQpO2pMo_)TlRBc7YY8A{_WWP+T?f zmVXS(Qwv!?&6CMb;xPU5IQlI|>|jn_U5D-Vshra?!jniX*9bqLnWTSA<4?*6 zq58CmPP&^_lz-f7f(SDDx^_r-Xqk}oL$V_ZjOxR9&3KcIsW;9S^XUABUAa~%xb_+q z^{~XYz$Ev*uAah~F%`F~pENDv} zO~sz)ZuA_!Mlr8c>gsW z!5!z&!FxL=dfn5W^K&c<3XAsb7v|!8oNg$qTkcUnyT&|-^hB_t7v%g=Sid@nGRCg} zZZu;3%F4VfN`Gp7-+pPzDB>8_vU>1bZjfDgqok&yd%3dNEzr?`EscMoD~1no&z$@t za@4_FVwNnPG0;?|+`Cw(F5V z7>b}M^RJx9h9|_;;u%R!6b7mCxK^eDQn9as^?N?nJ<%ua3@x3mZi!ZQj~k4&oAG=u z)_H9`kLtQ@iM|o=U@8uYkf=-*ZJuo3LZji$4J3dQ zKb&78*U26^Crz3=DIV@o3rxo#e~#(6Dr`|lkZW2rpD;f^qL9JQ4(`LTdt+&j#e#i-YtLpYm5v9bAkV?k91t)r05F6 zliM&(@kivTP5sm!hWjWlcqc@kdW~PSaI5Onu|}wYOD@)_kAI-43z=_NAMX9qRaTGw zHlf=%7I5orBE#+Nn!1AO`#DQAtaPFlsYMpc4XU1-S{{?+H$3G_3CcTM1e|*GWvw#C zYGb@lL zs{o?-Xsae~fO@NU?H4WZK?}}n$(9Jw%1Ogvx=(4kfnP188XxbL1{lN zRTSiBLJEgt*i{VjDN!W#53cTt^{btoSt3wn(~1|k<>Y}QIqao6=XJ7v*eLZW3kRjj z+`)fo{&A?Hyp0Kj`-gp&OIlAjKRraol=!O|eTr@!PxRR@x~C8f(l8lU$Meh`zVk=< z(PCmR{Cdfkl8C>^)D)~yzEMs^f?%mz{gIEagd$|jN`tIIkNGQ61x*1(xfqity#vpN z3-WvW#@l_C#(0L{EmU|QTz}6L($fpdntp%&N8vP=DnAm)FI^em2CHNh?l=lXiCc3x4yk0vU%I9|97>Qw~g)+v{ z7;d}|ZE^}MPWEJ%@bC`UrVk56F4^}8!U#l5&lSdFnACy}$KsxqzdN*QRCDp??0A2& zSf2O5c^vBzuZn#3kwANhE=0-OUb7%_>8L}Py|`-PR39o~;A=oB$vP-~7Hp&-pE+D&(#SGc(5 z_E34U+U~9!=j&4UH^__nZa0&sfmS-#1@4d27jc^3mqSnP3EL;BB*XN&TKTnpU8|N? zI=Yn%8N}ZldJz>#V=1Jd&Uz1}9?JQ916^toGQDLZEeokPl3&1m@DX$dVXS{irs#2U z`vhbTeN@6%ojN&LC?MzWZY!V&HcrAA>J@MY3NO#|gvL?280S0i&eMALb2@=NgKui07Yd&hmE3nDf?;!27- z9#>de*RU<4VnRA~QbEI-UhRJru-Gk>L;hw_gB)QqY>efu=nOL-p%j2gd{IU?n`n(; z_MSo&;}3A55vuy`mQHMQO^*5l5P$)o_-s-amf?of`^9YqT~yOwTftrh#(4GxkVbYX zYcCWBF4wCv^BJ2DXV@#c;LF6Vop-L@8}ygq-*=XAbT^JspO zQC=2B;@eY|z6&fCs9&(e$-o_+>bmbL_sJO^x`n@)avP%JE`(dzkF-=kw2)KgsXW;a z#EPvkx0}?JQw(s-*{{hCO}_5FS&a?o@r$9mm2nKcaQ4wYMfb72Imp-d?S)Elm`J|8buxKcwWpVIu_}5*bIHQ)28KMue!$)56u|FT!Z{A2KRzrK*r@aKb zjS`Tp<*e9GOE^;%9;GppJ>^#$x~FiV3UP-c)1;e3=qSGY7TxpFx!YSx`3~Rcfo%Y3 zR>{$5f{f(&(qVrLQ{jW?4pdK-zr!~MSG_548f?CFhv*KIz%(!s9kJD=2zbmT+^jND zC-&Je1dAW;`$^UK%K80^KXNCkhd3n~__*?7`*Ma=y_|~E>n{uBuR8l7hEC8R#Tgr};$vy*)+@00#h~~K} z&BY{m2)x?-uEz0Um`h;N*)cUu6skaIw>mErdi*)LnZ;RZQCdS>mq&`x{x~Uqsyfv& z7<{>=yYYY8ckF|?iIzfsGS@lxMPj7gXSjHH^g3>XIo&O1S7?pH7}^id#H>_GGsT%< zZsr(h9%wa_xwcsbUG8ubHcX}L;$OL|B^`f9>>W%#KT6ZD8b^m`FI%R_A%B%Z z?ROR}GW8o|%kX8;VFj%E$)SBozQf3t6JlGg&_97)Ru1{L%Mu~Dr8nBECPF|Ew%k^Q zSPA^rTyB_D*llqc_~l$dJEHSZAoz!;4Zggb;}VgWbDm#D-$|e{7vrfxLw}*DVY&^N zK7)U)z~wwMFx(yI*KCDiy|A#*8k!UiCWGpccuO!(-9r;)ZVxgax#t06Kt#65l3Sdr z(2_PzyO!q)e6D%TM}Aa6T0X;Zy+Jf{TGyBQo629&yrP+DJ>FU{!##=EIZuU%N1L70 zFHkMt#{eYuVrQgf(wjfXG!Z5}Y%&6TFu8x?kqw>B4@+~hgMG{QKqbX+FCrj z-g1GDL?(n5>34~0PJv&&lq((I(`llPR3)4PeMY52Vp47Ej)+^t#}9Z3O+G!M39_aBte(mJW&QI-pM?yba^W0g~BW#ox`*vKA`DK#>~KI zp9jKssFeD02q3Lxfs%qcvusH|ckf;OZ8Z{lks=ZJK?U)(wnTZcENQITB)E2RAeUR= zDs3M{qzDA)$h%n54^rAeZLBLSE#J+(=*!go&6pIjZz?^KZXY~H z_yIV@wS!;no1M*W-|84{%(BPl0|*7$X@SD?^&J@=R!!yt?xLdxlSE=}&TU0?ae86Z zdU(vT;pKrPtuIg~yY|3vxGlv1G35I6G`%_Ue+#^h_VNM82z=w`4WPM5w__^hHLJShD>L7?x z75vKMTA0`<`H{5zBnT2qaM}cw&_JgJ5_bFqfPkIYJ?XY5Q@SdG1u4huvbN>o%K1~GYY<VJ23qB6XTQ)shhkWb2_EYJN@!h zyMyd`m|sM(gGmL~A{uXsC-tZHDF}~+SVn((BG#dEeG4l|JqQmQdW#-8 zy8imx%mVHAzWLrS*^7ScTO=^#JlxdpP_5IKs$EU!tu0B{4%B~FNJ@f4@LvVb((Bmm zC&!Rk+t*47CtxbPoiq02Ewi2L9iQ!38no-=L6Dx91*KM04sDUS?lqGdfcG`t4yZelGvJ7~PehUu7u|(+DC%8V| z$)CjIl zi+jp#vo8>Wz*{kl8&kx!!Rqzrw9FHd`Il*Cp)}c|vPFc^c4`ts8k2fhe_wR92@%h) z-t-xD@DRa17bh2K|X#GSLgas>D&K2w8mcwNv8JfhUGFHdu{L0$ znwfO8o5B&ugqd&X=pU{(Isw}6b+SkX=Qa)f{B9;7Oqy6rWmq|B$b3pJph5hpZL2DM zeKJL2me+P_m^&r1Ncea3{+R!Vo3)He^jREDJ>N5Uzp5mlY6le#4j@5sYg@MN=mYNJQqz*tgBmca2?y6R2xh>2wY(HKQC)8HO7n4 zL!>Q6_^As)F(s!&%TgJle9zDB&AQ$43_X8b7x!6Qt${Jgk1iKYaBX%ozwdGpoT125 ze=NS{87*J6uGKq(BMVr_?)VumDH9s6g!*c5?*c;^2YN=~jb^<%)aw+;37`zjHB;kx&<3oj?www2671~m>N|ugDVbJViVr)^UY=iz_E>TLdfTPh86z1?Qv;B!&?uPj)-PA;MzoDG;K-Xn$o_waIzP8q z2!aO%W5jo7b^8nLZa1n2C8p0idhJCX`j$_UJfO{1oq)}!KMgD!1)ISROivr89{@Z0 z$W}A>6;!bsBIkZM()29}3bY=PqBZmsL$8eW2Q*B4HJ>oP1H9a7(YwMZL-_QNkcg-fe%YbPne}Z~7ak*@=FYij*@Ylu^jeRll$56Fmr!k;V<` zh8cKC2tJSP8E~(%5e4U4Km2lbV!p%-HGfn@F7L~eomHrj{bfX14Otb1tv~nK@GD1s z!Ja$`Gbx5t!6%r;`GbhQ>Sp@jWgOqS5CiAlsQD%i0R_$ zcI49vq1)G*&z>>xXk*E4c+ibed@2T7oNrU!B=-reRSEl_K7Nj%t!;6$Wb%YxdD9sn zQ4Qh;xp7sq5G&rhl!1TMwB6Rbq?>v(?&K%%KU+MF9`X!-2qw?`aWO6)x?ak9?Q{}< zw#IGi-KywB{9t&y+c}d9)LUlx$uWfhFsAI^gK4~2x}md(R?R>qPe!p(o<4GXx+uBRS*kuok7 zsIz=XH)vIRUwn?GHi=hQV+4)3C0uAUfv;KP`%Iq7%PMBwc*z0>LymFPMN@=Cof*uho1jg=Q8Q*|hjk1(5UnI77n5 z-v>_PDzG&gC`*4i+fLBheTQu z%^)MOp!!3-#q0;yPY<#LuH)r8cCFr)y?aWCO|(!KJjW3Bye}F9DI41#!wKCOT>(A@ zqzAtdsOivxRhiALJ+FG8b?IlpYA`nr{P4ILzjoN>M^0PFQ>o*vP$y zwE^vVnFn<_iO(z#h@tDJE7u~o;1^yJUK%jLt5;p`4=H?3X~7Mx&Cs53G{)>)bH6S6qMK z=Bqs5z`ezj3*kJRg2U@ugJav=w3Z1dNsv6&=c^en|Dx`ktBWM@Nwkp_D~^$sL}Og^ z6|wud8sb9nY#_BKB8n7W8ijbJJuL1>0ryS9+g_bH|CUJkQcnir|xs0rJFI zc926SHf@00Qm|vxv_vK}bDpxYgwEhsst_?BP%%OQH4K}gj2jGrZAIJx(+Top-(+a6 zh~>l^T9)xEnIYaMvfKgc1*U&>Z$8d*S?P;;N8DA4qwTK-s6btkO$IdpYDT=W&cJE& z3jaQbKaD%+nY(yo_WLPrZ!_fExVxnzbPf2n^=3*O+OD_SGm@06Q>z|#-@706h(h9hcadXw%=0W z-x}HcLu9UTt{)gwGg%Xt9=sHM`}}XDwEL6>d11+@8I8vz)*KB(EnVQ{b-c9-EL72c z;|D~iWjYcnJ?>nQ9s>vI>(d(KzwuEkz4MBPJgf7ZSr+Kg;T4T*o2($)9FtkM0EkJM3KV5zYLl_9hfi(G6QnEm-a@`GQ-FQ{zZ zJo=Yq8sW56wpkN|;1DX&TQyg=5ABk(SC|lj9}CtC&Mb&XiZ5p7e~Y`Uh+7>3i0vg! z#sa6{XS0BVCcUbxTIP3HYg35=`Un^~?GoksE}};kZE731G?#xUZsnM<0$gaC%H-ch z-IpH3w=>Cp1ee!A5Ou|fpQrJWZ*LD0fxbPuU#T@nVGzuDO;%b(V^^=N1vG^obS|N- z9rv&+ulPXGpMPA24^{w|_}pghDZMOn>8XL-YLuG&9Yn}@|8e6kVLY~|A!N!E&P7N1% zg4e<4D?OpxCplfa*%dA}?y-Z?!>9z8E$A`jBpjAHQ!==GBHsiU)V7W&>($t}Ctngs zc5JR|`+?9bcP}`$h!30w9qpg88~c7tk(+HbH=k05QC8mUsmM7bLM<|UUsEfXx0 zk7=jeM5sX`jZ~Rud_fA5c??jF_`D#xbkmP6U4@ z<%DmGb5bTLh2W-8C_4##W@iBsSxJj?sf*WglDnRf;w(dgN(+ zRNc17v^3t1fRm|<@!_vxF$syr3t?dhrlL-4a?nC6l6Ik% zwambQ&#{&Gk9;xrT4o`1v5)p<`B_|nye|#yCDTT{k_N9P-Mzw-10MnhLO%)S1?|O* z8yOK*G-~vFYNSXqCUXcNA4GhJd2GMXMv_jBM5h=5D%i~p5JTiuW;xaS73Y8KA?vO` ziR}Z*#)ZA>%r9L&a^9OunFP>>J069a&hxyyYQcU^UIRPrqffwOE#!pfA0LQIC z*pD3P%_;9r?R9dY^27iZve|#ln#_aunxUVgww~M-S51FE8pqi2Qz-7?Y7;m)1sa5l zKzFd6AJ1iKr&W2OZIkO^0?WtW1{&q4lx)jEPp)E(cY>KqnqA9s$O9|XuDY7Qyu|rH z3Z)#+g$WGiy|)qPR~*z1JG7KL<1$GrH!)Y_QVI)dcpfcNp81VloOOSxPqmO!FVX5T zK{GBIC-mR_t+4q%Kt>)+Za2z&2j9}hX({hySBuPLxGYv0pgqm!XzbWLpi-iK9!TnK z-(4@BM11ieU^nH%V;_aEl#pjrOAZFb4{X6l%BlcQG3P>&;p_bF2&*!RvQYT! z?s-&hUGEL`?_jO z`Igq*(&>E;sx@#psa_OrcI-FuDJkKOh9Xe`z>fIvwlc7ayD&~WmASuWmxd2vDi=6& zJ#kq1>2&xmEG@2ATQnMG(P6$WAtkonqPW&0&nLV_ zy9=*=^oFYHiCKRaIO~p>n7Pgd@8f<7M=GIEWK+8SWf$rD2`=JGVPg8DnEsA|0V;Ct z!5iI3+WsZLBs*XR3m%3F3&1<~Uv58mbZfp+cCw;yc20k*o@+K^+}AWug{}~fO(}vz z5r#wvfhTV|CfuD+e)EM92Il@xCfvP8shnTTFFmtI*naDA${F0?oLVJjd>@K?3G^xO z%^&`e`hhX4d)!R{ri#Z-S|1EiG}@{&6)ejohp3&n)R191!^JZ;{OtQ2E%1u3($3EM zp=ctMdQpGiTjfRH09uV8g~j?4MYS#g>(J!mNZ&Vo1I4dxpaz`TTj?>Ra4_z66l5~i z8cI1sZ%?WLX$DVFFC-sCyUh6RS9scpWrCkoB%O4rj=J@~ZjR%vhBX^0F)2HsnE+v9 z(o5e5iYm)<76a*L(U4^0aljysVf`|jeO|qjh7fxRAVt z`8ISqsHr;tfShxc(06N3-Z=h=)wj(=_iONk0yCaH!oz2BN?U#?2wy@9iG#;cut=FD zrK5jraK2lMP^0nKqAojXB$V1y+6~j@y+%hJyab(%8++`jnSoR358}MXQ*EQ_4G1c> z{245XrK_c7%M<3}S>;t33e;W8F^eCBO&jqvB#H+iU>FWpZ!AzWi!+Fs$s^TJ`hP|D zssS+pbZdooS<+qV1@lw#`9%S)! z`k>-CkuYBk!LSYn^`tDBdryRfq;5j1Kay88;B>W8<`?=Din=_=fG%KLRn#}Ldfi%= z5Ab#N>3;+eBIfZ(VGiGzEN0Vplq}#R?eRX#=kThWzS#bxb&Qu(uNm=mWZG;awp@Rr z{r20WHjSBM)7SJ(W$sh%KHrgKOj&HTb-~Y1sYy|W7m}@VXr`3kI(orm1nn=Z+OmYd zE)P=qFU~pbwp^%e_ZY1a%Ip>k#JG$0G}l0x35}Upd;;b*Mn`oggvpaCI)ulq*F*$! z5Eh#(83_=w53wavYT&z8uRl_dON5$6})Kt>p04;xdGk^%wP zU+pKWZ6{gtLV1U+S;*z!;zqwv%1C%2ct;=rLMKtI^vp@T#bDOeqN%PDMVi}rFZcmBN{LmD5=`hUk8*SycD&2p9zCzFM z?(=qlVa~(uenyfr3ya+ec%s2E8j=HNp9bCFSM*Ykq@=AF#tX2_ZGF=DIQj+a9O!F! z0MyBCVFlr!zt;bJ;Toz-c42DlRdMBE<>*zCAW%nMPj!S*;Mh`j==^o91>blhB1VMF z9E?i!jTts(AET%_(GW+PtzUo81(a8n%WQ0-kVHXAU#J<6$A!6(<>1Kmf`yIAcEN5{ zv*lSw`V_06f2RCEj(EDWpvyl`IRFr~8`(24+seKF-S+Y#P@!XPZkBo+S$@2R`b_+4 zMp@;(OAcne8=b8pS&w*vfz|0N7`R97F}5cfK{gQ;H{nyeNMY)B3L}5G1s6Ry9@(ij z2UCi{Tz_P`&!?#~rleYnGjswlq~4Jvv>@V9cJZ4|H_anxLut-sma7p01_tBx?Ef&Pq6c|dPQN({V^zwIPQNp>|ku_$k zJ}b5LjceMo>j(CuDyIv{ROY*pNq-f8yUvZyRu$xAYzKB+?W2~TZ zQl-#;S7a$DORb26-Ry3%PXQ)WIikezwN+$)s}-$gX^Q5(_WL2-+t)y(U~#Wa)S%PO zI;;4!C8g5~UcZ0Z6Wo_5cpk-~h98Yx5yoxlUN4=U+7KI&aOJ%lp1(O=M@-fSa@o=d zB!%+9>Ss|gQdu`-w0NE$^ItdOPQWc*^t*`3MUCvTl zZDlgWqY-2w0={#)-qvK8kw}*KQ0A?sH7SYe&Y67f&b&Bu2o(|a{=n!9Sd96fId{A; z$wd0&?N5KrczbwKts60)ZaNC*vl(~J-3!}2zzeX1t_*E$H3@q{iTP#*SQ93^zpVNg z3a;MGHC!KRaz@u)ahk9}Bt}A0HW5C-d z4hU>n^hTw-K}UuOZW5+X$$r|NTo-h7>-uc845fc6fMQl!mYBAhtn1fnWMlQ3z4+BA z4WI^rIsxx{tH`3HQ#FVUg*6>T?nP#ihFXfIwJhspvV|?I)I9L`+otn)Hs@Qe<95>( z6?)Qedfb>}zNB3oRP1b7N#}7;Yr>2UrC-}G_T;|AK^W>R7 z852^{9dLFjTjNwv5|(k4&rAcv6jAUb0i5n=dYR7HK%XQBq7_~+sG-hOc)i&v7}#U& zMT;6xiKwWJtV_xf0m2WqejJD}^#NGw7cGCsghxl+vRXNdq_lhIO!h43^%3=&Z*ZDz zUG>Eeby>P8DUhl2^xO+0p^Mj5sk@x5AcPSz)+G^jf6FC4MFUB>g`F=Ow)$1A7m;Ha9 z1C&(hl4pZq010NymM@*OS-GvBE1x~pe6{oSH@P`+t zE42CY*Ren~ORW0#8w3m6=k7y-z}-NRg!N!vPmHZEJ!t2=`>FWypYMp)MYA?y#@c1$ z;@${_O4&W>fNk4MLs7VElf@*iHnOnSYnL`6vBbIS?NL3McphqUQB>8wq+KaxZuD3#3Rk!tSN2IU?!kS5y~VQkGE@li1~ z?W1i0AjHmS$YFfe?ik~v#|@jq495t}+uMFB0AE0$zh;BR1^Zx7ze2CCvTY}mQ)sGl z{hTTof(>aM=4h(9CY)5Z!F8uUp?8|#yK zq!c1-)W9V0co%%Q6K~93OZX&9*vZ<$Q|3y4=z~<*07pm{(1DeV$IZ~7#D}tC7XH-` z$)LC<-^&rDMDJH~<>$RDmBd)lZwn=JuZ%0^P?j~}khFbk40skH$UOWR?Ze0yd0*lM z@Xw0pjmoe!wdU&2xuk>igf1h$-h2dbwx8h)^X31MK4tBCN|uoq6(l<#?ULj{8u7rl?KG^)v2F3R+*FyJE$PRAxst&y0~mvNA-M_SZ0Q1`~+6rzA3g@&eXl^e@zEyjh<3KQ0z-Btv{4A)(}g@)GI`zspi7>z z%iYmw460&q8ok&M3p#5o-8y;>^`mH!e9PTjPkj|oUmx`7pa0^v)Dw^@z}BRds;pg9F*4sdT*9UEIS~9Xxt^0yoe-b<^Xvvzxt#KR zWCOH9)p8LCa;dsYQjW zPM#RJXKowCG2vKAu4eBc8r@0+5lM${!Ik&7^gA5gt#+F&9(Sh6ThHBlox&(^xlMIIO+$j6zJn%ZKIchR3586Z1|EAt|nvc!^fz%1RvEBcb}$ zKIaxI#Vxn(FC}$<#*qnI=v5Acz5qolK5k=GuAqvYkwPIgt}2$vqXQI-AX-$tk7&e72@J;9BgRWVP>=UVm+dKa`t?y+#fbzl(%b9yWaamg zVCXDoh4&Xg9_Aa%k((tzhAz`!HQX>}$jkXosF@})S3#+o$b_(EK!o0YjnSd0mzv2LM~w=25qr z7l)Z{)6GLv0ZYAY$j1sY0!ao@B;wDM`KnI7!Cp9ZO&dYc9_gI5Kp&W9h*d`EWH zEHDAav;+()U2js*Xiap-5IRGC7-kXWLTf(PpE1uF*{|C|&&_wsHl@E{X#(elz93nl z>ry0kU%AAw?)ImTrV-)L57gW0B2-{|jawR?T%ej5uMn=&TF0@^H~A-j{>qLZc(xM6 zd#;pju!So+Xd<^hIp^h5@Pl*7)li`DaD-l-v;s?P!G{8r!pPLqUm%sqcGPe9knt%b z)?*tmg7Qtzbd{e(=W&`CdZNo8oUC(JU9P*nu+kwvsvTP!u(>zdM!86j5)jV@7=89l zZ;ma=J#({hN1>C%B^mpFC^6+v7bjQnND2zilhJ3SppDm)Iq1JT?PYj2DGDhyoCnQn7%w8jeux-nA5Slw zD{;u@k#h3j3iD8cD<7-C&UONUTBuXfjw=SSDi|L~^kvz9`~{mm3Yoj*uwLJ; zr3#lv&M<7xf$4~2jpot7E7V=Dt9anb3<4l?7abe3tdJ|yy&Ax>`2GBiNPTd8Cibo% zG;z$|P;+2~HysL$Qv_=H$_tCjNaWZgQ$`0a9?p(DgPcwixatfR5|4!SLT#ai82tsW zst`GFg%&eBdX-fQt#@IIX06kIg=y=YtIeT!%Pm%n}SJ zjeeTAuQX?8uQ2AMui2&dx8m2w%K)iw_dkENw3#0nsw%jU^JU7jeVj8u@~}&mrQ!u| zF8S!1_9~kB_DMWhyg#O~NTGko?^kj@xn$9{Y0rQhZt(_xgx=F)x{>iEoF(SqvCU8}DZw;aw2D+@IEX3-BT5qN3wiYCfVBlGma z{9U;rQ|ie|b~^iwHG|;A3o7&5iMTXE?uhC@hd$YY)a$R>r5h-wTKVQ;^W|Z& zrF#!ZR9n%1RGTxqN7Yyo|F4a6TCM~@fM{&nws~XQ_QbYrTNB&7v7L!AF(q1>O6~PvtT{kNU;qV+jZ9*iaXXiHNPe=@YtIt9A@L zCH6g33s8#F4rsaJ@(CZt5PG%g)W`@F!L~Vxx?A@Nv4oEXg#~24U2mr^;Zj=6Wa^h1 z1{sBa3lqE0CL5KC46(C`{PyviM8J4k9EE97GQAVXSVa^aEFXnouwHI(q017+zME!k zJLl1ngRjz3+#L=k0oO{sAiBe8+p~$tpNHqhcR1ej&BRBg=eRDJClf%6 z9(hvMGhPjEYJ*z@mpF^8S?y`CHnbD$vw6_^^qJlggG?Lp+tKJ;QO;G< zypSwVgd`o#e_XRKu|ttjnL199ha7@z{?Gy+c^O}J!n8llzO_@H{0NSs-n&le-!0%j zfIn}DF|DsJ%d6m0d=K8844k(Le5wwAZ5HoHMu~oKP1)SY_!s&aDf!~kD(628{H>H} z06A;qswFFd5$k6pbCDI~q+W*m8|?yF7No?dP zr-n?b4^}oxO?3>O;PTP%-)L=|UV0d4$#ihWRU;DWN}gS=Z=c?F^cLbOXJXKtJJ#CT zd&|leS}Xc`i)H#|m5u$}`ospXDBV}f?_cMd;^tQ$tLWiBHY z;-dA-NE=unG2;3UMY!Vu3quYZbIV>5C$Vu`D?(_^c5#|9Ek&$xH60ZfReHTWmY`4# za)L)X>NmErLG~@yF _V00aMUT>`i_r*gvP<4xW!Af4+CNu34et`cUUU?;lr`-O z0R}gL!lK?$ZJ}7x%Iwmari1uvP;tsud+UYXC$~F1v~{<5RE|9_D;2+(tXJ0Z!a(o( zA@s8=tIrTWjNNX5NPH)fg)Y@})oZ@-3K0~xEXhRH85uDhxM_9`5H`#h>o1_*@!6MN4zI?e;GSo{ za?k;FsIlHYE7EPC0SDv}Q(uf?G=iHz;|pjQ(*L9WUa{LT(kyWmwc3s?Cl z#+Jz$r?(0F_*hi;uB(#6KxxbqKqFxZoP18L;cYu$rk~xw>iGSiifA~z6S2gbqZBEG z%c{ywEK0QLRGUg`8c#L1cXzF80DT*R4*TiFmaap8c*lLAg2@|Z4*aY8b1it@q@$F| z1cS#V-HmqKp2azCbb6=<{=ruRlD(=-|H;Cb_G^-bVTq$d43rnd@o-(!zNE?L zJ;_jh{}6x&R1#83VhgTULC69=3~W)5-oyAT0pdV_$%g;1K5c`b`)A3jc`bZCvL(Zp z428viN}=|co(uA9lI-;qIK(r%jLE9j ziBr*ISbXSdg9%Vwuik=otS+M^*@hh{J_w@jOby(g*VYm|mJSF@%NUIJYTZc%EwOj~ z!kUc>w{L|Q4D|~FL^H0tb+4PLYmt){kfaBHeeC{r!V=MFdgwQ5XEzlOeGuM963Qy; zZn{O024X z*ep5}qBL0od0v8kp$2+G=HDL*R)#Xww0=aA=vK(q2dYa^2-DII8)j+W2AwS*zWEt5 zf>4l=q>2unTh6(X?JmSrf4F7QCr{zBd}6|bhVny|G))41fOZSMVj4WCRaA?@-grWD zK6CLzU&fy_C8>mQ)mnHi1q-O=+Vq)!D!3na8pAKx(HN%Fe(^`@j<|W1va2&sLK{IX z#-fwi_~%f&x<&Hu{w`Zt^8$>SG}g6nKR%RanWr2HvvoU_p<6sT>lTStA9M9y&(?B6 zwD?icll7_^k=ntA&3J>@U)dF39ti1Uos(t(;xFScjo>Rb>H!W+3BAvy^NW zzfy`X7P$xGHoGgnJD9RVz*SJLA~&`5jWb?9J!pbjqiY*y+!}yKVKYIK;64G&fzPrP zJ@7o|bX@}kfgLDE0a@gs9mY}n)`S;drvEgTged$K#`=GG@%V7`}t zVk=;wdkz=WZ7U-gvzZfBF!Ed;#;p53i>lBp%dCwoRX4-qv%=DUTJKivMts=lh%|g8 zg6g4wGE>3&Ltp4=)OHa%WJS9@L+X$XKrhnPhIbs50;S4H{}W`ePB%arly}XxEr>9j zbI`>FhFPSe)*%8JlHM}VvNPL?uCQbmDJ){3nNq82*_G5|+zD-|+eL!QR z9M^1_5rzOB0WqO}$RSpeBE0k$M_j|FIEqn!*^|cj&o*rbN5AjnHSQOJT{mkP%06N* z>G-cHJ8@?NLey|G`&2fZ)4Fv?Zrk%IHX3%lHZN2zD2e5gXiC>R&hO&1WJv38`{k_v z&CEh@H3ncDAOazT6ugkKIfjm%TfknTr~je?>9(eEUcL=~%aIfJVl6rXM~rL2(~Be) zZZ&tk@xqxP9-GQ&@}c~saD4$-;e0`Yg5_=*J8j@U4IYy1jW8C z9$5v~*QF(wY!rq)dh^}NU2Ijc-ivt!!cCeJHT4LDt6q(MhQp?T%$3|v-ebOKh$1;uMYte%3@zyXMp3e8L zFm_i*#naKCFcKR#&yU0yBNabTu3@kCib-zY{L)T;qBnIGnHYMfY1PBmCGDc~bqG#J z_``<(P!pWu9xI7*!~UB3Kut?JkIRUP2*V9=1%%&F4W8KarOYmMjwit(E4I7og@X8kCNZTZ8-4eAR&S^;QM^u}jpc(od0lSs+1U>qBR(5ae# zw?*Ybu_Tgkjmpj6V&Ixm|1bPzoBvu{-p55dnnuCIX3m!Bk)R*pF~dJY9G0p+fEuHI zoVqKr+4nf>d>uLNvB&bu!`L+?y0=kYEKdtp<(*4IN2{p|TsE7vmBU=En5M9Q(R=n9 z_3&=el`iEb?P=x*TZkh1@ipHUYDI~Et5wFjt3L04TfV8N5OtqX+;&U>odt+E(j;R? zZ-HiXlxny{2@Ise_wz~BQEC8GDcD1$&`ef&`kE^|#GgLxqw&m#@qnYu}_M#8!YacW_ix-$6hk_{HV!s>flrr!>%%5BYVq#zHYmy zby)1<7aXYgb(yJzU(}e*Yg^GBRt>J>HBxlR;yN~t_3;#WVT_=hbQ-aTr1kDcOTzn! zXgnY2q0_A!fQMwIci-3i4cq+kH=eJ0abqxrUz;|Ise$(lwWLVWuNK+ocyIXrK)?I2 zBvm%D_3qqVx^)6vVZGdzQ4+I%F3xW`%~jdOtnbS%m}PkjF@xmDCzktpXoH(LG|D&I zbfewK@4ky~8AK;ub?Lc+n4@7SI?Oh}OV8yw_N_^Ga!_1$VR&Lar{rj}qkj?+P2F&Q)~6Tk^aG#~n)5oVD(MqYz{B(9>iu z-7D4w=+P*A``cU9L8(xH9bO}yDDJ`7XiUB~ujLPaNz|z@j%-7b%x30Y6ny;^ZCQ!# zq!&<^8}Xk@cdsWv%hkWp6LzsYnJZ-*T&wpSbuEiWEm%58&4||Gkyi}dUHwpg6Q5S*3>@ zWW>hCvBC+_(GDF)q@hw*FUJ7#^@@^B&1$KC4{k;*lVGL*2s{RqW#R0l^mogs0ZFgE zCbhfUJ$2+8YR%^MD-UnP3C_hM?pgC&VI1w60Y+Gc1%T__OML?pwkRm^S zwhv6nJwpzf>M#V2pwdH={o^BVISjltY<*^ynMAFTGhvockA9zT*#K;4%g~Ocz;nIV zCp(UMzYcI|@~7GUXDwuk2!I~Uua*`Y2k%_v4l~|g!R4^Ns~mSAKUPvAagP1jNRDbq zQr~StZl17ts?PF%LLoqC+!#72WY0UIgDA~e$q%pu6p373g(ta?gB64ohlz|I?HL8G z*^oREDMdJ*j+-BU3I%Mo|Et{yvHzfBoEP7wQPVFAO+vR?9$gpC%0!iWW6D;DO#jI1 zuAIKh{_CME_YYO-K|eZrVN$$r+cvhaKn0@*ULzkK^2DBhAlp&BpaGSFbA|tplQGzS zT}qi6CS7V_;d)O-OH-9NdYn4ex&a2{vsz-*)y9x8geNSV_Tu=#TcxoIdKD+~xJ-@E!Rk_>)As zwltg!W`^fpCcsi@p)2qYE)S{0wl3iM?|Wv{frJ zKZv7z>poLNM@^1=3&h&q`(EOC3;G`rWqp~2ueHyAaaNSTqD3}2rK6tPCa&>`zmnWx z(npTNaIoF<>AxpN=RRHv8+&e^20w*HCn>ihpz{hYG{E6QW52 zG2Ya_m5Z*yizkh@MOR~PKrLk=Icb0W6!P_PXP%c1_^Tbxjs_R`k7Z_Eu*X3#x`ppY zJy{oj_>|nnWD^A%v0+;(|4D#c{Yz3OqBHgFDUfaOY~tTTjG9y4AcAnWTUwoez2p$( z+?zPr1w2`WB|#QufquBF9$XX$jU4}8n-I7Pep3#V2v|!qd++nk8rHLjyW+6R-J)IWcVGYK4*u-a|_JDbR0ao>7dxr zgb68oPGJr?kj=Wk#57iowQ4XhtRV2dA^T0@o^T{hXDI9HIwt<~Mq?!h+480f3nb8} zmr1g=)aX>jC(Y;=-1}LJ(zm964sXtLDF;Yp#u7_PjH5_Zb1y3-q`Uf516a>aK zQD~Z{4=>`bf{sHFOOEA!RKUj_y>|aab?vtOl;2=FRGmtK2ZHX{G`GjdB$HSGFn&IX zwM?!fqYh1)8T+q+P5K-6F_dRLtJFGdFqM#PcRyPH#whV`L6|- zhZ-vHOK|;-a+>4e>&nCCerT_8I9q<153Mh$xRhQFL_N z!G_oi2^_#rF&x=uCB$#lT@LM1z9n*tWtrO@s!68=#4aXEIg=R;PfX)W@C%o)akD^p<0vp zQn@HjI<9k2ucP!T0c+iRIV;z~4uaE+C%CDp6C^F~hAWL~P^co_(&DW5`}ATh;qI}r z#byryfxk^Y<1C4rIh7ZuUo0uJ7FdfGv)g(zaBkaXC110`XP)DKrD>%>@%Y)CZ}E1Z zu@&n7BIA^FUH0{>08p=B+*);+d4yE>VVC`}-K+nOEW&?PLi9=vEu{$Zi3>=XZ-_PZ zVjGBJj=8J3PCbl(4lSRhE9h+p*1H6)mgThrTrq<}tTvgtaxdDbofE?o9?&SxO{KL0 zuh+I4WS&zmj8Id5NRw5FUC#ss-c$>m7SQCo$07$)X}|CmH4hLFQpAOjJ3rlyxpsW~ zq+qcr=Dx1vJkwsnGw9j0vEH(PZH~F-wMO2myqHw*CQI)QZK^O`u=B2mzxE;Z61h}| zdX3?WR-0n44V*n0qDfcsP;0h!)0S8~=cwBpq)N`vK_dizN?*gj5uU@_T%^R;^dtVy z$K3jPu%cKo7zis>ra(Ypk@5U6R!#Uo)MG^*Ow~Qg$sN$1Q%J27AMF+B8vzMlREosi zzDc>7Kv%xa7>CpQR+99WG_$TP{PC8NBv^K(`(PL#H$SSBON>36cR^9ln0PZ-aJuV} z^t^|Vbl<6emXy2yuu*Z3Is~WiCzirhoUQ>JKx1e#HpHduvg=9Y+~>6qJmXEq&5MgD zK5%Oyx7?7N_6}K{ZB;vRmDs=c|GZ>2*=23FI)zWeS#a zB#Vu@lF{Z7I1AUxd?%5}AZUnhbh`L4{uL6_6p#BlQ&wx+VFBo&!>kPbdi*0x^!5zd zFkU`?AihyUJe1ejbrKpXZNo9Mi=E#oBxwMg-{P2%!i6`09Vummd_Qe02bV|ojjCex zrWJ3v9~YAgorV|`uK39V%hqC6Yt-_qx8s)#2A0W7lHTgkPY-i{F@sH0*0_gP1f){` zHZ+As9(bmgfZ-bo!O!r>Ie*Ng}0;wm?9GX4AA~CE?>a`sG;%F?^bx z>J(y_Bd(2L{ajo1^i_!DpPuhr6u;0b*{T$@^A%U%3~*sfQ#=)%A`ySOq{nH6DqG=y z_TCfQ@G~E@JL)rXXJuLX$?9fAAm(9VYWrK2*7&$UNV1Z)r1K|Fo8vh6GMgcPxWR|R zrtC>=5FgYy2Fres>f9u0r<;sFWFJbBLK4jmVo7T{p*Fg?r*?S%g*;VM5?7yQFBJcY zjzUM*qpV~7kOCuEAHplCyqY>Metmfb+3w;l zRCD}a@F+}D1R+yO7k446c7vFIQjz|bPQ%v?cYYgD8t-lDaHA~#R32cPP@0BkTlk)5({gF)AMG)WKt5W1>rb2s^yKU{7O!h#yJoFRsf<=&LR6J$Wpb`5! z6}^L{Q~y^i^g@-5aP9kJg3kS)QN2mkwxoN%A=rP-5p}srJj|74N!>by6Hn-qhi96J z$eUyJvTFeCC9H7=7U?j5Z_4{z07pkel{B|y*}>nKbb<>mhHausRd8W@v}#Nkpoz?C zuGP&eyOT$f8$l>1I%=@y(jr9$niNrZp^j>Z%e?;XZ$LeC#WUucrEWw4r>II_d(lZabC=_~ooBs0+i-eGVwnPrm-R`WeYz zhbWTzP$BctZ5Ugcc}$#tF5STF{X;d`)!|mQClj3{m6@uc70x9Wbr{i!y|`Z^ba_D_xUm zf&9Cm%_*Y$mQIxr28^q^rRdRhFj)ywV~3HEcSC-}IF-ea5=9^^5yP);!>alIt_->1 zb&cEWzA#=C_1K@*Y&hXocC*|a{9$Tt1*{AD&cjC(us90dNL`9_j*~c;8 z&G&#OAOh0m#J7I7w^zFUBw6@^eF?=r4dGoJlU*H<(vYBSNZDTQ_-fE$#N$`Oe&?g#2%$uM13{Zc z;w2-O(C`sM+EqHkQ>N*vhC) z%Z!SD>w6R$nvg$8WsZ}KpJ7hh6X<+j6D6Xf1@lMQjG|Si-14eo)qkLt@M5 zYPk04gtLaiQX~tW((!>`^|a#F*?0E*(x)TB=$7=zzQu*(sUUVHCT6UtXjQQPBj2w) z;=~BkjC)>|q&-*Y@mOcV7OOEdler@vXJM^3a0@!++jAJ6VIkbZP*-=MtrP&2Jpue6=^*OAD9&{xc{e%5a))L5is@{ z9{usi7cwo2Pm8Wis+O7<*5Ber3WpGX8cO5`dte@C&v%ykMYO3w0MGS_%GZa*Zmq03 z(wC1Ta7DT<=sN#G<{?y#{)uKYwFm{4&ylP^eWyINsgvG!XmHv}!_d32shGhB>KaJE z$+>6X07bAEmFBejH?E)&(Oiqjuzw(p5Qf&$H+m|rAQ=HQu&qHLBy^O=gMAl&MEk4~ z^imx;Hj_c~{?4h3cY>{C)|FXY0G}nl9{M7Ih|eEkt;K7O1{Jk#R&g-gP(!vc85Xm}f;36T>EJt_OujGx1Bu z$OEz$$f5s&$?dY8Rcl~+>(V%6w|j-&Vm*T>%KUH|R^P?5*Wd1Il>)LQ8*dz43mQ)z znorliIB3i$krPeXj#yJ7kc`bNQ4Jjm^7z$un&vuR&p%^i_E&JVam^Q@eb!hiIVC@v{IL50q;xKxNedQ2Px8auKt?qj$Wn(H?y7M92~t zsZp6zXY`ksRvQ2#^<$}P2A(?*Lj^qt{S_{o?QmP&YSTCyNJII5)WWBvSkGxV2=eyZ zWwidthHlJg7vWK4V>RXyJr)5G&uo{6U?WU5;8E1O=eaB7Us(1hLnX$U%vc4t&lL>Q zKL*S*;%ta=`J9(F}i-n(8c+{Qt(gL@-9y@hm0&^OaR2U44U;70BzL z#1+p#E{=^i;yBMXuk?b+{L%PhfFqobRx z=|pVdNc?qhh}wc>Cy4wTTCU*?JWJrOinQE-v+eg}w?f-Cc)hA(jh_b5!|@L#Ei8Wd zV}TJ)C}fy4E#5~#9LnT}3tZo~KQXhG$}$CA#0?;yk&~J<|3yM7X%x=_J?4ES2oiji z0CFr4J()3oj<$IOOsN>k?-Dg5U^viWexaEv&nG8Tfh;KKz zDb3O@7f4=mvc-Y;HOz|~z2_#dQO)a*#1?Rk7LY7|&&A+yQ{5@c4ndfP*Y-6IDf1V) z;6e#XjyA4a2IC&5;GN^jRasOSr4){=8EVo$&-10nZy|n*sKw;Z;07J9kW&y#qJzb4 z@ziV;`dybKTD~V58?(&l05K$_>f zZ}1d;6{A0I;bfmsn;}{{hngbS$A9$cmlquR=iMwH!&Wa*=K$K~+dLeWtX{8nUbNCI zHJLE1ypZ5+1#V*VwMvd3NfPv02M?Q7bV6i*E=5Qdr~YRMKK1Gj10AFd51x{m%xZ0@ zK5I?Lko${b*1$$c4TaugySc@#s+LqVPV3zKB9!sRI}`}=er#4}l!|&5NN-C18&l#P z?x9n~Y>c|vA^9bh?ts~R1BW#pw*e#P0iUWS%!qo5$@lSUxz^{E0PMmG&C z6LoZ>1}5NV4fH{Ddp1MWi-F*1l8w|E8q9$|W$rhGLV?2yo9-f8EjQ9pukf3HSlxPH z*2596+_{L>?wCs_YoEK=p!fia9-vY_V@toXyjl3ETZM6mJ;D4tg3sE1uR=c~v$QQp z;L={L(<@7;O0Io!xN*L`H8gRidy@5%8U#2+(uy#p|E}qaujllZj*|UHsvf#d!2q(Tb(rLv~ zi{2e@CGhd;FevN6l@h}=JaLZbzKnUe#OFUx8!OL|^fp&2e4|R5N^etq?A+9pfpvr} zb=R(!b;n5k&g<_s`g#Z(JsQXj-GnyBV2(8N*#S@-lQ6 zA436W%o9AJ5)E&;-%6S)tp@G*YLJVG`L;&%u#UQm#7*lcvc9wcH3>QQSzuqtl_l^W z@v)Mi=7#*XgL5kyA+)xw-Dx`E38oeH7lhvGfOA?UGfV;F5L0U{z5+zlJjS`Yw=nl7 z7*dN^xjIsK1YD_DB1gS{=kF;;&(YnV>}Y|2MJB^=1(B1^XME2)lcByyPqXdz1~j|zbzxS5Ur z_-bR2Fb+@N*7C1ig2Y~!T$wkL9-odeL6jB{vPKQ;M8y60zfiGOLv$ha2fEPy1IgUo zbqZx}WOH&yX8B;|`lbdtTG==P8QxqZK~7#SHdfZ)KQXvi zSpG!%<1N7oP%tyM19`aG*#OKOEdUCv%B%ntkjIuMo;Slk?#j|y;#zuY(j07m&H&&5xC32WZT_VFFK)DN%mDwU_U3Bo0&@5( z0f62b40aM^WApIvV6}2{1+#)&tXQ4w|Kg`*ZGYnm@Bq2k0p6Z2Kzra{g>iGVcq=E^ z8u)jBKb-+6*_ZtDV~ zYHCUV2QwQ-FwoJ=(frL2YzB671(^ONdwT;d=>8@M1W3BMxcteX{J$!ff2H|f>Jp&0 zlYbf7`}mo8{CCI99Nk>K|52O&JhnN=(bdKk?D}^^Ai&bb9{7j7>z|(4IQ}J57FUs% zk=E2=QF>~BLV?Pwtha&UNK?TYlL zd{Q=VbpnH2yx9Kl;kI)Gc{uv~e<&?&9Dgk=|MbAZ&52Fh(Z<;gC@=LtE^i{Ff6J_Z zU;sM+=nMdQnp?B|N&MH`{1J2f5x*70&&LVm1h6!-cLn;{SOVW3NItG+?mz(8#SQ4^ z^H0TpA|wtzfQ5}Y_-*9h)&}XX=<<%1Ab`N%;x{J$tNNc|p#N)S8Q%8Q0_14#1%I#r zS|YKjfWU8~LI3~H#{E|=88>@-6*C7Q{r_3l|28&ru(9|0f1Cf8nJ(}TYkC!si-Vc{ zf9Y&oWo$fw7HT$NbL+oL{I^^lZ1%Pf;*M7Kz_<4NCDQ)0V)k#d{B|GN{JG8mEF9dt z|D}5yQ*%2occ_5)agT#)`WmzM{?CjLkC zH{t`ZN&XA*aRAt4|BZM7Y)bz|0suDEe<6N$0Grys5f^|>^WW$#gZ96Wz<*l?vwx$v zDCYk{9PDplEdBxC@&o??-@;n`1HQ$z`3K|&u-X3`a=e9d{0Dps1^Nf%1h6^%19Ah{ zT>b&yBD?+rz8xI=5BPQhx4+)N8{r?`5)vR!9~N!_UH}WHz+2;a-dx`f&+hjh zzUF^lwtubk+qnHN{&Uj-fIv^6InvTR$XqDYHmxPR++VtIvI3Syfc2;f@7;Ta1em3a z$#!A_sk}`}plDIhm%vQgB9M}tppkz{kYmYvnowN(m-Vm7)e~11>VINeX8y|l#Awpu zqq#b)+QFI1i-8s2DH-+^atriIxu-MR657ZB+M@@O0_~mmv7Fr|wSdZOEA7ckC&r`d4Q} z1j{g0L!9*0rGNt##mBCxaOBy@Wt(Q;UovJY|$3`Ed(* z?8)nixDH0h60i1B83a`0x7sEnjoPlk8NZA5v4c!eTxHC#jOly&$*M6#MP^fP4xCa? z;%B};sCKv}{8X)Y;D71^Kbf;c#YCcOxPQp#(Pjeo3&$vu-hVy4FN8(;Nu|3+p1von z4DWp+kVP9em$jb#VBNX*AyZ>-Reb#jB`37wK%l8gn_j@p@H@*8AY6Iaj16z9m=hOu z13SRNuLf5(Y)WJNxA)d-ycIFvw18O`bM@<8g{LYd<1Yds$jyoY8fCBK56Z+mq_6g! zLaIKbN9JSYNPmZ>=lWc?bP-;3dq_hr%yj*sk5=S|>anC-q7`x+t^>&YjQM8`R5ssv zV>-b(ZhC5ou#K@-oDMf7cqFP@+V6goNI)||+$3u3!w7lNHw3HxXeP*H2TYLa+3Pi6 z8w^i5K>J1X5+joODz80Ma?ZzR3D_5QQg&EVcm57e(tkkYE_v4?E5K8KC+Ys0DZ0e`}O65Vd zkbQw*4Uc)TT!PPdcoFStr8BWV=XeUK^VH{9Zu`g>s33F#w^5wa3#8>D$O+qtHhK5p z+nKQSYkxtO)pBglmVWxhE2Bgo|xXvH-nSXUTt0S(<9SG;vz7*O1eu1@v^oioD zs>BJ5tNxAa*0chc=UdT<1;U3hX8C7=&N+1%_al@9PNi9AQ&D!s)*H&5m^A0fgSAcN5@Ya_)U9ea^zfqT%sE|2 z3x8hKovl_E-ThJSsd&+MH4_$&w8bASm)hVbJA6jB#{%M#Zb-lJQp>-aLu!eNsb~IO z+h8ktBQ3)9*+fO_JDxEpP;u`}ZnU!g+!tHR1sW1z;!Z-ut2d;w4)QY+{9PTw)62CX z<4vMshQ%NZhR_P&)Rei3efuRx4%aVi0e@qo*Tg`rik7e436mR5eo;kL$<njD#QkXzM_l07XE$zZS5DT$b}7ftWY>z9P_|PGEW# zq1k_agIgn6;goIk##r%E#Lq0E$rKi)@wzT^(C%@QK?j>Q{uF)VCF|PP_K_yuHORjE z)5wL`dWNYRG4pgNDQ%uhJ6z zm~MbqkCH{QXDC0HrXp?`H&47s=_olY&ia2*4-Gp3_V&@vd}LjoRGNVMDHWUh@MM=4 zZ|HpdzB)rMO`Q(mYdy2m>oEZwrgYm92argS?A0%1=yhtF<$3kNEV|vvI91Nrfu~cI zQvXI&?bze9X~v%O^7h>%FIi)5wU}8n6+Y|c%#LQvQvENc5CsRwgCbr$0QCh#tXY3{ zt3g{BJ&8D{blb#69-5FXyjY;*=)+QB+uD=$>V(zCh44lPJ&vFSO4xoH9(Cp0Gw}vZF_^%-h+= z;+EqJkD_sQJw|0eXwj1!LxJb=r#OE#e1Lecz`9u|e#JHmgApAV)YWy&+a5YQm%*VT zqI=KrU5RWw+t}>{R@kq9U)*5JF#E|)dBGVXq||3MxVp67NOiR3Cm$q9rC4cKp3^lGU(fvP94bQ=K|bG8@(6>M8kl z_6DTE(U6-L$?Kqgc;1j4C2Q{*;FJJcfUstD*fn zx$*`zXT3c#`X%Ne-J%bssvh$jN}YMyatu%64sOf#hw4fSYvaOX7-zg=cZNZgAm)PE2ftjWQiF^SmO#}wOBDT+cgi#=IKmzYj{qC~O4iwFoHOgW&X z!(R3uDEFBG)vI1aYi}t}$KPL|ByQ>+gw=Y@73JHA(z~YBazV`2Z;$dV5Ns*RuAuK6 zsWnOMevgkkC{cf39q-~Ce09(c6BX7fDlVfcgKu+XI?6k6{dM|G9(n$HC%U4LGEdYt z61RKHN@)dj5g$W#5yxmSbC8`pK9`MMQ5eRbnnVkx^iKdb^Kv?ULk1IGGbLw=Lo(4} z$U%9ERED$nvc9ToZRrWbv(Pb?)b{HShJVvi?`-KmT3&x>D;xhYrQ)MS>rSpr6Iaoz zGO|?legv*$81|DlNYXA?h=^?oXRZ3Qxqn1Za!VGF&}%pxUxwdYAHS*YDKLk@-jY(8 z$hAM*7(BoFH99d#xzS(q$=(o@`DfCbI;MzqhFhP z?1{{eQcR`W<0^9gmC*#TkyWdG77Hwh9|6L#I$eJ`37tip%1O4XD6Bo!#*DxgeG(u% zwAbMoJ_wT^=GjN(8F^yT{?>Kb279jG>b{4})cGERfUlWKAPgpRGh+yJdGt`7I3D>+5 zHF19~9_a`*i!`u#{=L1?!X{>Qc-U$H+-#T1(&!Gydof3Gy2=c#43hUA>*BDWWM(2S z43$SCBh0F`jg(n-k993lLkm4JTS*&EEAP{&-!El4@f`U`lcamjU^neHM92N&cTXan zqGpwWs#PAMcGHB6>0@%K-)2_0`grq-QKNsqv7*K0L3}2x#7KD3yMbK%h}Y*vc%^HT z`(Seh%SMkz=frf!1((Q)hoi zq0I!0(0DYS%_FoHwTdsrg4mhsb)(VN^gdPC@}|Rn7=hETo|;m+gKYq5>${P(-7#dA znUOslk0tQ*$H%+Q`bjGH6>aoHO)9eQMCzAMtrC#!;&xbkrI9hU6H}Q`s=B2Ru2FMl zK@j5xip}Dy&x+6ChH;-zm-0&i2F!mQIth!GlPM~-QCqK0_rf^2SHoX44L&e!qOrUv zFMsiD61vLV@rFIM{6*}N?|U?6|H(^>W^^a*f(PW9Xg~vLSY8cq!=fX< z2oRvGp33NBh{59pT&BBF{spjX_+1Za*X(kKy+>EF*e5m zl#ZQ`=mUsbmi0_gJSHA$3c3V-A9$p)+eNJcRi|VH;qb|Q zE{I4nLG!+u&HB2kC*fWC9`e*YORJb}IRE5eD-zxD{bF}E=u_^2&en>fJ1e!6uckxs4j>nXPi&=DW4o zNa@vWon8eT$ZX$@o(_Ki!{@oz>{eLIS*~N_7#mHnJnI4L%AJfbbuU>*gRpgPvPMQG zBE7wdaSdINpW1e#4o>6!v~nnlI5@<|!u{sb(WaJ~KXn)@_ssQ^PVCWV_C}dDSh@)! zJ@b3u(~Ib&iNr}-2{7GsKZ8K(rZ(+sbVXvA<#xddm{g9=%n|F}f%#GKOSWNpZFPA4{BFKX8J4k+hGe70=@$ zBF0iZ4fv4emXn@9GgLMp{kU9C0VCcvRLUhj^kV|K=_$BdsU2vO3!C8R_s>W$x# zHpE;f<+Fd4k+CC(8fCI7$ghQsnEiEIsl0j;R0dtdZyJatpz41Z%}>-% znHe-lpLq^oD*Qcfu2zLE!i}oQmj%X=MVd`xCuM)zMORC(Ae$8Y$q$r~7n4onKL*K6P^M(%RTRlb*78%*Xlj;^~Uzm{}{-jrX+*80J)z(SxLQS?S$1U8`u{tlZJi=vaoe<>%xOQ;O)vm5DB9+<|jym@)4RLZ=vaw|{X=tU2Y3Q*_eQ$;= zIX-%UX%ozZQMZkTCkAc|H}FrFWvvb3{IY*dKlWT8_M}v9m}NneQGeUCNHqJw)v4GW zCykg8j~A@40na-&F6m$DB^!732Xs)K!UcW@~vxS@ci{wa$3GdOLHeZh7j z|8a|LR$x721wWi#Smh{Azz9VL&{XOA+>d*x`B$JtrS}<&e8m$5O=)6RY%BP3-Sl1fb&WX zla~S$o6m#1L~><)GACQfOJt1G)dAFJNTIW-A_G=LMwgghL`j`OUg)?L8FznDh<^`M zZ)@=QQeq#9T?zedNdQrv!b6%Q!DN4~u6!uP{Bl3&A z@wF^v(} zr#0s+KXr*ZS{U@7&=?RY$byu)l-#8BJX$3^f0WyY+*8VEq}S=|Zob}$X;P2Z6))qY zBa?3nDke>#P87_PsU%;!f|N+Ev;XXuc}Vy;SW zy0-dC>~yD8U|{%Sq$}Fk(<#CLJMpl8aP}Rmn~{2rylU-XQDYsiDgOeV$}F!~TRSe0 z+@w}k0iA-5us}~M=e9%t^a06UYDX@0%;5mtU+}6oXL~2AkRYEpgM z@~R|oddIXRUAo^mEqZ@SOS)@ubM40`tK&khMFC}DmDHn~n_~O^Hhk=`d8wPi(+@&&ToJ3aLSIcn8dBxTZuP!3y4e+OFn)(C9T(sv zLgmrjRMWe2Tuy&BafCL3tSPp!Hsx&|)EsAeo1fJQ^`&3n5pWi)JBuEPKDcEZqO7AW z3V+m9(04Rd{VB?Y2lay9&3}A)=2@0K{#APv6h@G3x>1||#d+&4!`~q|6k^3k45=Z$ ze_ez6sYdab$a^atchWpc1wHyl%mU{{hhclBj-#wSco|1Y=(L(U937ThEBGHt^ z8F#0+18Kj|P}q9z4xyA%U|>vlp%}dK+!f@>fJJ^(fBb&ec#EMpQnIUY@@cv;(r16c ze~iR()&+ItxN9TK2i6ZVv#ED*gK*3DteI{~6(WBQTQ$#_d>eVFoJROz0B#eGo-ez$ zdf-waWRup{BD7?d4w90~u;`9({cHe3u;P;qdWaIhXUwZY9@VGR)SUJsiN5_v73G|? zA~RWizwMd0Qh3j{xO?`P;neK%-t0ky4;lwk!+lU^X^K>R!L80B(a0uGag4<(mSP-f z=&ygNZj(~6JhX?p?o1zhTcPL4ce&xjSB*s-)5u=-gX`p-j7y=?RizHJ*pPu=viq(; z_Y@!!$t!V1U#w z`<6NUn6#%6{klrE;KjSR2B%lHF3dv|np%I)+a0xEJw7#eB2Cd3FJTsjBQQM?c7i;O z(t$<-AzVYVm(uh~!X)7E$q5R68B?GIt%hqp&XHfxUlu zFH98c3MZDwF}G`{uhvNY8q+fEC5~vF;J!Em{IU4TuBO+skKLLU?p(z_4t040E9o97 zYB8<6js|Or0WZ-toKP=wgZ@Ypku37uG!U+I{^YDN1_+1O0vH|L!srY+p;2=sLGdXMQznb=80hjBt=h-Z;6a&w1rAV`A?W zn>b|EM<}__E`q_ypO!^wYAKF1Ra^%qEUjsAVL^>KI=}Otc@w%PvLh}&MAv_hV0F@; zqLyfRB*-nOWUI%YbsLIDG>1~?4G|)=>QgYGd=@6+nYNnZ(WK;jF@d@~Xp;(bkQNuIZ|_}>*B2pFBDyPI0*n~^WbRwP0?p=!9Ku_on!d>WOZY5o6c4+1c9ad z^R#U_9C_gKXqdNyhiFrGj4poeE3#-(~NbrA4 zK*5|YgHnooG#Zqa`+VldLb^9xa;fK0&nNe!bwU5Lz>58&Xm_xl1mm=+6SEXyI8yTD zwpDou>oZFC&8h$e zzl4;Q-NFO#<0$UqDExo-+r81Q%58=?vtONSCvuL8SekG;e z$rKgVIZgoxU69A@GDjv{{G+L9#T8n!*bnufoKM$-H%=mC*HwS2*V>D`cBhL8A*u;S zgu7e?1&zZ2xTC5^$tcoK3s(vwsl$jX_6GNHA6NS#da0FqdrFm`fnv6yoM@2}XvVzde1pPP?cwLbT=d^2km+AKz*AVXFSi z?Bvb2XJ%)2nTg|1wvpS`zlIBhCQVPQr1(zvnYXJ89GHJoRRoVt(kiz(%BJcJMt8E# z(OOb32u19rlA!B*l=bj7ORmG-kI<=Pi#hwJS$|`T{X(S*Z{yJb2_i7AX>65>7}GZo zFb4Dl`Ur2JbeY)aFM5-NXrg}P-DG9ffJBBP34qdiMh>f381F}J5;yRJgsA6FNspSI zx>{vxLJ)t;8{wtYq)$J+L!7e@LxIVAC~s5H$oC(17wAeR^M)nPb_;AW-UTru`iLY@ zZDO0582wTq#9A-V2pU&jjo#OM1x8`w|B#SJfu=YebNgUzHe{QHoVSaTtSCe=C|mU@ z2<94V8Gd`2UYeS90^czBB1+pqbfVs1cQ?nDdwGAb_gI%30a^DKr-7G(`2>n}Rftfn zB4vZ)6QQ3%q@ez3zNiFO=O@|N^G5p2GzqJ@2p`9jq`)Z1@cFzE+JyiyVYqn%*W^y} z!AS=ZyWA>)Sv^R0q&7-HZ)^4(eAb(f>h+Oa5)St|EKtM*Oa+Mw`D@Cx+at0}D#=J5 zpJ#uXa08|$8nrOYj~&+4vIcnzbNPJVP5#p0X>91@;>HLNCr<-gq04E*w<3yUZ5_to zDM(n^E4c|i{_27y?THuwe;Ai}Bsay9PVoMC%14#)YZH9$vKm(s4cv(ytOyI`%K-UP zEZ}!eqgNrZHks^l#mq*Qovz|RcL(bZac=nxZJ4yU#S>OgA$U&37sJ+;Oe z5TLk~LuKSzS$5>W-g~JDVIng#L2P|G^u|4rh|9v{C;pw!Rw2SjxQx0Iv1r-FkQz$U zF%ay6)?T-`%B8;4c>S08nYas2;&^}a5bu)>ir|tIVU&cDTJ(pmA!QSOn-Rfh%*4@(k)gN@)&E*~_K?05J zX*;7+DGu*Gh}GyKXb@HAskeU-{w)Xs+*EjaxJsk}X^hc}?R29nRnE1Oq*xIi!7H1h zK}Pt5eee-3oVRwYHk!oa=Jo%<5~b(*Vr+y9i-SwU$i zQ7~C7UGcsWxl1y}B%{s&RPwPe#&4wY)?Z~YZ%=T61|ciXvn5ogh17qhLt4Wo|D(nB z=WUq56_DQVD-?!kt;nKyq1F;lM;Qwn1MVNiam zbvBXnt2pffGG065LORP-@)1K{Uh0wRcD=X~o^IHx4}zY~W+O=_p2{Uw=&HgYa!B&i zk-mBQh1(Ek9fy|Ya(!TuymL`2{j_f&!S^4*8Kd?h2@L!01rlD&3w`kpQetvZyTi>s zVe4k&p3e-a$Q^%|a&w!j6z|&!(!Z6skI{XG-^#SEwXNof34?0yI7b819s6P{G-QvD z7Yo>}G3^4LuJsSle7{poI3)V&6$koJB=+JbR2CT)9{kGH3Z{wqdjHMCmUGowY%JU{ zSm#-`#xB6+q){t+*g6IIY9c~hOeqMAGpU<|V8%FwO_6^HGa~s}fs3@uMw+`~#W#N# zzV~3stIg;6NV+7aAMm=)Fj>n)doR`Wv*0y-ieOWn9WrO=i?#-~Nz#F~W_yFX{=%>F#uM zq0)ia24;U2uvc{NJEn)m=ow9#STQrMWW+*#AZveV9~p~hZMdT4lnBJ91 zP(D^$+b#FzcZ*j7N*yLh$r*h^7h1C2?55?*Bg=mWWS4+}8f+!Vpv*liehvt)b_ezv zEu>jXwou)$%-A+{pc>5s<`S=lKVO)=GS8-)`Qpui?-&|5&3D|}f3NcERvG_KBv^4@ zU4+1%-^G6U)J6NZxkBoF?)08%ZFXBViE!uY9c)*DEF6!q37D-8wSX z$4@K(<(|#IREl37$%j#edrF+=@rEnzTG4?;6D>OnusS57tvc$l8=d%jol#-Hs6Eq$ zSihyM$xaO74Vi{L!8g)5Pu=clS@xbgC|!TJRAP%k+GuT(xFhL+AA4TW6N&+=4wm*) zH?X9dlwUoee}*K1&s>i_f(^7Dx|9kR%dzaNKU;k9AEVk6CFH@wdPF93S_B5S!W%dO zO~fAhOtkDK+RA@hUo|o7^P7!ngGRh=`I2ZJX_j^klDM90+A7&MRD?a3zY^SQ zGDQ>!SnJ~5l*mj^JXJJgjZowC)aN}`q*^{FWQY6=Yg1LknJ;yca(5Hx>J5TPO4X$0 z`5L1}kgpSZ-#(ZzzXIlBsq;I`i`{=!VpTNYU|89q6zPtssJ-0Y)dXs3H>^XMd4wgxmxhG}5=ADxWjO_Mi83j9 z&F$$+QAW@R^ds+S{9}jncyYk<$;7yV`S4^(d1r_!M!M)Ydb6i}hh`w}rq!pNzB2zlp z2Hl&(q}SZmIzV|3E?g0Qtw8h=jsh>!2-vsdgs$l5z$f73NX8A5@wsaJP)tJ!q!T*} zuowzN)Wh-rWl8hnm6Pb_98NO8l^pUE2Ua?XgMquE*sGC+UB@JbQ(e{Kea1 zK{l~IH`bxBp0CyJ*_adOGvDt94x3aZ>ck^v{o85jxH(V!WS<7UKyYAj8;|e;+V<;B zN>T-wmVmZEH8Ke$hYG4-TG)1}um*FWEz*Aidqg78eW(B3Zkr(VH@?iDQ_p>9R?&TI zjUifYXSpAjxLkBZDjk2ggUT60nydqOSlR;piCk`i`XC+-(r?(H%-^Ahl?IlOUT9M* zS)`)-N^JVWqyn{9hD>Lf>fRmuF2I0V1>J>{?Zqim)5zF&J_x@QC3r}rbJ2#m-o5Iv z9HRd~J>+953yw^@emIk(-OI5n`>`kAj7>(!?xrV?z65DqMw)*Yo`3$x6`lbx!DpcT z<&%8|(tw_pV!{O`X?;cg$J{!*gZzy=Lj&$s&O%-YZGHj`CxI$3LKLA=gF${F_tgeG zT}OTy5o(;^^21ru2Bm;t2A@(*6e%WS$_ruNq1$bXAdV&I{^m5kZ}UB@n%;zA zXSwS~k_o6<5O^^R>Oj@s2obK9Uvfd!OjSjR_PC;J5U*)o;!SDUMAWPZ=R(XWv9r3oB47n zmzq%0tspR~|2U*zJ*b{JP^iJH*X-a1?KKZ5ecJsYnE|tr3OQDWxdA2BL#7G2T^RK$1i&gy0hu58}XsJq7hMp3%(L zSN2~~5`BJ?4`f>!BeefeWpQ_dkboX@j^BFTcsQ0!CbX`%(z^cCtxaI;iXZLp(sr(S+o*E)aa zV9F$yC}M$4(T8~G6ppUYa*DL+QHDZYS8?=<&za5-1+___DuQA0KDsTAN_jtzz)ui3-l_Z=%+ zub!L?Vx%2NjFNYWZts5H)?9VVhPr=4Nv8l!(`Ok>pA<;12DqjYDP3ZD51$}Drh z*xj3~$s|aA@l@@(d^RbyqIlCKi^d9-=YV5+s#?~@wQnRx+qlo_Jc5NkZq7{&F4BTg zKVWF6lR&lH_jBZk>-C2JT-b=jF6^LrT1&P{iG+DUSpi-%<>^Yj>tnk9boGCuB(-K_ zRU?CmFVt{G@4hlXRhD*2R+64oVtJ<3Ng>T5_9B_799jb3*n~42BV8W3k8#275Kl%x zFSBc}aF}{+`^XwSU#2#%9*G5#mBNX)76P`@EknMx0cY3BuHPOr+rxw?malEvR{_`r z#Yp^Qa4w(-E!nY1@mn*z8NYvM`p3fE^&zD@5Et1Hk_}60jm1QhI5c3tX=Nh?wd_u$ zl1|P4=JlSugI5Zr!LKRIR9dqg{G4 znCN!82l&?a<()T^Y&S~E>nliGLn+c?oTRJ(`XmDFIHwILjYH1n?FxTC15fu=h3XN} zaclR>4I6G`qQr+>yqg7OPh9kJesXmmVL@ZW(%JculE{yP9S>NAC=$C@+#6A`)L!4+ zW&PEYk|j009KtJ%St8lPTTc0ha53BBuRaF6+vf3>z;&Z^I{is|9qWO`&{J5HAgx8K zh9-{WsF8<{jb0Ub>6iKCNQe)!DL?A<^akKr?ux4RhZF+ z=oOT9-RH7%gh+qF(p`jE_u3R}UTRkR`JL|@qKBV`^c-h1Y1V%sDH7R`8T=a`%MT&^ zQ3%VRN>h5zB1KKSUE1RvgP`hqWQ~w;h_tIoIMX~V^yl2~KWl2BM~i?Iqbb;P+ugmf zVty;*e~57CF1$aWVG`d~&D-XfyU_r{*alw$JOs07Wfd)X9q0wCcjx=>5=~>8--sh0tqs0(8+uLHXqDJ zVdUSHa=2$JI6@hkn?pSl^#R7Bw8=+>=Tf! z(t`)XtWA?Z9CO(?DS7oEu3UC3qZ<&=UGw?3a>P&#SZ04!5UkF&aq;SDx?d}cFPC4J zPV{2h%ZPVIWJ%{ZBbfRvs1Fe>%)5?ZXHcE$b9^7mI}}ksD$*&}(Q=qXDB&vjH#b|e z5=;nh2gQ;nGu^I)HlL`1K|KEW3meMrfEu_w_fuJ}v1lpsCz848z62?cnAh{UmUoC5 zyyS-IquPI;8J6gAPnk$z_3bbi)D}a zs**UyZPFOxrQgv8gKqx8M*b^J?IY{WLkPWN*?FlzM#f{io~i~b8pX`JN7!kW;=AKL zZ-;z*9{V$z%+QfcJF33JTo|hksY2lBj46HEj2C~-XirFHb^>qz+BaxMDu3cDt8*Ht z8FGRTLxzqMBnG6{tLbuKmG36aC{wp4^$A6o^$TY^UYV;2LGfz2?>0-bAo&*vmI16S zg!jSL#1QO;6t1!EClc+a#ADP+M9@(1+bVLCqecF zV$fwSBd%0CfZN?TLlaAMI)t6dU}}0B8n>>OqS@Ez}#5V7+nj=GEv+BKgtV2#ysPx-3cB@#9)f3WNP9L+DmDb z^T?|OUf+oMwjBz9KOG+(z#T|~W&{ov2|*J1HXK@srN2J)jOU05Ql#314$0z1{WwsP zPH>QYo6Luy-3h0J&$x`rZuj*xTSJ;2Zllc1%7EshIKN_k=Y382zXGQy1?x zWd;^7lR)K`kTu3W)dC(~gr$E3+e8mbcoW+_`M5uvq(MV66lVm?cp;K_d5$q6f_LPm zc6-YgPDq9r#IuPq%24E?hj&m*&4AlIPotL$nw6$^P57IS93wfV>|dQu+BpeLvkIvm z@LX#CkN*k0tY~_JbQXmuWpPx+LULnw29Gk9$nt)!$A&i9u{cJQWxaoo#Z4QC!l=dt0DLP(GpSE>B1 zZ`-B+2^1303YY#e6<(Q*#RV>hogyfbW_(1|^yvn%rD_Y@qD|r!kEwtBQlg8tx+yB7 z|5OoImAAov#g|!&8c=_Jr_`Im;j-*~kq6_pS>q>@ zK7tH}_O;_H)U^3V2c8wxuf>j6KhFp+6&QR$a#NP1n!diD8>kNDV~R=KpRrRg!!kfVN9AmU*ALM%!Lc{PxaO|Gp;>E zwvDqo3}Bj{x=xHkJtymPgVMhD!8b7LtnQ@Z>wUwdk%S|;?xZN!OALWCA|&IAhFOFw zk=K%`Z}FMn3#};MF5c$}2ykXP?soK>lQg{feELM@%XWV)N(hH$C;7AC`-!|o?RTJj z=MMIP59!!9~0{sVMG$;D~-X0S~7WZ1W3ZWDjUWzx^-5?zpP*1IRPld1}k%$s=m zia-$_%bRQ=eZJz*CZmsDbEK=fYlDk6w z1tY=MdxO7Q^ymNv&~Xe;ftH_dmdg<5{9y84{?va0HL~f;UfP#@&BA)kyjM0=y<3B1 z)P37|{R|l5oxVFghfC@2E_OW9WmrnpyBhqlAnIBkV&E>{L?fCC3d}6R*k#QB3I& zqcVSpO2AlS#zlnRZZsDA7nm@Auou^JcH}_Qxce5}vVD!Aeq7De2fDuf<%xFUV#;|bD8VuKW~|>EZ8eEOfTY* z#3I>LtEIE$C4t^+p=_7)Q#kzWjh@8{TSts~OD8gyTp!F;)7}UB5av$$#+%d*9`(IK zLld{=^{I7exJtF-)N(G;)6%Tlb4_ zMSR=MG)#xz*+gMe4Sq-_nF_O6{$I4}JU&K5Qo1q*4wU#vEQpOzl5Z+QVW%)>Birm9 zcA!4d(a4k8Q8WvkkIQF}WDE8uNH8~J&xrm0RGfOnsr|#dHqEZGTE|iZmN|}urBX*S zo&>+`U8Nt{&gEEful1;ykDq@{4VuTkk136Ov|@o4vb`N;|ngxUF^+`=Gxw^X}{Q@iNJ5(mRoqvHPTKec$>0(&uqo zf@x6An5Ba5GuHkshNlkWX89KgJV%`E>>KgloVi%7CA%aWRwUF77vqxXE^3IF^mrra z#7~zyQj5#36NT%8tRa6ubZTU+y*TwQAaq8i#?OLSv8VZ^Mv5?lWz#sS4qgp}c~DW! z+E}cYilJma!r&=HxH$tl#&9fk+wH>d*etW#uDeaKVzK$M8x6ntHnS97q77wTwmN0G zozDW#SFu-F-w~{*ZWMB{O+eN}Lw@f`b7n&u43y6O^1CNq!pI(BmmRC*T zWp2rN47)#w^3O&2YAF2?HQ8>OCfCWfn{0QoIq78E zw$1PTF5bKMAMAgdz4qE`Jrr zFJh;yhJkD-Gh45{}Hkw}wm%}2~8w~poE_8H{6Y4m2?KppdnT}4Q zhs^I!XqDkP=58oA0`>1pv;zJzRq8_7Y`&rr)Z`YzK@opefztiCTaL?gSwCyT#k$2TRdB|vnn9OLksX|c86!nlx z6*N$@ws?QSD3tIg!Jm?Tb$>Tgvm{cmB2jS6qxLT0_<^s3KlKe?T<$Y=n1;$Wl7<(j zIR40TI1qz#+6jrELCxW;zO}&2M!t0aBOs^MLU~+3XE6IF-55F3-gfOVLp*#f@t}um z{)$z1l{yAYwlOefLT~V?^t)|Q;2AYvwDyDAfLDL1C*=~=vTkO+E$ivL)o7vv1&!VI z#J?_Ogvj&uO)zwWULqG~Ps0GonratMyMuVkyZuYtZ6bGg<&41zqcKg0?>$xD!X!lq z(xCr9oURddCp+TDoCJ9@6(5U8R@j25A-0U+%kNk+DO>YF_N;ssvj*cppzzvwX)Svi z_n3b%_g39nK*Fwlzr?`3K)3=(jUL2D7JepYFnpzF06)~)OWws@M~9IZ$$_b)g_MI* zs!#_tX))bEg|4}_R4zDSKO~mkSm`0+?AD36o*Ylung3=?{v0KnEi=7e9|xBMLMiwm z;8ZtfVKMfyAGOsL@wHMv6s4L~z@!E-{WX6kDnM}W>V@~CR!m! z$WO8b8t`r5kDhfMp3nmaD0cmu6`Tv@*2%kA*HJsFmm zsUVBM*+X5{)5_7IQ|zY5_*OVizy5g(AW2-2;3Th1Lkm@4|MEox?rV*`!5OvjT{E#0 zy_o*QtWupGAhe=Au}H}1c#RT~)SMl8@_Rag=NP)xSBok_i#nJC{a$G%Z()CbQkCu> zf8X_SmyK`I&No;cnWDRb_dYwZ5chAg_d0T%XDzFrr)$ExaYiNkFuEmi0KXVW+p(53 z=p6*C&x?_%tDa(<;6Of>_)$7i#cE_Vrza{u=r$H@ZroDpe-cs)YBTiZVqlyu9eT|* zznps+i^ztkcb)O!&fo>EX@P%TqlU4!&WACcA`}!M*dhP6p~+uojU$>fe+BMjh@7$s z!^v^Zy%pgyXTny0Kb4R`=S{oH8G+n#irWfWWtZ>xlgeenL~CjVl{#s}Fdi2~sruKx zH@%$>c>I+`Q2PrLseNMuT!DvEjWwcTs^tq*ObV-uc8_>dRSp+A#~6Pg+l`3K)rpaH z#*TZTcZZDgP-pDP1cWyFo`jqy-})2HXm5U4{6NBBD#6#*HS)^u3WYgHU*CGS#+-5Z=}Zac@a^-9<2aISlX_iP0l6dlA=K*Shx+&4QI5BW zR3EmaUL#nr1X;ceFYkYpqsQ4ErY(oz6dthPGY3pHUhc z!xH>XYvCttd^O+_DUXrwZ(#Lbb%~cJV|;RVz$qT&`OmO9ZziikNr-HrCaTAtWsHB} zO-%cD(flbA?q7P2Jr8@(hQQJG+?Gf}ql)K$HJihx`CaF&%yfURcXhWjFofxi{ToT$ zoWK&w%nD?(VD2VV%B5#HrRDT8cC(*K!8+4($G_w{q9M+|jXB>xd#^CdPU3)critb1=k zG*U)c4~!ds;NX*gpAW0>5f)2eeWygesLj+f1d3j=I$M9`@;X!pkCsfmeH?|2`MqC` z&b$25!8a>?SJ*#yT@v*FU6EeET3dB$MvA8jJ)aknJ74n+cURcah7PL6zZ0WEQpsP- zpxh3NHeXAobiz~H3gRq~1?A9|Rk z4e>mso~Ho$3#eTLPbP$Kx?f=3Qm()LsgvG-E0sq*9fFTXHc%w*$o9`rNx#@HT`b$h z9`$JY?GWs+l+TE=a^wX9plH}(5alj<3YeP%Hl5&9N0***{IPsOR%X>ry4L1a-LP3f zl+SB_w+4y2#-i4o!bEWPv#JFX8xyR-|Y(%$kn$i8SFtlhwYg*HSdz)R5fEW;JHPGDJh2q%cixJp@ty z%4GebptFJlJ#9=`7y$YulsR4aMSJ{J(!soc2(8hiVnRn{wJ?-Zv-GOz2w#4)AyBW? znuV$GIW7o#xl`_cx_$`IjB)^sM zbgZzK^qoW7HKA%Db zCpYL*K^l*<1=9T8F#TUv(C9mq!MrKA%-c-EaUbp$lsaEkMafjup|cY(1U3>6HHm124M!azm3 zy^GDp{nUCC3D7&zR(OtKnS+_x?hj!xjH-q##CZRUZSzMkimZXGhBP|8A0AMDM>?#z z=n){F;?r=$5RMDjfgnZt7h;P1yI`g&Rt%wOfQ2EwDX^h9T?h(FZhU z%X&+NLL%GSMMT&1R-(PsI4W;^jj99pOAI?c8mzOkcLJ7(#k(b68{*&MIu>+X-^Xg= zNncu_sMCsH`y#+zfwdqsF$ji#yh-lw28C3QWG1IwsZkJ}lg(7&Fo{B$Yl6g$6#jsh z6m2Lmv+8}F$H+5iebg($bhq1yK|Iue-w$R@^$sAdlPIS4ogaat6|seTnvXN>YO`oZJZyT6%N^N^_m5UxxQIXf?o_peGy$ex{^d_@3A+Nr2#W3;1=elMFG;s_f z7)K3j)=D;k6YY7_jb-PPlx-Pz(8SR}99Lq^O|@CgFjn_Id~qvjg(pPoCkm{MxaTI0 zRZ#N*mAck#t2-`#p;(}1J!I};^SHzDUkYVPj%L^&;v34WG)-G2BX;!M>k$2?9>f6Z z+?g<~Syr0yO!2r-3YI^`wrEf)T9SLV$3t7S>Av=xTg*_ZMGw(0CAoo~sM9CY$X`80 zoK}A$AWd>h%vb!iol)f5miX2cY_TXXbv617VLtVzE!+$YR+cA)!p}7G4O8#nOLQSvlWg4)5k4LTB{mEco7kDgJB69;i9mQ** zHrGa;(YiWaCnT8C8EG?q`HOj0B42!>>S2@puUr0rFce0csv>%$7iwNh;x(}iNMB*t ziZin*#1?mvP~aoDrui^eu;-~k9ZDamHc*P9|BJUGOc+tPC>>bv1>G1P5HaW+tEE`L zMFg3D@0(-#3Hg<`u+Q69YQRm77X<%jBmRMor(LtZ1|0HDUxBR$N0r{OHwkVPum2mF zp~c~qOATUvckieWko|q@!>(ue4|wX=Nn7*Tg-k^ecCzdVl5?;{>qf|wA~*dC{@0-2 zOg+WT6vX4LdmU37*B*3`DMuZQmli@kGzC+CYjcg=x*+~RHAjhqKG6FHrMFgz3N{#9 zLPn*a#k?o57~rh$tO((ud3Ew#R(F`v?00TqEMl@lLX{gpYb|8W=$3uAo}quFJi}fX z7m^+8WAqXz9O@B2qMEsFR$p|zVWqNaa#pY>n2oC*eX0(zgM(dDK6a!?tLys#J)H=D zsZpHeX`QHx8V#W!2_^sLkuiBCCPPuR#Gr8mFY_uta116I+F9=dc)?0Is{Y|aw-$v; z!WlzChTrTV?PWkP?p`}zGxxQyk-Nk$AFyO*CmFX+a@cLxmPj{tFoLHa8g1}Wis=_C zx+c{<{AY@-RN|_sU^?T!5V?-b3o8SEH5r9d$3}1L%(I@h17+jVhRT6l^yRrJK?T14 z`c>XKs4$b7>rvJr1(1ANHXYxsM#RhYb`eaak?3$07l9(v3wYlCAN1ShK2R(6LcgC9 zUAWR|6%R%d@9nThUf>up)l;wd^=12`Rb~L?sEgo6juLEYH;l}LJg1V33lt=O^~P4` zxa_QK8Zt8j3sm?`3)2eH$Wi-5KPp<8&Iv%9wv-4`K9rZICLQQI&*|d^dSpsmTW>NV z!K+q#y$jm9v`zlm-k%|G=H5Pv&0fX#zQ56}@R9PspdkFa^DR6Hc@{`bjd{Z)i$TVM z7T&QQX(%}8K@IFt=aU(*0F1SNVF@s6cNAX#Qkfl8Cbk&NtIseEEE=z1e%1S4ukFwf zBsy&as$@i6m7ozrWAMqWn*hb|qKciK1V35@{+`$(>4|+UjZasj%OToKMmwSpCcG?` zl5O~t@%5Z*FwZ3a36=%Hq>LL$8Jd*-G}isMF7$?UYtsIo$kDl?o>W7BGbF3NkCWuU zN}9DF2)Q~w#SF`W_mBw9ee!7rYi1#3t_Rgx%*_&oCD%dTeWxL^@7tGKx3ox44F+m*WVi@2DNkI zK0-sxIUG@R{}0sefTM6}twXR;vV`9yT?=WgwCOH_aDg{5rG1KxWm-2f$Z>V7P%V0T zUu==qjT}^g`yzgGV>aP;v19|46nx3H2ZIc!;Etj(XF2sDt&J>yIim6$UbyH-fZR?` zV~9EVs)zM1S}(AkoL!y=0Q0r`3DM8I#&O#yE)Wfd434-g29?f`NC*1Xl4Ws&w?3+F zKaO>bI86>ROHA^4;buch+VPpk&eeM*xEZP$Mdb8;r8plDg`(JTLm-;TeF@LDE@585tWk+redewv&@4t)U~a7; zf{O5+F7i@{Lt?85*7!t$hXnjlt7=Hem=Js+PJ5PwRP#zJdFe%A9+HAC4=iOh`YB>5 zDIP^OfQN}KY#U9g_|U)_%$?NLwz5^}Ssv4_BHXVInCsWF209JpwLPp6uvot(2FGvg zHqtPbn(6C*HAxnKLlNCNICiP!<<|6kp{luFW4YX~{L%Ro_!w!orSZ zDswa#i;toToZq;2Hcf2bUVbq52Tud(Z(Z7PgA(q(g{ zOw%Z^Ki#TlPIaYp)r37MdUMhqdFT^0;K&{si(CD>y*AMLL};`ss(zU+t-H5#W-+zq z6A;%pYa?RYmiEWd^?hn^-;vZoC!|l5@{<35joL20xVm*tL-3NzPqOQ=Jkqcv#d1|@ zpRMtAuqtu&smgxz+!#*}2-g4II8(VU3!yXKlZ`LlGhP6)^Cb**pTBEn3oJKB()CcKY2e<$HJGiL zg70SnUK;a*Hllh0@c|3Se8JI{qy+U=Q)AJk`kN2hMfgv2tj}W5hT|cDtGjnOm0@^@ zE+S0Dti5m9NVx_x(QMpsQ z_tN(>AIo74N)5rpKGBlj{75xt#cOgp-f5lF=7euSP1$g3jD_!ov2iO^Dj&UUJdEF5 z3-PiIUF&i4Vh&)DLrL2U z8K8V8R^DqW`bQ7Q^Zx(=c2Z>uWo~41baG{3Z3<;>WN%_>3N$k`ATS`8)RPeq6EiR| zI0`RJWo~D5Xfhx(G&3|ammyaW6$CXoH8qvd1}A^Cx^-BTTiZTNcPZUNcXxM6r!)f$ z%?u3P-6AO{EuGRO-6bh0f|N*!64LRFdq2;Ed;i{lzk`D~uRPbeu63{b02pYrbU9>f zAXXqn2-t&zhm%_rpr)<^aRGvPxH)t{cAm~aD1eufo0}hlfk6%m0(v+=!16#3kSIXN z!ybR2Y3%{ag+*|4i(oJSlt5q*6y~%6Sos3fK^{OoUsn(hfEoA~(1N&oa99D|VQvuE z&H)T!fu+bnTz#PqcJ>~>Yw&S!{I2vnTb2``3bb~Dc)L3}0Dxc{fGVdtCqM(@4Kq3b zm?2<*704dwYzu(c0`x%70s6WMI=TQQ9Zi3IEnOB)SYcgHS62x1KV0N=_4Jk40rD~$ zdI|uL0XslRUsvza^?MBf9)K4J>hAEn z?Z3D&!k7Ubslifhp%9n98UUE>Jv>}RxwyQ&y*ceX-90!VP&-an=fC*r**mxcydi&3 zCjjg_6yyy0OBheE4NOiCd(htne(wrE&A}Q3b_e}VQiS~Nbb(0;OM=-w{znWZgvali z&VPpk+(Dp!w6O=e|COtzrKJXN0Xl#^Kwu!)8W!jQ^zd{CSpH>$eS&P5{w4?l$azAc zzk8_v*9HAwoBvXmg}_#3>g*o~^!|VMjsd}*?tXu0^Uq~lL%{A1?jG)cR|ElU9h^bG z*}MPVGY9ZrHgy>d6-5PIJq|V4;DI^RAux5ooE|dW>24z?2*;tlryKOD9WU>n=t+S_=#a_N7A9o#%Y zD)RpchnX-QZFV3J05<^S1_1e3+jISH_}9GrHuL;8!-NR*cZIkDY=O@1pg;#(5bPU< zzdO(i1n_`*f&%^jbo>)x@CX5H9IQQHqYgVR7=Kk)0oy_VB7d79>fNU|iG$0|HT6=Deb z&6ZgM0(Aj8|I6p#uIS(cve9zzu(tnO+Q0289zfXq%Yf~iL9lK4%cTGNNIAo17xw&d z`2F|-aPaU8{>uj&OKT@E$lV>l|92V)Cd9uO!_@!H7r>=zq@kfM$M%2!j?G_j3Seu9 zjRV*Yz$+jK079WaUkq;8Ebs~l0Q`AigKY!y`D<7JT%2Ht2P_5P>gf>(u!TS|es8Ft z0Dw#8x9M*r2;h=^L_z>Axkn@n;F5ntA^CLZ)hFwA8AKO_KaU=4AG&D?)2{QSQyE-rtMBzU-C`q=ydVKhLG z6<`Ym{i7=%j1FvmoPjQXcG@=<4kG$0B%O7Pm)|Fa_N_A+Y<+%K48W5_+`$ zqcIP^@T2G7lPB;W*S|6Z|6~4FI1jAzA6v--%YI}j08@X(9pvKh&p{RV9Ru?EV}Au; zMcf^H9+wLv?(Ph9xBsIstp8(M0hn?g_E69tg9lUC!yEEP0<4DTMukguVZmc34rLKOn5D?;jAh#eR>RVU_$q(7ze{^ZBmz`yJ=6%bWZ0f&ZVE zzrV1q2NZwe1Tu86fxY%(rQ|Ki^-K>!fQ2V{-0ya2Hli*U?njw%mQ zD4ec9W)R^#tRj+pu9}RroH^Y=P9mSbNehxH3T=N4$zm*ms40t@1-%Ldmpo^PAauT8 zYfG!1IzE`d$65v5V0-#{DMRWz(`HT3i|x zIP0LB6JfkC>h6e36+=NZ9Xn(cUbaDVo&18!4$mC%i8=|Tqev2>vEXsl55?VxG7@fp zZ0s{xl$`k(lZ;xWkDA?3g|!Q`rmt|{sH;kT8434}t_#8+my$emnMv#qd)xvMP{@I(Ro(8c@e5Ew$}cAdbeZGiFa9{p%;nZ_L~!$lGVK` z48-c`AIUuRU^!l1YR&mvbVI0-yVXrwXy0jXZyT-}f9e<)Ujo zj^`Zl52w>JlIz>a2#1>s^!dd{7jVc%YUa48>c7kp^(**>dQRql3A{_S=ZrKVUv=Ko zw}M7=WG25kj=5uR>Uu4*D&q20W+oKgW#OlRC}Skq{MI_=0uY>EM3lrK+H{x^c#~=V z;c(0H_G4YXCQ%rKoH2j$N7#Bwys%Y|K|LIw(WQLR(*cf?G@Y*_9rZk zn4SInf`vw}ny_T|KPIt+s>M%|u2F(()|I?UHifPBXxORYr1PFcyc0-(nCkJalrL|Y zVkO`$XUU6Ew6SO|sWFHGPT5pxR3H|blyU=2YK!>;AcV73E6b-jT;e=bcmTURFT=m$jqZ*1E zx(`M~jMhz-7((Rm^$K&L8wCoJnD5O;x%h07owHr-z7s^zdzT{ox6$G#ya;P&*y~|U z@{KiaO#3b-iNAmH-L+o_=`!pmute7Q=Mn6)2WX?)hPJq|r!Y~6#^2q>U7}}qtWG>^ zm~Z5@`{KnJIm8<1^x(J@hLIH>lWGMyvK z)!CAoQFI-Gpklwc_-5&^c+Tk7W7_XVn1>B)*$}+S(TrLz8Nc6)KbfWoIbk>=IK4~s zp037zKSh5zN}kk9<^p=!=TEhES1l=N$IphuJDPsG<1Qvderm}tV6yq`+kF-d|JIML zUZ>((^gw8mx4Yhqv=IJaj%e3r{592jD73C`&xWzw*IQ|B^XoSOp*Xx7@p}i;fK2a% zx>Ytki?g=W1kOE#tOXF`cmXCN9iw@j)JS@{yLf+RUUb3DFufIZZ?=?`jBIE}lX#J1 zC~#h|ZyKJA{nN9>MKW!o4NQ|MPj$x7g!cRlxy0>rn4g()PFqk7B0C(U7(wxEE2sV%j zc=vy}s_&CLI>2PHx-a+)Ct#_-!SS}Ai#TW-xr|f}09_AZ92{;-3*f@>30n3e(aOp2X z6`m`=0~MA^t7wjzf<@ogM9^Q0OcA8hk|}>pR92JHeP%wmmMdY0^t!_?`CC6|sW!y% zCKd6bYmp6|7owTmG&(-jtvlT4v(c;2d@iUgcxoXiD`bE(X2c-&b~%ra&c{Aav(95{ zh+nU!o}eu48SR@z3;lIP4cWS-e3v`diIr4HSok-CZHlezm?^5ldbeo=pT zG-TxvT7#RXh6J&=?k4$)v3fc+-xeh@jD5v)WW3{&mB$>FhciyqQpV?Y5qSdpxIT_9 zQB&W2SS7}AcEIp_3%bd{N?Eh=_}0cxE~-}s)F*Tyq^?j}FrF7c@R~sK`9SPV{^x%x`-7rOMRIr!;>*SHE{D{15B+f=HAU_l8KHR# zFSHoa5Z0creWV@b+{%d%yd(9M5Mn=!%f z@R;ZV-`b|s9TIRxIe)XD?o68|vS)=&XBLig&k~9{_|P{ z<>U#0|69ey7go(&U4{7y;irEC3NJoQ1-~77h&$)S_C(-m(z!`GrmgK0CdNAQiZ5>N zT$s_uxpDeIPdZ9Ycb=4HRyCG#lmxu)FWYGKc6PXb0|;t!P6LjzsBJgno&oJWFb;Zhoib#(^fy z4^m8cYtzahF4gTq;h)~Z$eW8K_z9OD8h>ozGqPJbc2H{(Eg-8ojQV*8Tf3u(ok@&S zZVBNDzIDtb>k7GhQY(Ml;F?0AcAlGHS(qE&n-Lyi&9{u1_!b~h#t8P;yx#1D2VuK* z{14fT$^OSP*XJo$Q$;U|sfim81ra>S%T{AIDPP_Z8xMVYi70jY1^08Xrk(kBocb0} z!g=&)sps;(IMhznfK=p;YsUIEkQd$AF-QZA61eIowJao+8T^0j)9t)TXV)Q}K8i)n z{jPI-Dd*hYq^$y>MsEWqPpq9cWVRSRe0<#zgJ$IoM`tJ*x`KZXb^xROhAkgqBlpY* zHiyXN%jh|M=~o2|aUVoIanh#d`(`T_1U?1d6L&&&!YARybJ4R!=PlbuOIfuV@&sMw z-oG$OkAN?n2+ef{x|Xsu-x^WHD{s-3ExH6VeeE`cznWXxCdRn9>lQ~R;*8TA zno#Q1DjOE+dPCTaRxEgTj?zlS?U;X&m^&J-nvk6(RFdy?ap){;yKZJu-hmn6uqR15l~=T)l5=%6aRQ zjR~U#Z_P!)Mc-A`g-kePS7utU{mc;?Z(kqip1S{_FXR0DeNrnY#c6(P;C!d==og!! z=8mq;FR;&i{PB7USLesY4toT~1h&jwh%;%rE^_F z6(#O-P(he^XzXW8ZE)$=d>D*db-Ce3KD9w_^cH`!PhUVLQ?Q;R6>f3uWK;ShM-^rI zQ=NI0$F6_N_6x0yyTc%_G<^DRyHX(8;kjHCT=IX^{?Y!=Y9`2BQnIAaITX^eUWodl zmNGQ7gj$;|Xq_RwC+Oe%IG^hE+EDCz=vfa|&oOZI5D!2j&7${m9Py-6=|oxKn}9^- z+EDCx^%tx!Z|k%)nNK#+NW--OrM$dk)_I>S>mPo)CMq&b_v_Gy~sFBm=@Dc)a7n5%sip(mH8PHW)_C;n`n-}{ziwo%Q- zx`*VmZyyzA&DQtm_njruG;zZwwNr0R5E zR_0F`+f93IN*s`b8V4r@PJ<$}BCsYq;-G(lQ|tcp*C0@Ow{ft)Y4|$g#Y`woF-unS zF4^RLoLM|K9mI|ALU-*%xlu}-8vkszTi3Vc(!RjrlNI}tRGbFy=+RJ1=Y~8*(=|ya zu>v^mXmN^n_@|MB*suN(l;FY$a%^&sGeh1_%wI5Dc>uBU^p@hrGT+SWmr;VWqNS3Xo`Hz9O8b6+VE`+?)yRQ%Ye^*=^D(x!jG66eY+c*-n47#_+M)y%w;0vv)Jg@xi$|$C1y3ZK`A%u5{3M zAAH6A?HScnTZMlfj)t?MQ_nAc3E!XQX>Z;?11QDsC15Q`i((yxiIA0Y?e-vwcgu&{ zg#7AZ6*KL*OElsg`lLGMZujC@<-7qx0iBB6X9{4@g@HV7G_Vg|-QHn}{D>8sR>j(}yJ9vmZ`_M<%4MAJN*yQ$Jj2 zt(X{58`f(J6`}K~qm^XOV+`kkQnOGCfX&~iB|Eqhq(562EA!3vMdpgjUwoyD9lPE? zqKK+^^@ZOb<8^zY_YClS7N>u{gK2R;86Rt74YM%p`9B! z)ez8*g|ui(r&uUB%Q+7#xk=kGF1q#sqiBHS%z`6jYTw2WgjV)F3+2;|kp}JuE4EtO zLWd9Z9`oSx>BM2dH%xD42=ynIRAlL1eLkoNgrA!bV7ILaIX-)MK$m}*yYfNMtWS?q zVp?a8KY2?Z8Ky0lh}^JGZSN%T6P07ETc^1_BUf$RF+Nd|#RKrLMd+A=f-R@}>&*s3 zEj|2j-p{iH65d^5CDuf;v~seS^RooI-B^+-YTeduy9(0E0hF<)$?(|kC*j>9Kyey= z9!Ji!eeQmtsMa5{H70*Fypg5Pe6(;gWlT)F&+%epduR){p5768oa&lYs^BCdlPg)i zNZGTvEU`q0xWs+hdlJJ&zwi5V2A#?AV9Sk?!i;tauo?kYr$dNgv`nx3>Qj33&Gfid^plrg5D+|ka z+u9g!sv&n%s~UG3ImEumKDKuD)9_@j^pYlVbJaw&91Ak%62Z2$K!WR<|IqvU2_b)F zYYBMNW{~`Fm4J}OfS>C)Y7F-$m3OU}cR{12&KoV*Nnen0kS5ie%7%&Q>UdZ|@eIM0 zeN$c^EvozVCR2YM=39g33>Y`+#1O~x`-A$lI~ACbq3lSkc$|Zq!Su)5H&Hl$WWjK4X+(`G1`tnlW0ilsDPD{d#6dT*Vm#a8U7xu+ z-p&s$(q`4OSJ-vO`*i=);1We}H;i*3cE+%Na6YSJU3?eZG| zbBO|_|9HIXr!~Hb<`6#S!g`cBv^zO&AEj)oca@Cdj~QuMr1nV&%`?Y0`)O;M^4X2sSbCLeQgv$t zvO%o}aY-WqZLLFUzk+AK#}~z+`R{W)%x@6-N1zCk^8ReleX8Y*a9rf0NJP_#9iekJ zEC2p&&J9^UePNko!klrF7c*r05Lf*B`8Q zXV$_V%@MsmZ57d)IDUXm*AddiluiJag%S>n9i8BW#VOj8JAM9PM_qv1E+4y^0Z7*#jI2{sLbwS8g>_ z^X%8=PRljm*oVAmLX;~{$g5v$QoiW<;IAJ<2tAa%;p3vR(L5p@sUK#rkaP(9`73DT zxcsB1`h{{u+I#Q|a&}r;RWD3JhV6e%h)z#Mjryv{p|0KZ+AbtXBL>!7Ma_$tNe>u1 zWO$aN_Gl+w0mxUpDSj9O7gKP1)&58b$>c$-pR`J@BWM@|F;71~k$)AiZlb07qCXJc zvDt%W7Ldwq21NT&(=98_G8d1MMrY~ixn&>F=`=zvP9T4^xPGDK zIr+3jmu$#8d3q;;G1Z2FckkzyDynBTG(|$GWU$lg>^DL!yC=l)wZ`T;x~Md}y*U3u zk3G~L;Uq2cXqs#p^ss>N(c0@%rlak_#Mz3S9#vXd1CvF>OTPoQ(4lA)^cN*5lH;%616oGcLh|MR)Fl#KDg$_ zHswfq;3!Fc0ZAHq==0Z8RqSqL^v3uKN}u8>#9SC)QNhI;Os4Uxl%7SCPa7^5aWe?d z#cOC_*~67Mr0fSxOA|&8tI9ioF@L)XH9Ca(Iv*jaIl&_dO-aaUv;^EL^`+nn|=R z>JrD2W{dDk%^-$7p&@Mh1;U_A zk=8Ss;if`Gg&&%IUQ{XNa+R!;}jI$UWtt%rIr$D<(Zj0|E=>-!_LkR`diGF{)}<$ni$|RfX{4 zS1(DjBeH*udDD5(k`}``BISK-(DGO^`IHGXGv$>-xca|-BZ-WpRA1aXvDpw1qN!!* z?}CrEnk}PdV$)NU`vj<4=tcUnx#aj$BPorL^5I6n4xQH4D1{e>x^dw1A_rZP5J-6q z^6pE-D5;XbT0ba%h&G9=%jq0k3R21p{&d=gP+3bfzc%Xf;5&_<&-;%!kRf?`2~DHP@`* z-t3%G!l1XV_Is%tx#v*L;X?#4`E01kJ=9pV+-KybmID2YT{Tyh)z|NgvQ~w`ws`mx zeR6;APn-}Iul3by(~&qx3O>nPQnZguWx&6SlDDGXCF@Q;!&LV0-9j#ZIMa=;`z8bL z3&27djzg~mS*5+L^S@P+?z?*aCO<|twex^@`VA#LVe6G4P+0LyUF^e>^L(8e>H@g-23fw(gtGI`BTLUl{;`S0*-T z_jy9Y{fap%73x&C{xPTjNT=HO3e1w(o}74YReVI+D~M@49xAnapfy9rj?(+XcRPe# z&J4Y^XfgT1U@wMJg+qj@kMh$^a(`|e|4$@M&$ayh5dM50qMB+tW%g$#VX25+8Sj4$ z9{i1_iUx-3s;RnP!=)dpUdn6}$>GM!BTnCrOPUhrxaPZd8|;1Ax=6pb@gzj!-r1BW zHe~%UGP9NxxqFuNq^=`ci6mIhhn}T?ik01*d_Q(j)@=qsPKTOj)>~&^`~5B2_QC*0 z7_a*ewNrMKfvgiK%&$J|R|BQyLX(w^#FWuwk(HK8iWWIkVP zleaW_xyxw!)qh&c+{RKckIFTodB^-(;f6*$}Egc{aC<*^fyi%-@I*(r|x^oPC2f z8^}Wc+BhI*UG$5F3)&26Tr$&TQ`$-P)Te#%w@gmAu@0Xy7e-uevM+*u2FRbEZJUq9 z_H&MW8x&&}UtX{kzANjTTcgG!l+dS`aA!c|6iV-^SG_59(qU?ZO9naFZQW0G8w`BE z2x-t7Ax)P^EJZ7C!(`glxygTz#?`i|)V{?A*5GBq0G#i;F|MGe2hw`Br=K9;M2=CQgEBk*iWzGz_)2rIS z!!H@lDEnC@X{-lL}*J=_(jx;2;h3IA62jvjySrOqsL-EY6{WO}rF z#1eNj=)l`k1R9>TRcXNjs708Nk+SG0-3rp}mP2F4(Q-j6N^%*ObH}bViPGbW4mqP7 z`iLbKEuYBC{zmZ^ovn2IkcG22C1FVTHZ-g=VMF5E1rTY`!KaO;;`l3VExrPitV71U zZxLKRwv9cC^5uW$Gr!l_bQN)M-lF#QrXFDY132tz_aQY>!9tF*(4APq+r1Gj-QaY& zxn~Zc-kgz&C5ySYaKdR+Br*eO!>a6MWR6YCRu531vFO z6Ew1|VaIm-Z14BETOE?00F7OyGceM}bL6_d!(RzrKEr<6v#`3bn<-YJ7;jDcgX&9p z%b_%x25<|}GUMD9nSrACIZ7Z`?*j+ZdILLsrh=^|)FcAbIm9R!#$)<0qTOP(HU^i` zPrhyz^qhZ7$a~}HeqiL=yA*oke)3QpwO1`#HqxgJYP`8lc|Z9hlf>Z!DJ7wGjNger z5cypYxY>hg=fZ44n52~YN`m2r(06l=n4W}i$CB)YJ_r}0+&h&N8gQ2`2=?Btq`D-C zkd1H+Sb5ETb6nmY{QMzW?QJr1U6n2hZ9!0XIemX&n1R80+Vg}tBV~L+u%k!X&P#p~ zDhAmkK7CO9tj~^DI`OE);z$Idc7G>O@TVX(V<(TouxYq|Gvx-hZ6;30qwW9{ca71x;ZND@GWTicIVYn&pJlIUM@7QFXn&o_5%7f&j~Hr zEhVW4uPv8HFD%}tRL=RCAHNWlYilW-`SE|mon=7UniQdpT^nLY(fN8???PwN<7wql zT|eJ3(mUHpc{jQ*rgAC<6dnEq+<6ZExF0@~yMNLBUA+APbOd z-A}|s(No0KSXNBt!M?cU?oI_U^`Cz;P(G!r$)sXnV0*>=QxJqq@FX;Ka5H&xMG7uF z16kk~FRnFav9~_H{*!}p&lC!qd?zJdZsx5nl>6JzebJak1T~w|3~6C?^ohi&()DFU zO1h*5uyMSVZ}F@_9xu6kzoBwAGQe5fQd1LQgwWCqWA+|(qOAPB2#x05ZIXWg&aLbx z`4b+IF$F90ku9&Fchy(3&p4athblUQZV;!)6K(BBY7HgVL{{^OvK)oacNcE+*#l&r zVPIKw5f@4OXlUyD(y2bJ{n_qhh|o(loUTN+5UcgA}Pg zMg7NLrrjgYXdMHSv2ENu8sZGycYM7PrbZzU26NQ4#Wg{DL%OT_uyQ zv>Rh3ij{~@Pv-7^uu)yKWlGqGo{?X*@l$eCKrik#?zBa(jRxvwoxy+aUTV-);la9KyDYWP|mZ_ zyRX})t))`e(^{yvX_ym9cH~TyHt06@dn94!VC5%sKyvi!*WZ6!UO+I?NFqz-F8LYG zY~=WfNo{6BOaPmcA3nFQPBZVhhhwg8t!Zr>O1mqSTbh|geL&eo$k8+`Oqq30jIc)D z3k`@6!Yd!Fu&4wXq-yl zpJ`xXS=sh<`N8tWqvh#*WT?^Vaqi%9Co|CfhmV#}Q8TFuJNgzEPv}*Mh>d~Vh8aV0 zu<)0=_*ut$T5L+)cjBY$$yilJwC6Q-%D0<094cE>@=wy?DJ`>j2P>4&s^SckRA*ns zY0go&CtQD}2;9b9)Rx|&_U+uLrejd?kgmJ01RgDZRz*sWceqHg(JZU=q9doh-Z>Jz zG_>lsp*cwwL~)hpqiG+cLH-szcos5pikSFqg)ADSEs{hQ-?r}gsfH{#%53C)z91X+ zHRBg$|EwL^vuSS+7Ab<0xV4;n?+Ho2d$#e;`=5X53ADZgnaV@lRJ6|bl#;w6V{1JF zSIhX@0RS=(Cz8naX8np?8pvwV!Bm@%xUj@TO>K^}j}=*<>%BDvxsQPy!WJ8Q*{5hD zqX>V@M=P6#Z<6EW^y4`;!;LbC2jMzX@1?89oiOstUPp4-Zfqi{9{Ifj(fnK*GNn>-MTXlfL19YQjJY`z7zI{#*4+(Cy70c)&g2 zGHWgrv~4!z)DhxTF(pKb^VxAkOJ9Fr{<`!+ASq<)-bVoaMYEIObTe+r+{CyR}^ zS)Dtz9z=Q+FUluoJ*RP!!>4L9L~1j6j#AKy0K~vNFJ0|qdn)5&zP;7U{u+N_Vc11h zy|Ng8la4h^ua^I(c6bclI$}gj?Gw#=G0}8vOX?GGTx&_TNNzaU3&fwX^t{U2?_$oMMD^PFsQy%Kpi;89>IW14>Py6`Ls!30pb zlV4vGuGS8Xe==njrk>TRthi{PO)nc&^n<{E{w1jfklWp{P*fM<#(jFdX5@iQS}?SJ zH(HLN@`as3H$xu{qmZ|OKVk;k>qez?P@q%GiH+8huOMSz{6+SQk9Zbk-^%7%S&n`6 zLup6|3={Ov> zNvskb!b@b9p%$gD;dt$Z*+7#oXL{xx`bJL$1|8Lku$uIX-ji_#x}tr6^4RA2{%}@c zS|f<(S^uSbPbv4Z&0lorL(nfhNxjQFze( zRU3jP@-w=FuYqE-(!n+QeIgol5^>WvhP_|MCWf+&`i>J%Ili(@xI)z;g86pSseIXn z=Oq~je&U`}P{@AIOLKwp54skAUVfnD;o5wdo{}`t|5>WS`qI4)arL=wucxv}NXa0H zgaSi@RSL^qKku+I#}7#z;Ywb&;uiDC44UnTcV%nWtlohy1fIwHYFynTPRxSPvTQUtT~hGDfgXA z^oo)`*;1-~>5i%n_cr2xozpL_jtn6cgZa?TS;xM~vS%28kqIUrap&DLngCW^$I{@> z3cWbVU;AmaG_G;9b1`i5;pSD`TIf(M^!N7WpJI)ST!n5ZR9`1!<)P4?z(L{deS60= zgaW;N{diYM?3~J23=%8-NAO0D&8hl-r1;JLN_vUbH7;SS)w3gi@u6$%X{*Q~d-p@| zXchkX({a6l(SmS6OKueASMul-+#c(S?mvGdSoggKp&a&hC9$Ndg!;9tA;*m9&+gKp zb7GG;VbIxUQ!x@r*{K%FuA|WXpu@O}!O_m)HbKO{pd9DTRXXs^8!~1M!T$lSJzWVMN zmYdU)>5{GVkNSpAuiKiNfv>-3q|RPpEiUFU)mdoWJvBA+3s;r=L^XKj4Y{hE#C$dW zk<@f`SK(aa9qQXR^I@hHf8;+u133`TQBI(F!?AWCD`@8K9w}*iV#Hjy!CD; zw6YSTkNb0fEi*|?CXousTA|YObp?Qa=+_tDE)rJK(1|@AIovWg*mc{58$&Qd!8w!G z3i#voB;wZm+R9^gO!y{|Hcg8jtpx&0Pp*R_oG!;dpj1Tium&D@+){+sChrr&b()}L zwX7YnHJWU&EXgx+z*pUqG42eXrT^gIG@Bxs{W`LVtIO~=qqWc9QcdnDb`ZW zmCoLO`yqI1L~RV_GdE&5Bm|_Q01<)AVP!0W?sqb#O8x5LW{s)urmSOCWWDZ+QgpLQ zJ2T95!~*WB411(Zb@qgYP4$34iqle@ISd8^DcBcEo-NL;yqszMZZby0za8C7xYAdM&qq7s}czZClznyOmq0UNkp=^V~^d$LUpn z9|KjRUlDJ8S_L&KQ(uVhd0|r~?pHXt{`k+1IuscyB?ZQeTVFK0@m=nM&e~lF=B#?M zL*}4)bh~l7ZiOFWQ-`LZOx|iwN`4UEo!J z#r5P-bHk?IH@-Wb@4v8vXP24M7r2)2l~6ak9)ii`Wu9~tpay$;wYnPFYktGPwp(U* z`9Um+sZTp35igDl>P#BYcDpg{>3ut6q9a7nGr&PRLdS!I&^q?O+IQn)UwRANsb(=w z3|M`qGqdbNF;u>f6Z>$&m3t_$Kjg!IvjC}SGD%s!xQGc-xt&5L<2*e(`>?zfO6@}b z6I1f*3xf|q*_W=Gw`CuVTP!{*!soC>9njpe4gHF2rnwb4-K&x7HJ!96F&vcpSU2Ow7%%M3S$D|ywtc^6F?#AWBZ~Xnym-Mn&>~kT^s1hJth|bC zE%{w_fNe`&yIRlcPX0~PnbB(RMh~Xa;_6%WRqVLtNc*l+sV8*Ke{n}p$%_CZkq_+KDpvRJM?_3VFnSM zPPPl^+xB7|j2{!`y|f&&;z! zom?UFzL0)|MJj|Rb8LlFqi!h2hyVTSe5PRB6Vwi}QV-dYsRY!2;yE$pIc$loHWZG7 zYk22V6Tw5MGIx_A=sQ9-jreK1s&*u8@sW$Y?{$@84u#%P-wanb1ozB6L@8ePnkgko zXS0nq)9Q!UoGd5P8Lb<_RG>jb72}~lQzJ`ChU~TGH!+@NR1adKLPKC)XW}6 z2Q4i%fdZ88%f8$5vJnlnMd4*{g?52)Bel2L=H+7OrJeYoXd&G{axpsB257Jp6x24DAo7{Hc1t=~k$C5TY?XetX>eW?v)kwTkTNmR1C z6XsV`$l#}e&dOB}#Cu*1Yht}7#R%ue9nTaJrKhHUy^N%fsEeN%-TZ{yzk6L7@oKNC zNYjW=GW@y1)1Hlq1b;Rb(sfHe$F6T`D+qFnRoR-(^HyXk8YQ9)ycBtx*@|%%&X(5D zO8K{F(D4~aC~XP-(%gBDKauztvQuHs6YaPDUpKTF8^nH9dOx&ujU$R6Ld3;Hx$4lO zIb$q;DGl0W+SiE5%9FscBk!0R zqlc&5NmyKwi5q+ssB1ST;T|D^(D9++IcE5OXLtl6D~C!)^^*;B)I^_8lg4^Iu2jO> z(((ZfZxDSL?cK2oYvlK4{(W2#l zDw2Hgd{=ml9FbPrab%{^M4wK?C{dHJh4ZF)La$nlI@Oipu=!wI+YLR$Wp>;S>7aH_ zIOi!b8Yc8=9bxY*Cgjb`*oleMbGoDlQC#xZKNePcO%EzQD216Y9xT?+;wA~>=Vv0d z8Z@8rDmJP!y+;rqfF4oVd=a&@FXeuJf^>|vE-8)m?RAWsy9?ApCt@STl9bTW(t{u) zGLRej-ry_pq?;mXWl92jbeq}m$gT#cU1m>!|D_D@PR#lhuLCB^PP%a4aR(zkBDZqp zK>Wug+~6Id^LyL2oZFxIE4NER?PrZ|{DCCya|?1?l?yuZrkF#t;Rtp4%TbGe=)CAc z)$1=Soldp%K4PJ34yv5D5nwi5upb1Q;bLpO^%WdNvdRfqi{#%$hpX4uxt}rq ztqJ#KeIo9ccLQhj-;vn0c5C1;)MvQgJC!q0&arznY?KHcJo`-Lt*n=zwEppVhnf4S ze+-4ISL&`8+LPuPgzuePQVOJhx8jqH(%5?+05+{oTMQm1R2Rw1-QQ`*4@y*96+*v$ zlTg4V*1Y5zcab&b=TN6iH7{mSx5n_Le&Pide6LY|98?sh#`>WPeJ2rBID;fQuyh&h zj-d9kQm*6E2b(dXrRrxrksW(R{ManBv>06$3&cexL5MO6_h5$2mm7tDLNg>}*ug^~ z>HF^ZU6e(sr3_McmJ_)@M*{pJv69}Y4Ra`a*kNdXR=4_W6ni0eeamJ}_>#PpAeSY? zKdeTTqjJ@-&%Oxg^byZ5NLOEQa+*VSGD&lwqM+RId@eMa5MQ4-3hId$8FP^Zck35; zkmt%o`LV~UkvToYD;58Lmt0TE&;VH%xl&<-tI;H`W3RV1;lsnZ@3L?L({JQ<40ny)LwWs^fJ*2>K7DI=n;s`R;k-mTkIvTjt-6wmXf zo1VjS^iCJBd+#qrCmZ)F(Ri#S33810z5A=5?uU#Lw8XlbkGqOVGrHJJb5KCfqhCN;{pZi8U=EpAkrF*@`}OT+)na zpUQaI^nvVxDQ7Exm<+=h@?{yHNOhL^Bv&kvc3)py+siy}`RV<0<|#U^?zhytUrG@r z*NUUFPqZBdpNvI_dwH%pdb7;3Jy&n=%#aswd%wW5$XED6Bu;m$)@T+=sthS(cNqmQ zfA>g@7m)i_KNZ!!3PHxHO<3|xd12_@&)n<96FbeAX_eo9(!<@))IkOcqB$wzZCGe= z8YEIBSXtZkBCqo%1a~ty?zZR&rQ6TI=W!*qV=W~KsHglFr#nCgyLH*8zJH9@PDj(Uol7o)AVC6~EvO6}c(m^wu* zD0(M4pN=?x#X6(WpkgSg7?_09ewmznolQTgJf*pR>hA5z_X(Fsuh4p#x|JaOCSy;J zC}>RFS+4Hb`86G5tU84s-JW}?UUCH%;;LUEl;C@vAoB>pAuz|l?1ydrbo3DslYsyv zni%e(d5gKOFg`Ng>RPIZ%J733EpQ9Ozc%Qzeuhf25KL z1hDIWY{JE_MZIDaby+eYWcwrzXfEM`{k z7iv*BRi|JJ%i-m&nhYXX3<%8AM~N+K7}*uO1Po)%BlUipCA{u9G|&PFlZx3vQt&wA zp`^8~y@>}Sw^_BSrJOsQL=gGG)LU}~q>4L#U<#EC&)4#tpV}p5RJBisTF*w8g0&Mj z@u_*c+MG>`n-rj7)hgASm;-s7!An4ZX^#(o;%o;KrXKV%&8CqAB9G4rf<(e=ApRLW zpv|rg{V?3qyHnFO1l}Yg9ORP=z`+nU&pwL^|JY!qV-vS zF>HukFkX3~Ogj?D%XGgr>2i3T6b_KUI0JcTRqxyz0G?1ZWCGsK!!E5bA)QSpyawqf zxK3(dB5#VF4UQ1Frh;&(j!G=5$G6v?-Ai`28j9^N>u=d(k7Z%q%8pOPW zM}@Or$cAN6^dBW&pswU=EEHH_C^z7LbCK(j{{9G)N5h$Y1g&aTxYmTX^nL?$&gir` zS9_~!2wiEe>rr){&tMcC2sHj9!#5O;hF>ro>_j1DHCqT0?) z+55+8r1dxkS61+8P_Ppv)eiu{jrrnO33S2CB>oU@7wsAd_)gB;G`Ws&JXiTNL(j-= zPV*edbTl3#|ExH<+EVo&anp((XoUjEnl+$67=XO{W5y65KW{$dUZLg4#}f$FHb5Lh za?02Y3|7&mhbtSwE5vkKKk@N^m?cGn0RRM~1AR_Bhdm zdq*BuYJPD55fILLcr^3%ps(x;O16S>-94UFwh79I1#dL!n^kXf-z#WJ_2=S)HlX7Z z)nO%@KtYXj^9ed#f{@(xx}Sj&pN}A}c0P}sG|eiJqIldYGn!)90=A^#SYtU*(ffYv2eO~jFM0Nh z7Hp3yt_>}(FF~b42^mt3#dEFx%k?Z7N<$@=>h|op(}Bt|`qpM6sN$rF=)_4k;uTl& zaLoEF-@M3+Bj-GkWv}GvZ<=IHQc|2ln+-+ETQD4K&R+x%rTaG5{KDHs7sw28a?Y=$ z_3r&4a64zR_bASPXP$^k*GXhhwk%GdiaI0|j>I2fd{K54t&N{?-F9STAr1teD1Mb`>$xVrPYa2*0j}&W)e8jrQw4wRbj} z7Hr+)Roxfo;T&aXGgSL=KF@%(HSTyaYanm0a$HCFR~Vkv!cqYuCo$kxT-$6U_-p=D zwgZ8q%fYSV&wzvDeS@D&A705S$#+bhZ=QGeMyNGGzsAQW#wwMH6mv{zJ z=RdxiyQCIw0-%ys3~K3e815#nSRJVL>QjI1mv~>i(udR9Im44nhXs*2QZKEF1*^FLL0F8g&H#%m_u;*W zP7Zj@3wAmZwV1&+Y+HAwh%P)2#U$?@t_knlnrFK|Y++~HpqhvJSm2maaFpX(UZ26R zlPjLM4{pnoTcJial1sI>EMafYk#szal?a!AJzduQl7s@fy_T?IPZ251snl+!ffJz3 zechmQwYJ6L83IU7W6%Vb_)TQFh%C47qjU7fmGCnAEaNTniVNjwXG z_J^YsU*y~-;Ai~3B!2ibFaqT7N;d>T1uIE5Y9kCdY8_}~s zf=D*iVMDZA2-6GqiuT`c5yt&_ww(BaSzAz-2jJ7vs3cG#8mimrO7_?XgUF{|&4*p8 zL5zj?`G#QNN%FFlWSdnOP9Xkb-R-)6A}n%rSdod{Q1J;TsMW~z4rZ6Di0&7hraYt% zXo|cICZG6F)G7*52LzX{Mu$d18Ktav{+Th!KYZlr)$`@yau`%Yx}M{{0%+XvK#rJh zi|jvbZN@ca+CWV!SzT!s0^F#ci-f=%OS}l)-Vi(6s+Ac>e2&HZ;$7SlDNmVy-Z`W> z6c%mhokyrXk6=iNBMGWlx*Kl{YpyziV6%|TmK@+_4sQZBTGIA40%cEyF=-eBJ-Bn~ zf1&PSJpu%qPm+FI&tr+a+;1KCKjWT&JU6QoEfMGbTE<=u(Aa|@JR=bZ4@FL>y^2}+ zK?fhK->zY@>nVmiQ>_Ll|5i+YlGH_PUT6h^C~l5eL9F@f4kcU?pq@_rsVCfF#K0Fr zy-;RwF#l2yW;lLYL4yW1MQZl|6X+RzPKbt^tye+y0HV4Aib3rK|5P^!Wo`DXB5pU9 zh)I^~g3Xljp{7R~dfUc>mVwQDsT0JV&QH$MU@^emz=e`m3F10j6Ruo;dw*vZteW(k z>cV)n)eZ%1FMcG-?4}l+@x-1YW;)M@j}Op9R&NM9Ork$VZCcC~q6&7@>=sN(t!J^y z1Y07>_wx7RRbs~s!cE}>h%K)vWMQd&LG(pE?U`#dX~@eerM5`wo=5T)D!mT~C5r&> zeoPS}`dp{(yg7Ai-1_r>qx5%Q9ZXg7yvqU8wpe$hhKtf^wt^!iq|lFigpANYpBeom z1II!>x_r55I?R zCovW-q=Nox(AkNNkv)VFos1(BYuenRi%%Y6Jewr&N?a zp^UBgEH(Wz=LQY`(I^})nY$jY)7}Q$DmeB(mxIkZRQgjq_zuulRu>l~qatxMdlLs* zdo4k2E&?AUO%A<(La019d_pgH?{Z`O-f()X7O|n_&FD0R$c3Et2kBv>gZf|#c^tWG z_4+eC;hpO^>r_tpYGUgMBf3&ewsL7oKo9vC4T-f@hT^>P9&;N9N`WNDVC`_ zWPb5&LbOHicSHE{R{?Ie*BqsCTy$5cB6|rS@q0S3x5S!m?W-HD<8coHJe*!#js`#l zQwI7+E(>qSnyj#0&0yEi71n=*C5b(=+%^)xfP$-sbh+tP+Eo$A`v4#;0>300q?7FJ zP_3Rf@;NYnk0O6yi8Xz%`US7mD=OEflzLs_94v~_QbTP)A~s3Z1^Fj`|6V2PrVpgqMj$>n7o566|vkw1q=4qRN*6r<~=r#{{PDYej& z#UXQlA^Qre@40-=^)Y_@h(70v=okIa-#ZXc4=S}_LVx8J09-w@w=hZb1{V4A&FV_)lfOJ zh5lxt+YjD+;^LhGvo(NbAz1Ab%ILYQipS1>Cyik1`70$%o^P=NeP$8x3I7N~T8}!o z1@zE$yL>IQ-gVEZh&+5tB`f}oh$et7yrWxFDQX93x2|<%?+-y~EI+6yHKh8uZFTqoO+hyh{ydHk6Dh7CAHy|DqHtZ|I8e*j&5DwRW zx*B@JgpHC8+nUv6`|mP!_En~18l6zmD)R@IyI;Tg zhxNP2MziK-LC*z3IsRI_Lx4DnMGw z*uIrbOJ?YwAW22VGV=6MRy@HHPp_V!U$n+$Tx|~#p9F=5F#7_JOt+hV+Q?X>H^nEM z4}zLs8>U&XQh@e28QIj;VJ})M*$rt&;mPxixfn!@_yVW7!CqELv5JQkjrb z(eS~14_0X{(%1vKGLtP>bI|Qg1j!GdG3y;_O%W;;3e2U4o0Cm{*ZkyVKbvN^Ivx5& z6Qf}I%-(>cd9?-GC0JuXTiVq_T*1w4Pu`|7eDS~S2;Xx59N`Cx3Xx(k6j!5M;Altj z%YqH6w~#Z|lB4u^aIi%^Kv;W(#A5{3_}U5}$8H3oBVuiU7pO1&iR}@NtES~a(58$G zwQP~*&`kfBJtabare|F=;z)4cw?S428lxbUxpK-eFF-S+(P&8|SQcjwTAVU}o{{u( z*RV*JN;O1>^r;C;n@_P+9ZBZ!uAba7&x_3R0brwIqEbQoy-Vrzdaui^QTWf~E=<{o zL_{|lYNZ2_VEtfM%A4?0bM_P(V=5Q)bZRDFg1$~v+Y zhZwMeW_HcDq$8!%$3+H>udNA)5z$%HA(Kzv0w}lk2a&(uxy&Cw-i02uM0Whehnd1* zmkXKO#B$nYh4sXzedia^85>+M`3UlHIOnMh5mRx^9$21X0+$_mJB3BZ+tPNtaORRf zw;R({Qr!N3=~S{&F`>CeBVH@@)F*0$(tM!W*)zoodx#zd`}7oY(w!peEFq+yx|PAz!3&8gZ^jw1Z|yGT>dbt^Gj{3dzTaY^w{s=FI{q)YJ zMTX)9Ns2AEkua-<8F4XQHC0T%Ut{j0lpo=%z1V$_YJv(K23Qk8I>yvqj` zcvCjlw;(#yR(C$Lr1T}oet2v~vbXp1!+wQ@V{8|9GWaxZZSPmQ@6FA`JU~VyPkSFa zEJMn~ZHALflP4*tv)qz}Z~?a2CjV9g6Z! zE)x`kB6l1~Kx>Wp%&1Z6T5S@zftOr=CfW~1_?7}05Y8nqsB1~-L|JW_o}#muN?|`q zj~gh9Jam#-kpgJ4-rXfxRX5#681C?{B39YH_A28vLqMDKJpHDtW#@3r2;08oBg%nO zlsm!FV?H{y@a8;qymb8W5jH9^MeK|k8WJe71Zvuc8`H8!{KsZp=8%5w+R9>o=_bLP z7}3wFgyeTS6T~FS-;0g8hFo~i;*j#pz3-esocPa=h6ko zV-V5Zs@IJkMlpt-7I*e?=RtZf?o`~{F{Wf8qTr)!^$t`?k{)Nb+f(>|Z|e^{hN_s+ z@c`){=Kxrx4Svz`+Sfdbp_l1#EcP0+kH=OsFGUi?(a9_lXUb64ZT-W!l#3W*ZOc9@ z^MK@#N16?|gu^#%u9rG4Qrh4JPNN#&E>%I2AnkOsBe>;t911Mm`TVd(zal%@ia4f% z{rigfWB$Y0GmS&LUkDX{syK_^tO5YG|A&P-#14LKiW}}5S$peVqa#6`n)i<FmXbaxTMCk724nUVx%T!pp1A-T6cg<_&>Son7l0@VLI4sdVhDelbSo4SyWeFs z_l3eIkK*rc>3kXe8BODuDiXVdm#)DYIaRh(O)y8%dlifo)^{?vUF3!?Sf z$!x=dxw+RMkJ79BA9b32dVE2|Y2F$-Gn5jFFL=4?QkihZkAP>| z=(VQBF!G><3ITYL`F>>a``j(h>aM7vZp$tG+D*=Chu~S1+#jY>YIg8ozf6XWD0j8d zj;S6ksya&{p78~LOxfC_#sE#3U+C}xP7 zz|Fq^a~2#G@C0pQ1keP3QK1l#m@ud&^?J1Gw}mezw*( zvRY@r@)wxY%SIfBq`Yva$&KS!XZUKYpTz|$Vkf)8lnI7H~W>%kB(aKWep(awiw zGk=!6gLNG??_t{v5w)cVe*vg`2EEGa0ReWRywJD_Lu2GNU%5#g{lg}j<)yQ*t3wc# zJmACaVE}i3h{4V96VcqKVam_sZBH;BYLH2)n~S8V2KM68UGdAks)=4Teo2Do6wdGO}nBRN8kuT8!3`g7$?@I-;nLP$6`Z62EjZLo#0KJOn?=ZTZrWvxiAO&SW zSLEkrTCHnBE115-#E>=Sq~Qtw(Q6EGs?i zzj-i!yCvTfB|Y3z;k1idE}afNw+u#1U##9?6InnH2+nSZ!AEC;=t{_d;nq1PHFPw3 zki1RcY3AzrP!P6EXyw)Ig%T-qK*XnM2y_5QTomJI42MI4pp$QwjRg6Dvnad$?(X22 zit_F-rscGnGR)7qho+BZ9=ImO>er zweDNYA89aN-x*2s4f_xITw5f zwE^PI>M9qx3HqgvKoSB6(37;!yrnCvz1@0R!jbnDPYBoWujueC@U&?7|8UI~7+Fo! zz$+vi5fb0|PNpLN2A_TUJrHWVbEdI>(EPKE%12lwheyJJoyI&*a588F<;xls(rj6N z{}#4hpD2y5V`oQJ0UBFb=*cbUYTro9OUhOY{`y^Uy6Kb~aO*%HD^ZueBHjF(AaMb` z`o5`+=AK5QMbrQ7Yvz*a@QWyZL`G^~aP&cAE#K=ch|csp*irX<(#L6(Q<(OD>djrq zjE%`v6D8bJvjVgxM6HZNtuEMYrVimO?tZ{@zgB$;i4G*_E5-JB5I=aM$GH!!sU-E! zJ-Xwbf7ES`JC}h29N!7PzB5z(=voEkbB_QeYuF9QxQuytY)^s<*eeqR(%<{8fOr~x zb;2y^ys&TUvcN`{CvvL!8^N-Fjbhut1EaIni9mXeO3Y9WdS}7t5ZWCU{#BzmA^wF~ zx!br~z>vi5k-#Zi{YLF&B5nME1+76|3tn7mP~V{DTpOHNbM{j= z5Y+@XoHX|jm=wKLG2|G1jQD=!?7KxruFi1eh~fFT?ik=t-2!+X*QyY$4P$r_~$ zi;BBW3Aq-7oWJK`4fKS%MQy>9&+0>})sPAtq@4>cgG+nOo#zRE-)5&ogk~6TC;g9} zZ$qB#QfgF*=LEZwU5`UrIV(XSihn@e|HsHQ4y8Da>r~S! z?v)oLWFk}`iwU^v%*M^&8M4&jHUpq(`;WTZP<_l@&KN(>rtRH_8U~nxUzCb2U(heg z=1&Du-%xRW+ufmm@$9C4bh3`B@ATKuGQ6A$V`o-;YrkVt~*Iko(DzE_w;Jk40Wr90WKSvQBhHcK5 ztzwJNgJXGr=4M$Tc2f{1OUVN?trs+lJ30#sD)4zn#7KC9L>P7C-UVZVO#Ve#UZ&&vee-}nQ!YvBw?5Oq37 zEMY*W7JaMK9?3Ci4oTx-A!>P=C1MFhZz3|aDpe|fSQ;KR&N(-XZa)oB0iGz3z`}E$ z$O$e*ur(Fpa+EF@)*_Bqv79W5y%ZYRkuVq)P`b}7=fhPPvtyRYlKH+iQZS;b`RWT? z)>b=jC_`18^M$kn7(nxg!zd7RI?-{hyMAw8yQuEtgu;<{Ls3QS7L@SRa?%fm>A@s1 zIp58HPf=r~^+Ko9T7YZ)${;t;oG@IKp~2O6wZxpiq8p?xa!PugvSP(jpn zHGvfFvF`z=4W&fQ`P7bu>NG)~5Wgz#77YvUZICeB5K9x>7bWOMf?Dgzt!LD- z{4Wm|p8b0U&1j~1xKh{C0s!xnc(>^KvaC0My~)6pwzqm#SuYNcEfr*3-88Fqq4)#} zwdsiaT)pVeVL_QiwrC=uJPBlao1YS~|y_awM_k zq0thkf&}C3iod0Y?-SkUbM~j}uAX91R;LFpl#{VjqgLz!?4^g5WhS+CgORn_vI8l9 z%N+gd6l_ZrI^TEXb1tgqVytG_>?=xXX}cQ`Yyg4CtdfK+m}3)1PrEFiDV*Pte@r^& z4etA$-n%v(qd35sJ`XQemWVdZM=Ep4t@!5;%L>Cy)l z`Kr!vz$InqV4C3dd!x{P3Igh?n84S~3I=L509&ZOb6;qxVWPsGYLs?dt#}7pNi+rZR;B3JaGx2qCh8OAl+Udu}Gq7{wjPL=x=}+ zu0mYJdK-w0T69xVocj=2K4-C*t6 ze>PACMIJ^`guU6p(Q$e^$d1=>qcJi>I}KA)WpE@qQ$DK*p0Ge z-rk0wh);RMlx*aU_>31q@VdrSRoA-(E=kJe z$gHss%1;kc__^m}-Qz-k9)qG&^OiY0{J>hGBpUSfq91enOkrTuG~<=FH|qEaJC$EV zC>Cer!_V^t@&D+57j{;q&s=3i5QBDEGDJZxvB0G8jq5;{)xyz2Y8=-NgC>->1euNG zw40w1_w#wU!EQ*QK6FC`AM1Vt@Z#^TZY-=_w}Z~EHiFDXalgucO5sRmPKsP7nb=#o zw{7jhgKyXZd+i+a!SG*?^w}GnyCGwp>AS$WrZVd{6xXZGcdQvGj5nMu9P|f9RYdcL z&PFqL!y?Mk)oRKS`F-^~{A_TAh_#{#Pr8Q)4rGOP;2^}uhV_#$BZY6W@fiLqbO?W~ zW`@=y9caJdkqB#lUhKZaFWc_^Vi%r(7swMVrN1$=^ymDEqhw&)z&qoO8GWI+KXBY# zdm15htlXqT}0;cYnDA@Q>;pP7{Pn?71~a7riaSC5+p$w zqbHYk!~rPU$AZl7_{x6vGv%f9WcT1v@y{&7iWt3gQAV|>o2(`KiYQI-jiRJ@d z0pJL0xv@Qxgw_Z-@oN=LWS=mxdjrmZ9G|y^94gE0(|2Q=9QV0Qn^up7B!u{ih~xA zl3ai}LbNpWujuERhMt_yGaSfZDgSXI>ZEKg0Y| z=&=Z!?%`9`{h5`;qvWBCBpZsqmC_*xE)AaGtY3?&9+e}r_`;|p1;y_X;(Fe1%dvLv z)S;2Q$lP&0TzK7k0v^PW1?3MD7}6CKb_b(m9o7ON6JLej{3sXh~8u zCuS05;0+bV!Lqj)!bt5feF6`@Jq{=rycB^6sL4O!HKbYAf|ywp{STd$DL7m;GArut zQ7z9^=ot9>oBD&wV9-Z$u3IuUDO>Yc&5sZOPh>athSW?qumy z5D!vlo*dgzj@vb&JqlKe{l}G!^jIfZf?IDX5qGn@BdVPAwd*4e(SW+B`2r=vc_3F2 zN>o4flj*6#VwgGJRFUSiD%)o9lBwme_QZf#_er6+?9%mnxJcBT;}l-r_f8FgAvpB`j#IRPAltZSmzt zJ!+&TMq76`h-v^02bRe0fKS>fl!=;s)`P;q0Gr5`c+HdN+^uVpoCSGeqgM$ca%iU1VFa_|Bz$OET3%VTJ;4ROOcAspF^d z*9ZkB`96zP;Z?GiM{dxqw2l0#BbXYLXg_(Qp(?}G@SMz!A=Qo}ts{!Rn+?TE>h~4R z8Ww`8kH@OnOX#?)bWYKjtSNQ3PtsVKYOqWX(V-B^e7^XtU!BQ?6!UjHcS9+Et3`o% z7!K$O-L5#N{3~QIeu~ZHiX;Bc4j*-M+b{x{LB!>MaJ;vttjsw3n^>l*FaGYg8xnan zkDCDQd&Zt(1ggb8>nkeVHkbBO-KlzE6?tUGKYTPaZ>cPDB9yGpU!C;#&x`^lOeZz0 z$u{0E?@=D%DCEtwDHW*hTlbfLTFqWDf!6w~R4x$#R`?$3GROwzxhtUg$1av4v{OfD zFXdIQ4K2>3a2r7JoS!TC?w0q|lSSjb#hPws^)NfwPH#lfaJ!!ko6-4zcijBkYj5(= z^xapl2il$lu`9{HKsaTss1pG+SKp7 z#YViu=;m0Y_J4aknMB!tzA zQFkoB`A(tYk^&AdI3;(o^wI0(Y>Y=4PuN#C_jkG^KpSE1-SQ28Qh0m@#+WkL-xR)4 zyBinkLNd|ClHGL1^Rb>OT<$5!A5TDRXh6;b{=6Afls5JvcLEb&l%fdp-HE#1XCnl= z-@_h{TZE0q>?eX%%r?xw9byvvS>M~u-`!Gpn zk*R}wS%JFm4_a2HQP!@p_ON+j9e2JPa0q>A2y0rTY4}Tj`m2e@X|poTZi1xx;xTVK zLHCrOufi3{FrQgu*uMn)g8XV>5zC}R_zm6-S2WOCH@f`M09rt$zhSj<9_cY!TX9pw zHHU;DJobA>sLZwOXqG~VZk%R!p7Nz3{T|6`2{EXK%O_Hvpmkf@JK$1rj9@+O?gkH6 z+V%G`ssT|()Un@Fe-LjqIy|>7*0`0v+npgMMJtYix96oMQpIjq`BH}g(RW!F&#>B2 z4BNth8VJ1Bx5a17!HIbX@iqvpGb_JTZ?5@(#a;7Y)Bl90(#m zQ#nSaq77~g2&jq!&6NfF(EmD=Z_W)%c!4G<_0Ws?v{+dIf8R9Aj8T0Er8qu1xOFr) zC|5>x582QcSk3eg{F-`UtMkU+9-BKep&Z#tQEDuDEsk=e`{=26`O2-O(IpN+Vg@@4 z;9b(>_DFAh-rseBd$jk5FMkg-&_)8~^BM70EWzzL+z(vPZ$)G6-)LWt1UAP$Ok%`q z-%)oTUu|vxAGmR*@>A!H_KKN%D;U+ zJku1ps4&3WjSVP;NM*iS(W`?X4imP~Jw+8jl5_RDDlJzcIyHmrjEu|oHVbT|H;r2+ zC^@A`=*e~-ULDOwcEDgs9k%&E2>I81$VsDroRzD1f6EZ#YA~iya!{jBFBEp!1cy}m z@%_ub++i%%z8_fzXX_Mnobw1((DgT|cLZssCq0WoH^reCs*^)i3I+maQZE2Q#g8D< zTMUl!rFp5ojjuPLHyDfa_cScoye~eOzUTWekwlAg<8Or#{S@BBhBtG!rl2*m!mgsI zQ8@j_e->av0jmyO51|$CNXA3uS_FW2yB6`!_{T8S=RrOB&CLv00@wlfdwwA_$|fIw*hHuAFYS(?tA8aOF8F0zBsd* z`qDG^;AayjCyPJOmp}=*vcx-9biQj5*`YIFf2iDm#%MuIH|2TJ!kyT-D1r3yh|z>f z!)ZdPP=Rk|o_HjtZe$|ZOI&{~SrkVWVSnnPN+s{VG5{hG9#>d4%bdb3D2$5Nzi4UD zAgK;EOy!v5$V-0Sa1T#j6VQpy|CgotXkVvi>6WDeZR4fp{KGlv37N;S;zT{@oo_y` ze|GS>R!HQdn(?JLqEKtQ>Z{?AXx26M=)x?!r9t{*W3PAk$LDgr7Iga_2R&NUv6mia z$bR`?b*(6Sg^qIu-&S2s%y4HzF<7kU#1X@cC{$vqpf+G#;zsACtJKRq5;f`e+ZkYkGCojZ1=*CgKr!Ob2WJRn`Xb`S}@d~ z5Hvx5$?{~T>zIZa^*Y%@=jTZcCR6yA3~^v{p-erVnaQTfw2M9S-1v@AW!LT-%!Ga! zG=uGV=B+Qo6;ufSGG zTmXZ^SGqWg?-;;8wB~>ZJ;i@Kw2Fr#5{OyG>MvHV;a+`VhtuI(mcLzae<;wVkBmPB zh+}uMMGZBsy4uyH(UjnIlL*i+7UrIWK29CxsVr=r&KxtDlpdU*_C96$mU2w1GOH|e zARbBAIO>k?%^lHhEF~^UZK*rZs%qsCMJB^aPxS3gtwb(n%HV+RWPAl?Yh%3dmJM6i zn)DM)?bN+CuwIYkC2|f9f1?Yw2VFK1o^&6de7#Rcjz1bALp;ScGOxxBW0hfCp2}8W zw=?w>uiEMMB#5FEGsr6TZM#W9z#5yTe}0;om(z{Y{!hjU^hxi#hw3-e+xFeInTN zFlIgSSsN(K^T)4!Vu4hNkj4d1h1x$_?odBII%E&GG$^@TQ;!}~;MiQ7vnFB;3K+!W zEyWk7-f2BSwJC{&?=Q(qT7!DxEd>U}=9Sfb=MJzV7BFWEwPJ6FImlKr7C%C+#}3rM2v`fixj~hJ z7DrCQi;VQPvV$Szqt_cc(w^KzB}6T?Q9uk3`#Z?M!lRsSp3} zOhC^jS~bABN^5l1OKl0N%#&4gA9r0963_Weo-qc3wb%O)-MyC|Kf>cJ)fDa zA2V$8$w^I$AS0zad;W-5i-pw$wkDdHD5O=f`RlRD`BwaaG7+)-( zq-y>9Kyd8eVBgQkqaM`w$iNELOCvcSg0ic3eT4QPe+3sX(~7Pt=)zgwzPgg9P97iXQ(~$hOH+dZ+xB<;uKOH56YNXlYorywl$Uy-1UH z?Q)h;R7mn~kc!ctT?xa_`mys^gepVu-;pZ-aQ&P~=$t^LNRm{3VL_9U01;?W6p>_b z*LC19e{U(Zy&bEA)vb?d%16xP7Ik{UR|4Gx3SVaR8Lss6ly+u8CaE+F7vjdrA0+Zo z8V+B7i47Jd4m$+5NlPUU%>MdL~NF1>80;_+o+_Q|lo_x}FlOGacGkm=#b64qM zxKGtJIFTgfO&3OHyKh8KL}UYQz;FveGWSs(e|PK3IQX^Ju$nZ~wBEIX1I=0jAgR(* z5KFJ!KsD8MMo9v(mG}LK!rO#=uzqQ!Qi+ab16k&OdASg4Kx+m$iAMqn2?DymxoFWS zViIoGQbMyz?0j|wqxLo7V%tnyu3iHMn$!z9dgb8H`S^T7z~qNnt=Y*K-y&n)(iApm zf2#@fEq%n2t+)fWBt(xPrhcX95Lc>~W_EKdq=>S>%NJ;sVCqtNfi(g@Hk49@P-jCx zQ<0^vTb)G+e6XnPj99+q*_VyM2@74`T}eWZ4*=;X_f@oz5*tB2e6!J zGHs!;rN~oJ`wX-#kj#-yZHt$%lben49hFubG;yN1EpRZuN|h*@>p`lj$kfd(dz#l* zCN7;+|Ex;Ib_Z^j^Wr;V&|XECgiEO@`yb?ZtdP=(PzqD+pnA4=R%lUS5ey##f6{4x z=Qr*3FqXG#B-SOuGGlJW++i+CkFxwz4FC zIM-7<2eH&&Xy+(~@!^!XNRT7zePnbVF~FnXsnPl`RsK3b3=G}~J*znB;Xe9wXxv66 zbq0wTP~Se>eb7@Gj}Udof4D}ncgk`8z!{rHvS~jP@`)tk;lA%>X%c*#D&KCA2gK8m zCxdwllMy~#$~zJO4F%t*pq-rr-=|6%t-5sQgeV)VNxCLBu(GB=?!&Is!rtG);P*X` z%eJBmn`?J7(t+xfv3t}4lK_F89wV0fLf5-3sD4>x_l`U)L;={^e;X$|pIe)qBV_^I z=@*twrU2X&kU@X4sClN$%rgOhF=8tiB;`*utsWH z{IW_G{B_dF5AP)0e@WSoP?5boR;IPR&;-Wm00auHAo+l|H30#*uuPD2rx8V4$%s;~ zY$h4`HQI{6@=`;l4;c9ULt&0gI~#J?6@3({r4ER7bm# z#oW*C&mH!75c+9kLN&hy=sgjGx3C7<4UZ~Fo0^Cm#A#;je?pI-)7fmHnWHgz|H@5s z*|JSkH&x=)YD{6%cAgx~8nY}g&l^t`Y1p8YhC#ux&0g7aTy+Kdcw_vLi=y*V`*Uj@ z`$PA7Is8?S33L2x>|Y1cQUo&iXrul1)Y$6C=LPv@o#~JjjC_1uJ`d?bR!(TVSdlge z8Rk@`(*?^uf4^H&pfR>A(Ezkc#Wf$ZIRMqjk8)^e=E9^)a7QL;XmoKZj(Q;2Aru& z1vMNa>Q`iHWfPg42bcGo(K#a|lij;ene@j&@J26OIJ)RDK@T;P=55JCJG5jR$9h^x z+I+FC=vc9-r9J6y{Rm_%U)ZCLYSFw}lM8<|?>MotyP7por~(tNS(L!}pI(af6l-Qa z)w+=Cf9YF?{Z5?*gK-9Sj(1R%vvrQe+w^>#Y|=IEvHhY^5OR}t7Tc%KRqWf+1M7y{ zOrGo69xK@k)SA9vP0hQD?1s&>6$HNabq=|rHY`plz5LIWNlxRGYy+YO6FJ;aQicp( zh1q8a^BMQ`_2MEUqBIlu#q`J+^VSdlsg*prfA~6uGqjoL&d4ctxM1|KY=1wZfyX;- z9o%iKvD3!y)#-Wz#p>C`H~GOTko(D)-6f zf9EWk*b3xqpb@o!$D8#gc`OMqI|xPYlpVV%8!h8f5Ug|d6L1wds$1QT<)&imDx7x;5nkTgJz-1 zLpDljgm~5}%yn6j!r@93{sP=gwA)khPTu4b;2a?UQVx7E*x7n9M3aWOYxcd8M6qx1 zvs3q0Y98&~Om3?9N@%~s3Z$U?45#h%3$VuIb=z7F%VKgT&*awy*?0NXBLHuKe=+$s z?58U{+2O5ls%-a6=T~6IaJ*$4#?;>6a}J)&i*8|Jnl&Gy@8Qxx!mRyfOELvva5d%7 z=6>;HwX?fMNtF|$QjR(OCxat;xo^9d@n;z~af5dZOTMI8sHJ#*xS|gfy=9EENgv(4 z7(!o<6&#A=857Y!&m=VW zbD&6@WK-GeZn*kTP8y!pSO>QmL6EdiJo#%yk$&Bl{jXqh=bs~;cX-U?_gMeB#~(4| zrWTO3s)1a%NN3 zKVP~q&uVQ}xLSlH6^fT8)mP)!sU%D~%+<-a*?FM9i)V$!*fi&drIEIv;PVJ!R?K>0 zSBNJ03_6C`ivUmwC%Yifl*G-LNK;$cd}UqU2NS|L5BYiOD(BP2W$Nsc*2>;zUjuz1 z#b=OYzZ+=Jncl$?x-qX*e}+o|yEqthmXPl|p7^QeC3K}g*g~sOnuQtiv@_eI$v-DaRu1dDTormjWh>0 zR~~$c&G#gc5$j&P@_S*F$|=J~0VG2|6uy*%r*@|0wAPdiKF_hWf4)$`K?hzLkVlq~ z$#J1uLF`+JG|1JX8`QGYi+YD=uSFj)ojzrzYNo{QbL0CN#4f;en@=ThEQI5H(3ls$ zx@$dD-LH&^EVIxuD5}`z+zyl%eqylNz3b`}N(g)0Jf~gN?qVoi!eR z+LV6uu9(Yp zj&ey6F$bt7K9Rj;0!ThQZ|nV4QH7nBCe|m4x!Q|7ANp_@f3xyv-?#Am0_ZrXGk=Z< z4o$nVauG#`=z|XOKXxboj5FLR2fJl*60qY(mE(9?VxU0eMOn=mFV|QNLhTmFJ-2HL z%*sEjz$R`e zc)2P>zqa6cvEr6;7+Y{veIk_fLUu@o8dGzm7pdi209D}Tt=^v9tcnQ_Ip-?zB0UC> z-BM$?%eRFAYI_)g%1~Gf;ISG?7B)D3P*rA7B0e~{Mb&(pz(@Q?DU9JK)GmKgIt zAbq!9RHIqAGz@S}Uci<*RLm@vpWPc_Wp0z#4&lcWRd1&965#yn5ofsqgN2GB*PX7~ z_VHa+DAx!upiXNY+o59hJ2e^YWZD`Cd5U;0|o3u={_J5Qqb&-P;2R z!nfgd`s;_&=IqTI-w;aO6iG8RNK47GA;XXMSU&~;OoDrfQNYW|e@+*58J{1Z<_&Re z{0|%$syZ#*?Xp-XWwqP954j6u2&^Cs!dCSle~n3?PrU>xg1JLjweSeV&L7R&Id!62 z3~OW@FRQA;UbfVGkg@+9YR#;-?;NBViPB0qDIB+~T$QX00J35x$nU7ISS?I6RjjZA zwcBM4s?cx;HtHT;Bn>QoMsSwm%Q=*?DY19cNcElH4qQYz?=Bel4kQ{o1)J2s4g<7> ze}`k0;sFsWVU}^;?xuAMG;p9Ui{VsJgn{50R4F76JeeV4zyDr=A<6c%=KUnc%)fNQ zc8!WvAYPkY`ALA|_3j}T1RGbdh+_M?eOlr0_K%)THbuZ5?SE|!Y^L^W5q)_IcNast zn25WmzKTu%JagVYw1}Qaa^`%lc%&m1f5)^uhM4LdVOiiB{SC0v+rp)6c{s+*Z<>%K zltZ-`m^)5r3MBZ?3bJF^5N%W-(fhzu&KhLkB``GS+7Vkoo!|cAbrf`vpqrnEz@gsK z+x#OxgKDNQmU|i; zGJpNJyUvhj!&T=0pEogBq`c2?Cin5=@!F^phzOC?bVYM1BOwwb->}=jRdn}f0EG#O zPKVm`mkWu3OLeig_eo6A{#O3#fAd%dd0VLL&8fj>cPml-~F;ya!jv;UHb^D2g6@7^EBv4}mfCr}KlLORll|jRH!0ClUV7jdu zP~d1tNdtW?NGP_@RAbpno!or+hv87>y!{7swr4N}9@_j6(qTCQ@KU|$k9FO@e>~3kv~P*QT#&aa;ED}7f`%4y9VbTGAdBnTloAO4SrUZ9 z{G|h7#qce`Nh=}&()KaGV^I7Sr(Nt;Mdj#~17(PLS+HWB1L)DhcV=)d)@%%vsTNl! zs;fAiWZkbqynyDa@t z#Ky&%h7Yo07BJ{c{X_Ibjh~NCq7~Q(}M}-lT*YaK+wD-`< z&z}4dsF5QBe}QWKndpwnFxZEM{TA(*Y%>Fkspue8*h#uYQer0b37^u-fo$fA8xvb^zj5r*AS@iHlYP;HWi5B@l0CIt7xi>^Vl2N)3^8Xo#uY za*CjWKi0lL;SG6S3GmXS!%OXQIcR&8d+V|O{v^$wNLScogi;uM=)3md2&POSJ7vHD zCJ-)_pl+D=m)E3MQMs9em`IKc1P5=RJr@UnCU1kp*{E$Me|hq_Ymp6hi>l5XW%=hl zhH?!bs0N25tW+mbO05&lO67%0Z&J`H6X9Ae>HNEL)cNaxF;v-XJTFg7S1l&xp(Sdl z3YySoU6gR`fA<|V@?~zWjxU6fQ`TnyBznHyiUdPwc1u>626MWJj!c7wD9sm*{agLK zM_CBPs?oW3f6Cf&#%UTb7?~%eo~%XLA*$LoJSf_G6{wCxms@(2Sb`N29df$&F#hbz zkmaQIm<)D0o=PU=GpC>Ym?M5-XubeWa#S@mGW<~7OEYbfd@Muiuq|qF z18*n|+ip(nf4%z}q9jH8*@U`ls)kay)8X9-?ajk+h^=si9)Iyn@Q5AGhCrq?FD?B`G9xOHNV~{ z?yHC|f8YetIl=Uz!stI=dowug#%>g#U)=Ku*GMa%;|XXaPJUS6@eUNTw&LAx3*UNx z5=}P~nG-?)-88iET$M<|D2PsLPF*LBId zJAg|K!PeWMY!}acXV+J4j#-lRQcTVdlq44uA9u@|%zTN}HA!GES}&pX5fxlQ=a9ar z!mg@5J@32=8Hkg9Bx{$9T03sv(MhM(T{I}JDqZ;rdk$!-D-8D9v+eH({_!z`MZGUu ze_*u%?BhrqBTuJvY}U_V>4TMXo_FJ$y0luBQ?k{)^pJC-*h6?iW9Nd?hZ&a0RcPmJ zG_76OY-qGfjo4v8#oRhgfi+XFE|(Z5s|f(R$>OfsP$lFXAe784H^o8C&3o>&m}(WU zt#VXO1SnvFskk%+xxt8XXbHL&M905!e?SN1@gY2W%WUm*>V2#7R|}%628_-Yh4t)J zg6b#ClNz14$=DHi1`U9!ulA+7Mm|P|hsn40gT$7DRpg#RX4*sKu_!v+FtZfSq5mtp zTMF9S;%tOMPW-UE5>#$77IMmf_Hh5d{X}ue|7~bAZUw?MNF7ahETF5Yhm53Nf8GgL zB^fAC2y(Qq<|WTD4(AbqTm@5e12j~BmP6D_X@PgdkP@6hndw=;hoGYXjgGhXB#E_o zit+e4uOgj7)2&YaRQWqb?7*r&P?^!%l*K;kU4ovb&09-KtGkVMEB5L+v#!Y*G3h`{ zj$mdrf>3Dkp~dj95bdbjoXx;yA;Z5^W1Q|6*LkfCc?xB2WOHLHZ+$ZR}d5hGB7tXIF-=`Cx5iMWmKDAn>|c{ zQi>M$65QS0-Cc@9a0u?M#oevAyGwC*Dems>{?gwwGtbQY=j*$&k~^30d!KzyR#rkn zAg@FtU<5J%ih`^iXc%beIRVl#iXba}YX(LdMWBhJrM?}2k(QpG8HR*J$PTFQUHrlb5k)0{n4+ADynhk}?MGuJM;jZE-G5*a zQc_kCqXq~I$SR8ffU490F%>1{zpu(b>ks@U)BsuKkNDp?ABlgnfA{_qqwER~(z#a(vA7f1Q?fZqtqngC9rPU>?E!lK z_&%OMBeH)11OkK{?d<-}konJ$-G7bwPw0Z6k2}+{bbt5McmCfirf=}vv;unS4SYg*vu067rp)8H8ZpR$0s8oDpKAf4t9<}Pxt>G_@5RG0~^4|%+TRO>L1$$=AZ5o z*2W+J$G_YkNd7bQA0i{BCcto|35qJf6Wqgw6v7f zw*r#?Kb-#WM13nWOV|II`oB`tfPc}F%Yy8z^ez8a%*>rdfeVhmk42*1^|D)FMUw=p1 zKO5*{k^j^Fd!7J*Ko_7P%;Fr#kSoAEsUfJ?OC)!)xJjUe_P*6#tR2QL|`OKl~%ZC*ar_FPk)FVita=F51RLPLB*(Fp0L z5}-0{A3|Bu7go;tjEX*h1+mG<=7Oy~kKoVr0H1{*!5SQ2#6<_0iR$$IO@Bzke}FQE z5o0jkTIQIrc$sc4OsTmJ+zG>BV;|*MQf{a(IG1DyJ+8dXU>!(-r_=b`|Eoj~%Q`f9 zMl>B7GPOJ@!Wos=hEVyhS>gd%TZ0q z*2~~eZj|+DLi(%#+UeQrP=6>a6(c@{G}T#X{Mta$-mmygq=Ltk-54=^`B>jk{Upee zex*{2Yple6acedw9?+Q1rU}30G?~dNV}r|0n2&c#p4jsHT|)XJ+;|4-E2osX1<_2J zS{nH4an)0=gOy+t_R!BwIUV#Fqspl_oge#Y33n2c+u%G3nvC{d zA~KOHS&Dp!nG4Dm1RfeH|r6{&b2VI54Wx;wK^_ z>4)@orhG4dpneoBuTh`cgvPgKPf$UR1o2K--BWqQ98~jZZc`8w()Y?Yxw)?$Zu9WZrG@E*NfkuOu?B0LQABaiQ76n|?jE@te$UdG}$nk3L9 zZ{}=TZNjLL@LkfCujC8KC!&HPtAhBE%M1Pnqz0^3PwsXa^$BF6k=tMMslFcHp2>o| zL}y!Ycx#L|Qv05kCm-Mwh}?8pm5~evz8oXG%rE~sG%4(cIoM+F$Za)h? z49rNmfgE<{wtoV{)~oiKuK6|8p1c^1bjPVr%{l6&!i3v;h|{O(I~wAWYI8YWlrQ(P z=ESAfD;{S40BSupLWkM-LunA1Zpo}KK*Ki5)P%ngo}mi!iTV0j2!LM!Vcpin2&O*1 zRLwa_xPw;nU}i$eYA)2%Mp zte3PX*?$PSV|i38tz~$F*%w(c4&GWjB}#@VKul$FuD+yCz>fht9}c0jb?K1@M-uOO ztZ6oKKJ&e7D%{%x?jQYR)&@^NPlAieJERbH1F2(_D`354{NZj<}@?Z zh?4!|l9hYxtl1|@J3{?GcDxxHD}+jqX2lsLwJVy-yqs6pB?OWA13#z4T0HAjbl1XD z8uF{~zOUY`l0Hhn1)x`2MiC{mV zAgUjvCjpze7L54GgKkPuLlplY@SV!f8Gjl4yljR&qq|=BUb<2|Utf1|+w&&e9n}+C z71u=-zufRX9M5~b;MgQoyi#k8}swHeIf>V}rZ+-YyJ9DZNIO;D3FT6cPZV3K(3KldC9SxA*EOL0oDdfcB4Iz@0A` zi0aMfgYQC^`Z?oLka@kp-(XECny%c1zH-OPu+_7f-UK66lIV2S+`>=VOhP$d?=UEU zGKoIB9&0JA^5#9VNjxIf9r39c$1*{H&d-kX2l~?y43T=$u4h)k14dhS6MrwwnUi2i zV70z(dJ8T$LlPl(rdI7>F0!#jM_9*i;+Z(-!UOZ(5L0!g-LLc3umtt9If{-RQZ8|; z$u=*V-$c!ylnthxFta?%_F!p$(HbA)d?RSh>t3(L!zlPfd=^nKvJ{VHL<%wnyA7SRBh7M-1R1kH2i4v_f{b{OT0~RS>5r7 zwe%UE$ixW#@Qhu#z1HuF!*7hsOrP6SG)J(l`W0PR0-}C{rWd~^x%d@lA0Rw0H?(VIy!kB@dZ=uHW4 zB(=(FXolS%QcgV!N~`9p+sesdW{PK$EPjzSl6}I&{mFCpH9F5TCve_mPa#oODEX&g z6AlNYIrGZ$Bq>1|pzNtZOF58&C65n{B(Jraw(ul7KffZ;l|_2VV&&zxZJgZaq<#g$ z->Q60IC=K8iBl&2V}ERLThJxlnh1>72<2CwVQmXjXH64+^A@wOkv0TKar=+*OEh(d z2c;Yc&!TP;y|(_z+BPqWc-)QoG8lb!hw%OjD01Fq5Kn%)##_2S9b zE#pGQ95_NG$%k>|mhd*3J~rc&IC4>HmcA~r#O%yVM*`VeO5GvQ&)234`c3mo*l-iQ z=tmxN50sNaX;&@|jNYRpY@DCcr3IvTs-JC#M|9C935&!iWzIuurv}^~PxgwDx*IX* z?Zjnq+J8$9n1Au#$-YZI*M?;kp(1~$(tdGf+~50|CwCg_k-<^-owX~2!D^tPsAJerD9Mg{gLotr+ZSyDe$5YQ zlymEpz^TBAHZhdnRH*q$Y&fWOB@<8~G4tjwc2U>Y&Pw5xk-w~;?n4zwIF{r{t~J`V zV2mpVg?}W_P^`q<&J=7)Jigi$$~DR?WXk)zgCfV7Y-Q6wN!x<|r-QbCWyD?At*r$u z8dwN2nx8$EsMTt5_5GXRO0FId@AE2~6 zHqB^qwA8;3>@bt*CDsKoq2>MzK2_&fcva8r779i8oN-OD6P4cAEOkndB18+c;R8I| zY`c;6_grm$GUJX1>FGF`&oKRGavdNiE4CH6%hca7S!j#dazVcHz-i*TnLAhv0C zTo`}%Q)&O{#xQfz+=K2JqD!bQrqdYp=YI!SAk=}k4TO8XF_Q6hNQj{r^;z1^G?OcJ zBs;n-^l&lkG??-teKfnS2LqR!ktyW@=3UlzRZ^))hWkL+X8l8^qidUiJl&sXw=#76 zJJ7R~ZT{caqIB_AbFm|JaMRIkn(|HWqGLJ`+fwJSDm@s)3aDtb5?sFGD;)&O$A3#^ zf74Ky`aGxbU4Xyz(9kF;@Gfb3T^C%SQ%g7_VxQpi6vd#v@ff-nqeq0o?yK|O;^KY!+Lg>KsPV@~k?7G@KpwpdUICQM4yaW~m8>w8A9 z_qY4O&J*mtNGwXy<6qX7Y6;;uou8HYQ)fZ@Na=y<_u(2KZk3b;L$$SKOUduVo-$Cy2@rJTp?#zy*gYt`U?Cv%qWhKEN{ zIXcRZy-E4z-Aqe3X=6KY!GFBmY%Z@5*JXr!Ik&PwHBc8g`Yqg$;P|p12C4r2C5S(o zXbB>Ido-H`e3A>9nha9;>3iDijhA7~6OV{1l;}h4qqx(?@d|)(WnKw7K^nnK640>e zO4`EctAS?{ti%VIOuRUYiJ;7UQ17r;xVb74Dt-^9j_>Qb(}+nuY=8PttE*PxJY;v` zZ7H{`&*ye9r1YFCAdQ~zB;=77#563OwXS6T`#q1M2~b3NmTEu0a_#KA?FRc4+j59jy>#pIK1Hx`YbP@)Y^)>N z9)2_dNXKs@UNPIS9OBj|$qubnq7if{VO@grTq?N<>CqtyjkZNt{8HSD?@uAYg{pgPR&ocreU;eWxUi!j}kF%KgY&3mnY z6C9?&Sslc8n43`5(is6(v5eUG&u=Dg#IINP#9cCTf;~fST{_}M_k~HRzqC0N{nZ!6 zP^z_ja-3va=Lnrcga~|*#{wDH>Y<+QOJyQ_T=hBVYN+Lcd@v(}JF_Qwi5lr>YJW(A#G;(F%qY(R*FU(y(4kW;WlWC1vS$2ZEVe5H<$1nSg4iS&^ zwEHW%xQh0@X*=m&vaJ=GU=%WltG9AooU!73Vf{#Gz<;uxE)qhf|IveL%(oe3|P93xwUXqE~ z8TWghtX(T#Dt$uQm;(QEPW`?7DYlU3oj7baehLJZPI&`rk3qhLnV!#6mL+)xH^EiQ zwvnyFCw{&3KGr|t2wbXQ;`r}pWv1~L+~FHSH}lNQ-bgDs@^oz-jOcjEc?QKT2FC#_ z%JG;}(SOx_zNBz&iV!1OU~`IJXy4(;B2)ex;Pe+E6p`5}p}Q_iqo z-OOE`vy6!Zx%0#F53Y5JYddj4p77+oFZh#TzI-esR%lB~i!VmZ+k7Jp*y{`~1S>8ecot2v{G*Rtj1W{sUI z?Pe9+2HUQbb-SdUg788-cA^7=9RQDq0fKTcyVZGB{JW3W1IbMQ2I7`SDZ3hE^oGX( zO}|Ma@Q3C#NGp^tEzh;jKQGpqv)6WE2*YS!;k{ z;ZG5{wNUqY#jphv1c-#h4(klD*VM?%tA7jakn-1N%kMM@Cmq31*t>fq8fsFvZ1Tc~ zs}lVgfDz)yt4DxHp)on+f7D1RiA zR|`w*Y&fEvT4e?hwDBcgW-*Gxp-CB&{NDVBU<$*Bv9j7OENs*D9_L$}E#m{Kw^K*j zzwY6TaY#zl4<+Q}xuomCrR=-t3j;X>l^_c^h@Tn(5E>#4#48uLr$*qAa3l4JqmzZm z+st2tEsvTF2GsOyhJP5S%oYFWU+`~c- zR(uZ3ELkePsAXkw8pD$*MUevF;Rpu%2gPPG?T%fkE!~$D~uKGuH!JT2IF>K_=>6dg|aaK(ba3Hg)nJ zA^Z<%THb8icbM#v&tKW;=94G{Euv{nkqInjYthV}TQBi@To4Rlh|lW*1$VIW3Jy78 z3-jH=#=8RW(;@3FJuK7h(SP-QzH=MA);%HQ9Ub-u+S%us&CFt1kXYvm<9VyX3C_nW zU;=amAy@C#JqQEa$6RC$XvQRPYvNY(B+7M4^tESK711qq;f9ln#6!!4sR1i$-N#Fj zf|LpJIma|gEnK$-q+eoBFxA>R<(mYYrMh7%+A3fNj@S2hZ5x~Gg`fOq#Wkg>Ry3%<=%4Y5yp z5A-DpT7qXwwn}DI*MHB|u_;xDrzlV@p`-YeYbGqw_MUqPIje8jm{o^o&g0fq;w}4&JeiP-}`VbA_*g~*0SH>hJNYkaJFvqihom?GqDy5PzD0dnM~T- z{xFJ8!E(n@)DV=_vDE>OrC$`f?>01&RQ7%CW8Ul29rJi8LMo1)6OMnFQ3 zJWAxrWPiBHwIOz65T*^o+g4wk9A|)x@p{R-n3e=A+U^L>f*VjB)9T1$oW>TLAgU*U zx3Cr@Dq?blAfBBj?n0Es(p&v=Y=3V0&yLZHwcl3f!ustB`wpou&VjiqtVD|)?i`Pc zqVCOk1G3T}n~%18nUCmt&*h*FllD8et8=!@jeihc?Ewb9{3_GD58zNu`AgdV)*nI? zf+)(7np;-fp!Ttfvw_bSo!j7eeD$+G=?J}b-pXhFh8S-%R8D1_B`{2o?^uU^WQA5d zOs6MFYho^iN7BGspEY|Vd>x{Y2CZ7jEjvELY#*VDPMB~%bi`B>^DkVLe_r_ktgSTg zzki|i6bw>&yFt=^6bZALF3P;wY|u_3lCxjyo6KQS&%bP`i+T1n4f~a)@Xcs*wY5Oh z*J^6-=q@D_Wr1~|s?YYD%S+)`_nX7tPAL(R+MhXG}3$&-NcHWCsz1M zr5{MW2UR-yFM8MtrG=01wP&dJFgfMW=q`6~;}>Ip20pE7dTERZ2Gg1s2ECkT{A)KUNH8o7OGmhYu)tdS}Vw3>9GeN@-5@U=CW*xW;r*tZ1L zf}XBh7FxU>6$_Su^_$UsgA}q7H_d71p(uwwHE>(9i`HKIl$^6=Kq-oL-3_1X+OQe$ zppBy19XgNp9^*YYOaUu9bK;&mS$~`N03xWeiQSttPUi38*<~bOdEPfad8PCeRwqqD zE}HC6C~E>+GYYG4vc)ztOcm8#iNhSQoWKALm%l_VpiPNV>_)E{jef4y&Q@CZ1@6?D zE-0g|G=pX{i8}1a5f`Dh{4l7)9uub3*K9vOhX%lh@VQ*$DY-?UOQ>JYo2CR>J6HI-qjcSeg6T?qJqxzi9&r zEM96htx;3-_np0LKly6F=tf6yO1WHTyO58>s=94lY-d8;@W?U?kdZw=P8*+fOMYd- zF+Vcl-r+t($MAjZ=6{SWaZ6(7lfJuZx_vWgKtPhPw4YOShr6{%-GhlFD97efN<#R` zCVwf+BsLxD%gRJpyoNX%>^Kf!+jTC|mWSM7>s_q?cR+~08kwf9TJD)nD!n<@(Gz_) z!9}h0fdm)30dkyk+ZT=}mw7-k746ag?3iqhh|i9}jL7=Li`#Af;GKWdW2G-0Z8>g7 zvnk0MF61)mn7rOqBD~3LrTV7ZlRC?liqY)RN*BZ`LOd8@Z4@(qT*!H7$HCKWI9+#9 zt?JrQ96L-CB2pVF_0YJR!Xj;MQJa{&)N1t7vrayQd3MHg0N+p1?XBSOr&XU4E%1rB?+e_rV!LB z49$78^h#zHNrWCqNZ2*_Ue{1N0-l>!01my!2aBSh7US6a75T!9G$hM4rg4riK(OVxD!qea_IG!v|{h-Zt z{+z}rt9nZ2u+_d2<^b|r?{iO{ZaY_=KUv(pRZ%xFL&N&5E+?%6BBjD02BAT|Q%Pd{~Vw><-CvQ$vWQQqEgq z1J@NX>P{qHvRRI1<@8y#37JEsls>&V?Wr-^5xyRE|Huj51a~^>nY4QgvD4ErP2z3Q zuCRr3i%d~bgUvWtpm>DIj@v}!qqxc+@B zY4!z`QKix>RZ}u5S*g*-9Uw_B^`;>!E4>E?;!$d^i)MCCt?7a4e&_17p9aeu}EqKHM9(H{v zn5|G;j*x$_V`62p@nOJ7WL`Y|isHJ<3KfrjTiP4Pf(1fY zW!@hlD$M#qJN^m*!NIlcAq7{S*onr8X%btHs^dDKMQkJ~o?hA(uL1rOJq`W9V z&x<~YpSNil7g=SKdcA(~?bo8CfOiP2yZMcFnclYh$f!}!TQoci8xz!lYUtz9&yK3m z%C&ItJA7UL?MhuooOXN5*3ZC;WSb%Y-t?mUhOffdx|ohRj06YwNb^u8puT1JRf!%N z;M#vI`#Ay^2f^k#GIOeuUfd7seD*p1pcDBEHyne&ObSU-dt%rRBD^*Y#xTU#%~229 z9a7%hA~iha)57`fw3m@!WIBPldrId;u%T$Zv(M|-2RW0V^U$B)T=9ZXN~oIs{j_le zqo9&aXoCTT?%y3s?=?$Rk~_a%aBPo_S|ESM`_``oEynB-m*Vk(tol1)@_I3EbZKHI zj*Q%Z&_$;yrC0iAiQ4mq$WF89iiIvj!$rO8*L7sC=BTC8_JfoWq~<%(j^@X!qMTS| zwM~3xNvfAvo?*xc;zRz+3O6rA+h`_YAZ(rRZ@C4$ukDg(ukdhK;w`EUV9C}<#D;&V zg({M7JOaZDRRZ%3QH7ZrW+>sIjxZrKOXu?BGSo-wLrINMX*m_a&pO;To|gD^IE7+u zi~i1QeqC3{;4rsdvJbmLK8F))OwT3-h1LOXY?Gr#22zGYx-=kY%{H zE+sGv*JOB9L8`(-1>W-p+r2I|*$01`Z=wXK3;hwWG z;Sv(p-(<}&Z`Z#o_uwrig?8IZJ+M(je|m&CxqI&=DOj&{?J5^tQtu~s4xl{ zvy7^~eA6c9Oh#o}`spg9tCmG_cQ;tI_>9An*~F_zBF=p0#9DsY`OlnT(ruvNidW89B*?O zRvV3r+9nz6#FyWq;fWz|n)>R5s+0t|!M^v8`s698mGIs&POj2yg)(_;+(vP{^w&BF z+mM{9N#U;}0ix?+^PYFY!Z#*8pwyn@5nwk3PR1g-z8_jqd`*0I@7{k%(?UO1B@_`B za!#!qQMU3ji(uGd^u=?%{Kh8`u1 zdRTnJ4LbXF_zN{*M+D?d9Ou}mb56J)NbcU2qPm!o%OWczL1~{ zMA^a*<;!8lIA*jdACG@;;t!DC_}=5`A!$@QabDA9S%u(VUF0^1la3`^5Tu;H+$iV4 zbZ1a}sXO^{N)AY9h8H;^G=QTkoL9v2l;Z2`Dy`Jd=;PC*gbQiCELHDWK1}8NBPs~k zvsx^Dl4X`EVHw#_H0)(JpOFT;L(Wa~EKaU050q2heU({)IkkVY5>%KOx69aMHWb*t zQt(wXtDz5|{^mCocaPe;#O2!~x_`V{vFGNHf*Dv$7F%nF}9r}ET zS-D#f{ziUBpSW03{3{*|5scYE-W%yk=MLj-Sxx*;)U|)vUj{LIlJ5}EDvW-FUFXQS z5HlglE7tJ}7A>~4;qolGE4N#P`nq7hQDp|xET$P_c8`g5`XhLz1Im5Q)QW&_U3pV# zNq!AGDl0u{MdlJRMj0NV&kI!^44jZ)q~cO)b;C2}y082$q~_*GObck(VDJf>yvOBo z1gdmp=Z$}088u%&Z+VJc7)TGM4iX!e-)`lZO!}EP7b<_Tl;(jkt)*!>mD2hm=A$(c z7feAQZTfybJd|`o4x%py7rBWnM7A(ZF>3M}B|6~4VnIiKhW&1{V6?p9i_Aa5=%)Qg zvLRjq0O{Fy?%GCUTM4VzEJokH^Kyil3=hu`BF%p-(~;2!H7e^-qE6^1ww%)_fEi}b zL@CytzbWWF@%yZ#-y8KFM+COdAUomka!l+9uT^gYPkQx*Hf_fyMOB@TEAt#)atZny zZ@O~u4+7D{2Z_g>GDuErv3#=+N`y_l!f^m)EPVLTiE$i)3e!8MJ^6)+ z67rF;py%o{Av`}FcjdsUy+u`Ta3ZliL{df5szt7(khd*%0V~n>3gFD}v5(jv%s|vN zp~a)n{xD`XJ7^h^W+^{rV!oCtQi>OBFm`{9Yd>V8CC%auZa`v(K$R_NTc#Hp)e^4E zHNM3HCsVgAkZC@i6dg!xgpf zd)$S=?Pb3Jno~7gLV*4hI>9`VmOo$2$8HfVXjDw;@LE%oIcE8Qt(FV{(5t zYUtFjLv*-c*`WK&bK(Bv#yUsz(XoB=cxiI}ZjBU5djD8O$sRM5VwXmRVtaQjG zmh&pv<;*ORb+M~o=i(4}&uk46Ep&f8WysaLxip7>tHH)vQV{k$&3Wo6S~|3;qi$ic zURQTte+>@!m~TSO`oNhP0!u0+OyY0UTnBQ*q`IIDx!s7y6vIwhKT2>bwcU-pXUz!c zW<#Vwk(0tE<~=KQ$?I1WrqL1mv9eWU5Ft)+IbwmjG!liT{Tr)9u|IU122_975{s$X z!_PvSp%zP%`0X;NS%|Y>%NRw)Bgbu}q^N{6mnIZ-5Wq3qpsXoCbgxhU3#+x=>nQP= zH}4})z4P=INj(W{M88c=x>g<9ScTbp0K@!RIk;rpNln^P%`P_=)B==OYL&1 ziy>tE&z^L&;!z?XoM7q&@wtCaw+1ESA>2K}P2m<44@t@MsxZDSM@5^4u8v=c7Gwf{(*W%y+0ykZvaw;uwJ zbjUhf$M8rHDI<~PCop(p;;=8^FCtgf#BdY>O!o$E=bh}NIe7!ntFM3Rg1?wEY`-5p z0R;D|Yzp#sD`F(z7+uuWm7@ekBD+|A4gh$gk*1LZ-pocINx*@nvluOTsCJDWXqQ%*#M+5(lpJXBv_y3RoR4wn4 zzgp&CW{*I;G>g0tvzd!rt-%p6re?;!JWU)Y;3%!RgU2Yh#6+sj?6tYc)QYwu1Tax=V*Hr58HJC%6S1Nmip+3TV*Ww>ect&Q&PWVp?V?|vx3 zJ`9?Qp|`zO)m+h(qdtkU7aK_jhBVyI??$BS-*-N2@#pi;72PR%&b6XgV(?Qo*W@qKk1^nrL^BbM zXh>McdMpZWV*ViTBiG}U+7Xd1AbFQ`ylqTz78HAd=g;XGQ`=7zCj~3fu`l3K2r6|> z&g)0^HF|$U-|i3{4^*Y25q|hIu@Ltdh>(h*$8$tB$cZ>M&>lvD{`@J9jNd{eT~NP7h5;*8FU{=cd>b%M;^z$Z@cX=)Qv# zIZEA&Xoh|0@RLPhyghOX%A-8~2qM^p7h-?k{Kny)dyH9t<;fArH;LLC6pmG6i9?J)_=9QXQPI#-7c#=o;Hm6LxcxL%)A) zjY2$4o%vE?Tixcf`Qi~hfiP0h3E|!hRG}pYev(EhnL1^=m~sUNMKV{xMzQnHtXO8! zmCBwjukY0wdRBx&2XwsiYDjQb5ZrST54VWzFI2 z_608(IZ8RpG>>&JuT|nOwZm;07p;F(&kOhKb$&rFZg&WB+==!9S;7|V<31h<4D7bD z-_**Fg93+ywN0#iK1xMB`ztt5Mw-C6Rskra2pB1EfO1+>*4X;??KS{GYf*pj%dQy z1^6+THU(`7Mb_;(~C;7S5>m=Kf2~ev1n?Kp*R#hgt6Vs4PP_!H{CVJ`L zJbch=Ppa=iH-D;3)8*8QMfkk5O0ZiubJv@rw({&|kFqp~mQCgaOEi$A?CVM!vyQvb zu@U_go91&??32c^3Sk`43-keIQ!C+sBLV|@e9v%t3APZay!maeO`3-Dw z63)FgSZl|c2U(p=M8AJ#_@{i6J!kS}tRk4gjjQMlnX7f&8XNVBTpPu!%wJOmpEZ9zvx9iQ9-|qE29Q|0 zCW!e`k!wK}`aua2YsNGsY+!OIFB))gNyToPMw%mZ?&+>Ne%(7N`u(}|`6u?2U*hU2 zin%uzEQ1MBVhG+N2AIn0l9Wx2H0}U1h1uYzyhYEV4Momm=jjxrZ?Ci2l65797oGEL zXyjO6;>C@qe4l@rVKOwJ{AZ&y<>SC<%DPbY9_e59f)%95Ou4fap>EH;%BM_=HcWlbhdsUzvvH0nPS4puxVD?Bm; zBT}Z=xyF~B?Co$)_hH-YF;fPjXRSRz!F%S$2*4b}R8D_nWssCQ{Lv8Y{qr>|SLO7& zOe}b5Ioiq{(t>;GjwJYymFulOM7`SB4xOh>HPh0RqJk~Y((i& z91FHlv%`OeuYvEFGFzL$_UbXPlab}Ene9?owI!>&d`@J2$Heo`*j?m$GTkKna(r0V zhNRPzf24;8PlMEqk@Ji@VNxNr?P}kx2*$A7rQIFlBQ_js2^u*QaQtVgeH3x?=~fz; z8N$mtQltdL7%oag!`EYnvwnC5;I(Nwj_Zq9!sUPZTqyVOs)pD@_aVH8DKaXQWRI_% z)%R6mDpE5dg{sT^4pxvqPPL8)yxziiZuq&Z>uGj~sR$Z{$~*(-%Vpu9^J`T)t}Q?o zQBpzO4Aq~&rdkSWvaqO+N>WtEC%o!3@o^B574?_kE0K%(Jzjd19a$n^w%DmGIQ}4Z z@2h{&iiWkNw+LDm7Gz?^lC9k&^Ig@v*JwuP&*`i?QD=yp(lwAvo$!iRC$G*dDAe$& zphe(jc$(3Oef3Zsow;XG&p@l(c8vb*dWetD#v0p{;n)fASec{J6y}|j*EM?&6iEd} z-juMYJut2f1{rWWCh0)STuA#SOjz3u#%6ygg3slOyZliWT;;`TR=Gfv$pablUslCI z8ZW+sSz7{(q7t2RY_NpiHg@r6+v`86xdjE95Tjqi=CRA`9L>yhgl<`iKe`93-pZYy zrzyjvG(ej!%#1g7cO0*MZHo`={_UyT#lnmpv7E>6uaK?|vKT=Jm37x2HD7-1v5bEq zWJ%S-La-DZK-E5|?xfi!it*M2=!uS%F3!s4p{$7ubQRZj1`@GOFN|+nrqWEHmsT|+ zq@Asg*)i0Yy@5Rf%bPMWkeIhS_LNyLe<{ks)Bee1m_vGu%QG?4UpX#rw-+y(qvrAx z#VM=#!&hxJFO_=ws=AJ!=$w4l=na2_!1a{-$&M!ATxaptJtIrMW^+jmoGX2_jT<{f zU>n=9YPpVr?eX>>e4pB(d0lzZ4{Nj0Nfg(yVrkk&h7^*}@4ygTTW2Pg5gJJxS#1Xd zpwCbgwTQ>sOBZk8nzrx~$T%tR(`bG=hkh+t*~0qsovu>W!Z41R6MGeD+=zb@dyuZz z!0FGv`QlFB%4o23b_{u=Sl)bnXNXB{fXiztDkq-JH>K}AK_N??w~N**c8$$-ZC!MN zU#k+^n!U_?NZtAHTG1{c{(DJQ87LqyL*&UCi-ub$fYb8 z5Lt8&4TNR@MmZpcg%hk9Eqi}rTR~&lv#nfMfGh3&WbYQU;GfSC_+(Dz=QD!zvQ+Xi zZsvc^jw=V-S*k1^Y7w8AsJk{guOhkorRw5%I8TPMPRx3$gus$m08=9EEQ5~zF&dKZ zwn~Nde}p4@`F%Kv&P!P}G$e2yoOD()3q|}t@dq-nmLPne{bADv<~o0xV&0Eb%=m9$V@EyEciWedy+-vA22I=p=rH;fDyB0%a__XbO1*xsxRi}=Hfz@aQ& zaYJ=df_N&KffJRt9s{!bBms(ISx@C5e%6NH6-uuz!X>@koh%Rd4Ak%IxYF6zx>xdo zQ-RsX95mfM&d@#(bgh5P{O=kU3uF|P`ojHsAs#QK>c@%rZZXlG*KBXgUEx#{V9eOjMVrLih2jk?aOde+fYi;meMdy^O=9jG0_}zbmj9rEo3JOa%axH8z zGN7X-WDa6dqn6o5l!p4-jES7x?e&jma;Nh&wqIHVI6zf=n_QW39bbaUHJ!IY5mg)) zbnZq;Q74~?XJhU?3wZCZl)ljSl+tda<~pHN0r^Hn5oGy$Wt>(aIyd^+l)8r8wxs0> z3o^UxNW4G#+eUxJWe~sSuMq#iUq!8$(aNrgA^7TQiR-l}23nLZ`1PZyCl_gj(?qA! z&eY}476w0rT|-ym809xbiGyi=A8i-mi2I#Xq?#+F0@=pU=vq&RRhD&pfyWQF5wp0&#V0mU6Mqy$y|S^ay*1zQ!w<0zdb)6fWJXe zu3bC-AAhtzVxasa*TRxo-*GK^yIS>IJykh`gJI^zSZ1Q6_ANKo9Ypm?n1fP~8`F@`2Mi-wuj+?%$(%eqwFgCR&95e@12eC`XGO)M&i@r`Z3u{{+CQ<@Q!B&6V3rK8r4%clwuQmsBb>nSo|>d1}Kj) zR-YtQ;g*F^^l0szXHa1!a|l(J$}XEHwjKDnwZ|V8>DaFGkM``fw|Z}DJV#a_-I<*x zss)?Xx(e~=vIbOoT_aV;^@K~X)K3ftY_c(I{ycw8RX6>aylZ`>wsjJnI87R_sKdYB zJ_Y^>8&$+$_nX1z$Z_z0A^5vGCvame;PkDaLi*@y{!L=fhB znc@Pvg*E5=^YS$=h4t0+)JF7Ys;Eqgx|h8$){JE^f514ewsy~O0#_ZHgsoV&PB=zl zOE`b3Y|LpIm=3=UWj36+zDLE>m6U3L?YVDWJ{p*sU&Fv4FAH(@5pnybKOuJnO%n%6 zNsrLLj6KqmndWPQ`iwGKNB9c#a4CTvyext(4q_Bf3TqAKx((i)^W>v`=D z#S29W2@CYisFWajagEul7X*0Ul)$e?Q}TaC-OOq{B}jQ8O>W%gfXMW!T12;=kb1Z1 zOme}EGVP2nlh{(FzqiV4-sCT?W@@7~vJBx!-b$D>ilLcr^84A@bHFv9dD=?96g~d( zt`+%#yBBAE<<6cJi%W1XJnqeDQU;X)mXhCEcS*OHNwql=Won6q)tW5|-lFXA?&W`X z*f(x4%BVFKisIq8lOB`L^t~-vv)E)wu^!J8G4OdhdzY`FY#Hq?w~`uLIM+tIfqa!8 zQ!Q;%ZtK2M`+77Kfc0ydJEEslwgLxoo}i#lAS10$!BHe+n;*$_uK`Msxe{IkQO)CY zYJ`C9Dw&(_2_agf6r2~*t5gU`plN?$KPPjBG$dKYoekUZNDLcpus*F84L&YcLfMY# zb#9P-55GAKiP>UvkqIe&vKkWvt z(&NMVDY8%#>R$wR5$7u=mCt_;T+elAAl?UbD}>ufkDLe3&99ZS?mxbIblg?$chLRZ z;Q9T6suPS$gGH1XsEfJY9)_v-fm8-zun6G2vNZ@+b z2+;{DTZkm1(_GhAtyh13oXTkrs6Tq1vN0JnjVywuKxVho9wh7JL79}A@jeCWF3TrQ z%s$H1q57#5c%}ROasrMfA0&h6~+fi-2`& zO42O84X8h@MBtX1v#Ho5&Q}WsYC%z));#FrigX}&?_Kn~@5od)tv*kpD2!-rJ)!jr zj!f7ZN5SQznR>^Ia{}3++rJZDQWt1SGDwnXUcX=YHb9h4tj^?~72Nz&dUsBb18$?e zAG2FV8(V*G;lb`&WV7vV#fD)#7mQ|wSb|Dtm9}U>QpWwo)#XvSiLO{YQw7)1849WV z^ya`60zja%|A#P^D;ei%cXsx425!xgNyq%|A0iF!j3=*^h>@|NP1)1-i)3{ma!HqRZP#Jvxl`b9xKvAo0Dk6Jw$Odc_zP@vSq#bTW4 zV2iise^LR+phg%SCog>v49_r!d&3nVsC%=8k1}SLmRrQ0f!|zjc;qPf1{ZYcnPDeB zx#WM&sMf6>3Ds(uN8FSK-gFRWC6K*)tpyN_t_JOmEyn=McY+Z*93*Mowp86ag7k&R zhw@Km!$*I8F6ME+0C_|pQlh=`uFBQN2%V=`Dp)_~Rz(^D%6kj~Q_4d|=*gV$>!cI>Ub* zcf@ltjV#s=ZpV>uU?CtZ-8jfZF^9W5P4Ec-))}yrH=FA7c|AhI$sp{#e3z5SrV(P% zw#R3rT!6hto$g}u#p-pRFF8@Iq;NT}s#FNB2d1?xFg^gvidd+7=W=f!JKafZKW)(!ydX;}Q{n%Hn zB1$c{CkKJrsx*&gAs$@jf_e_jF}S_dnK8yiIbh|1$(pj5Xy|OHrjuZXksp@j8kGgqc5*Qe3cEtqSN8Bz5bFC6vTd|0~~# z=#>#eYis!J+?U4Nt61N!emH-I#SRi(I5^$Nt!oK-|04d&C=93Cf%ilQlwlYIHoTH= z2-csD#v@0u;nmnP4VKN1XnqOOe^-p`e2=S#msivReT=Cyc1oQuSfx@ur5!04jiAk2|}hy%}VhX}zI@ z?0d0k%lh5KyBif!s2{()+a$+&g>*V~l;+(!*}QYu?pvdR&c*l9=w@fCQrHf(>mxDy zV;gbyonsILY#&pI_C9|E4fnL)G$TC+6QszHQDywoD6mzeOyy1tKp$j zv229XdTe!4jWChPozm2Y&@=9ub+_%FLqnTtf^>FH2X5|xC||og&4$~>B^@m|NHc@p zf{N7+w*%>)3^Q|oWadz^`^}pepHq;N8h^QLb#{rR6Q8l8*O-4eVv`s$3o0J%BTOrn z>60`(DcR(yq)eLxP)Bb`8KVIhR%)A_Ky5qXcb4TF=9E|x*b?QyqG!HOaDL8{v*GBz zWs)Nmba$smfU0H}aS%`uFCduM)7+~rvB-!-MWnVmWS79Qc0x~3%NT3CvuU}6r@QES zj%B&_axa++o{xXgblcGhOjZ|zc=L@$Qb)`P5`18}N*En=`!p1Nm4FLg?au>LwP?HPPzp~?@jT&vV+cb+GH zj$4N?qLvn8#-W#V#g%Eu%@Mj{5<^Bfb<0S-z#lz(ZMf^8L-Wfx6NzmS_KSgj*A3}_CN=&_Ko#U1bGQh}VKW_KY0 z98V-Fw~}w=*e~X$*fb`<4&U+vgz%2%k5Gqrz26sgBS_G~wWz(Fm{=J*!3LCZ(8^86 zsxq~)@W_cRq1olr1T7L*H0x8S2@d6BHU)nNQM#aWp{O5=&Y`hV{H=elgqS?+RB?4W z7%K~`inD=bjqwN+*utRqIs^ty8s)B~btIl`Nn^;0?w{vVd_RsO#DA_UYpr^%O9!(7 zf4wWT{g224=dXj24^mP%UZd!kVH>H$$fe+>txiDJ1al7W|DF0PeQS+?;S zo0A34cbYd}^UO_?>NIXKb_WvHX^*2vv5weXAjp$|xboxlF3iA$<`Ik8Tdbgi<$8dAq6><)4n}>f9f)*C>$BjFM z@K9u#2+|DF=e;#;zt_gxg6cV_KuP>Y&LBK+P5rA~WCHc#OTl=f9U@pH8Z=tp4LP?O zwvVk&F>60J5^)FsA%?2ASrS9r7=h5h${%QLcSk>`occ^j2x7#T$sJ5vM-a4`HS>{L z33zV#NCCEsr_y!37$R;VvFF^A#IT|Q%kYieSd3P=M}vQ(f7ti7_@Q+=k7LxY z6tr&AqnUk8sh}TRgF*mfnv| zmFq;}X!a^$XJt3*s%vgDqpBoYE6IM-RZGawFYtnAJV-j!e@XyZGgdr~_-ob6*$S%6 z7B)(;kW&FQ7leQN!)Joy^9b89z0J>vsfWyNodnvA7!|({W#ElmAJZa^TJ-hoI_Dga z;rWza)CN6dy>3GhX@j`j?$tk|#O6lt_9jdvl`|Ui9u3zjq1MxKP+)uX?<|;9OcMRg)J?t8gYNaaRcjX3ki`9pxWDjqb2XI z!9Jug%YF(2=osw*=y z_Q+Ea$)hdvN!WlKbA(<{u>isFfO17Y&CRzY@%CX73T19&b98cLVQmU!Ze(v_Y6>(n zm(Y_D6cREvH!=z@Ol59obZ9alGBh+WmmpUV6$LUiIW{+y(FP}fw7PXvl;8S3Os7aU z=+NEWozmSfzyL!H-Q5k+4U&SS0+P}V(g;Y0bP3Y&j-T^AN6-2F{Vo;^*PYkC_PzJ> zuog5FYMLw(mJoB0EX2``g@ct{5TK;20dW92a0K7649Gc6M$w8X74V5YP<_ zag+wSfdm13ZZ-gaRSP$0stbUVom~Kp1|SD=1i3(+mH=~afHKGpsO9Yh;sDSC{{d>!@5c3=R|(GsA@ zs>}*dfp|iVU;sVD5nv9o0oq#uAXWe^kRCu=Q$|A*Ag7^!s;#EUzzQv_>F(qNarr+k zQkq)Ya?Ai}2^B3F07!=!Ag8UV_4}t5$Pvolni-&?1@-^#0}cG0t}LS^p{1`T!@>4@ z4FC>+2gt=0{JZV{aHEAX1N@-|O|^1?IQ-K9KyTyb<|N3*=IQClYVGdo#tLzLO$p!t1UtHc9D$A&&_Fk!o4YH(>>nHS z8)QlMFM=R|l)H<|?;gtkcDekg&A+KjLZB-%viJ3W2YUYRjsYFrU48!2=D(M10daH% zySlmlt0D+s1-1wMX7BoY&%loV*pwwy6l7&IwOEv(gXhSi41ucS$m-_h_D}ThdJ@t~ zf&hMYUI2#xH-H^Fq%w|{QV<6RC~H@=-||U=p*p!iT)f%-pSiYkgm^mo{=arBu%o5b zZ{;n2-JRI99l_4-AO-3Fi-wxe{@AQRZUA-w$Qc0gvan(M-R_@h`EBO-ZHCI=@9P9{ z0$2g;Fc8{-1-&06nFa5J!7&fF;NZjZFoA;szZE`u~5<+5hyCb+@-y0Xl%_|5wug zjRQJ>?Y;jy@_#~fLBGk;t3X^FfcF361G~zCy+D>~U^fe!e<}Mf`@ecgI9l6-04yBb ztn6I8od5D@|2|gs(D{YlLEzt4*l$1Y|M;MzX<_FGa&-l8v;X4)LFM=#;?O<#O&h>} zCa0&bqN~L8|IE%mVKR;u5KFM5HGq?c7XWl|0eYjcLkEJBhX>%x0iA72kk>yG17Kry zgt$Rd08Z|1{s1e83)=5p<>djeN&Ghb3-JQjB>x~j0Grew#1CMT{(}SnY%>2reCz-= z**}N_%J~oC1hC2fL0kYfg+GWJz^3?r2SK^K`GcTbl>Q(n7v(<)%0=Z5f^t#)58{V% zQTv0ST-5&{C>M=C2+BqC4}x;h`h%ccwErMzcile-+FkEINC4^s{?P?m1?cw238iN7 zAH)Mqw1C({N8;ZWZtmX}2ZuieIM|{5E&qbh1%UokfQs_ZwEh(UU6a)x$O-L#Xa)Y0 z!1Wt?{8iz1IK%SnBlFc82P#tW%ooqmke?>rT;J+Z0lkHy+s)yZQ5V~gj zzaW&J!ym{2UF@IAJkV4}=;`>6feYHn(cQuP_nl+?7XuEcD3CuKp*10YWpQvo*XZ=e z4ej9sgg#sBK~{fs8Q^w%arm*nON`6~fh z!~HJ^72V^nnSh3S{RN@*y#KU^#`=I<{#ES1uOPMGkK%uxGVFiur2l(=NBIY9y178? zK)PT{==<4UA<95E7qFKhJMI@_^K||2j<;gTT-hhE-lr? zw}1i40i-WwBt{E#ShYiPlox_3zfdylD;5;#mvc|&w7zY91<)QnkP>L`yp8Al`i%WE zozkeXb@?5lXXz}*XFL~s9Ipi|k`B^^$qrbz=UcqQIAD*&BIAsISy2SRs3MY6cPH*P zY+R|>LoEGv4*MPqBOdxk_O(=ag5LM>txrD{?tqPkZ*=-IXK5XAuItW_@Wiw)t%3`8 zAsa-3o&bVc3tJ|3?hPiKwnJe`|F3PKnYJ)0U!qywatoYoz*>~*j#%k7@a)iH?}Ri&RwPyd)WL5DVaWZ90QG}(j~dM2Xh#w8@Ci8ylkQ;64@q{y+Fb<`FPK!8vBzA{~Gxmq(R-cZhNsMMy>_MMM& zBJLo$(}lj=Ep5WDg?!p@%s0dBjP;!ns552CWKwPQkq>+gYi8)!w7>FbAp*J=oqXK# zQ%cl-ZD`MnOdjK3USWNDfOpq8c0({ii6nRG>SIyFqJ??&1-%0!Ppk{gbgBJ}p~Q%a z1DC(36RFeC%>+9TZ9kv7c2@!OwD+EqIDLKOZBEikTRU=eMiCu5s(zuoe~qe40}>j{ zMflMA^a`+?Kx(or;b_XCJE+$ce6@Mx)g(lJ*ejEaiI)6z@Z$U<#Dgzj@4d(rjCM16 zby$UjE>KZ38c-3ZDYqx4v$YRMFL%|>Jnnm zUhmk*m!a&5qe|wG6V*q_>UF#oY+l;uwv+chb%!|(VK)!8O~yodk=iIi@D6KA+XC!= z*aa^9TX+?;Y4v%UHDpRBI5f)hM>eZJ82!|E_-_wEG@|#OYAK?hrorghIZ*+u@m?&E z1s}#_rP$!&<5NEG1a!fI|ZTC@8%zSBfPTC|lxxxXCYnYJbpb zBL*_c>V;HJwGSglB*Ym*+=k~~Ls}i>J-s-iFZkg{Xbwwm92y3f1$mpebp!f?-i?ixF zx+2&u(}v*zj*0MIObJir1FoTeoOP1o+PzPsAENqsIw*PkP&)$ju9%x7Q1`>_AB-8z zmxzQU>^dZ9zo8SfGk(itnMyrk=qpS=Qr)qfYxUeT67>3^6TriwI&l`=%p1_fdSU;I zgj7*mmEXM1e|WL3?1ctFAOl=+Z!i%=;KQ%mml{Q3h#V*GcU!I1=?j+#vqYdv#*C{X&^{mrTg&uPh-Db+Qd@GGsWKkqY# zKTm5_>6MOQy4{spXax>tkC|-}&6G#zusE%KOX^{UGft-*r;n3>n1F-Gn`x$yEtc3$ ze1sb+)-#Ohi)SNwAZ8`OTeOP9bboYy=HcYLcdvL^zI^O+~rEJ|9GQ4 zk4xi69C~WihIuU)rx0?5Y}aB;a9vm5uW!l~x`d=SwXE)JrB2qbaUK|D)OG7S^-YR5 z6c|v9+j{mo7K*Ze6>u-bw+F`a1s!Du_Q~kV z550xnRVXPzewg@6_Tg(0B1E>ZWLs87jcP}^p-Z3qv6B^lYhiRugc4R0#2*{#v+@qk z#$pDPt797AVGKg!7!o7Rdv-?TCSKdo<+w64>}i_0QVB8lbbPx})hU81NqvmJ;Qo1Ey&m8}>k@seU_l-0;d;H+E2d6DR4_}NNtm#^tj~YYoKQr8-yIQ1C zv|AL>(DH99ZPW^7AE4Fx)Xcs&O36r-*_+y_=$L5=H1nroElp+o8dVb>(uxNQTSlK! zn}sj{JwU?0q3y_5`$YCA>r&`Yb`qP|rgc?{lJf+ce`*CQc2T@%qx#~@;n)0jR##@b zo?G&K7p1m2fsoCokO`Nfz)~%H80@ux6r)QjVcPAvu1GkByv*^I6hY_2mkvoiq9#@j zA}1f=XK!p=vb493qsQN;q}{;2J#s-nw8!S@7wnj7odzkEz+S zZL;lvfAYI5yPh@HZiJKrN9|(br1LycR}T$6Gbb6{>Piq4q*YG1E2wlBgTD4wcHJ)@ z;fMab^>z1CXAZ$#Mkb;JFHgg^$lU^u@gxWwJcDN!UP!Lt-@Tv|J46gkGBhQjN>MlI`>(2rVetk{FXonMorzF38*;ACc+FM-M&u`SE_YE(_lzMXs zan^M?$S>WzbKMl~5_J{6e=g@SnEVj)X<{<(T`FEjpI{lj3B9$Gqxxw2o(`F%7nNIM ze;c+?1iH>By!niF3a{ExT=Ld9f%S!Hx>YB2aJbbO?WQRYN?%OuCtS}}A=0-51d9to zi=Tk5+~ENg%q)$`6DXfn*)Hv>oJT<;F>?{Q!;gMS#EN@!(`a6BDYM?sb0e4E;FBSw zg_5K1D8$98wy3hd*_}-3eHYqXe)Ddbf5MIh#gyii`g;t{vLEcMfcLR)4|=9<(qFet z>%5?FgJ){=zaXz{^WQkE0Tjm%A@p!c&moxVI^;?_%sGBNK&DJY$C#2u#%5hSeTmIH zWLCmr+K9+-V80o5Jf61NoL(?>jO-b|dBvdjES|^5#aPlBHBq0@Rf5*o;2v|qf4Ub< ztXMbj@CBx1Pt!SX(MpDAX8J`3%xOCp54Wki_f_=}6+@$4@GvC(rm|IKh|b<&S~7 z106L#k-U2JGRm+q0*`Q}&7{;De|Y>Ptl*Z!iz=jFJ#TEemXrHc1^e`my|B|6Cu49i zJcBR1YKq`e-ohtu;u9X^EtI?a7Lye&`X{~*?vCoKMb<^$Da*CHm>jTrY2jcyZ3tf? zr5zENf~vX;YY)*!jSoX8qZNOhevyMOm?AzB`}844%`ED>@NKRaQ1A+%e^tTQgXLnx zj$U+6Tn2yCKtALcGtN??!e50y{K@(m)QUbdUp_Y*IfsfwpckC zR*}G1hb}fS#-gcOyzoth%aOz2@OJfKfH;CF)VThvI0-+!>Ij{Z zF56Sjo8p(Z-;og&Kpm9G%2*BAx_3NCmh*5}UMH_QJH8m4}} zCHk_M{JCofNx6~b7w*@!kG4YM%)GNGK z&05l#GdVV`Ply(ke+$&&PpOI;)}a@>{%jt9+zWS@_|;OnJdJD~3=`?`&ILKCuE~Yz z2PcuqfwKN>+#C3NPa6ZYS=!~da!D@hYKa)S{y(W*hw{G{NUKyV(fOdYFHt7l-ZFGO ztF`(&yiAvnDonCAC-#lnJ(dcy3^PoF6|Y`&UX*dh=8f)le}7$@FqpCwU=bPx%x`TO zU~YU}PSyXD3HhzJn|LoCyk7wB#guHMaI^e%y?xdZhc)U1VQ6ne6_wrvzO|e8_vFmH z+dG}$JIC)R*0SEk`CaAL0_~c@*EY)j0@ubUugdb!f}+J$TZl*=goWkx! z;U!Lq8Xf6Be`hn8n4p&9J%~8TSD;XR%^A5RybL$oi+^^DG>-g;^Wr^);f6H|heu_{ z3U1kZH>)-ylq^rF6QyhOWWR^81&=Jmv#W{g%#P34)>3e|u#=(gTvSsoj+9;UY36}2 z>LtMP>+H8cM`LW?4gohuW+`UIpL-5OR=4b&O))2)f7x5-H2#-XzupF0YP&P!LY9mT zu941)(dtg6g4G9S(nG#dpyd73UynAF{)H`X$o^gq6;V}Sjs`CsLl&DQ9WhYlt~Pc< z-DBH*-}siVIMf_Tk9J0hzdv)q-0tbys5KidE0R73pf{^>Zic#j;5rEmMqgzy9;wg% z1vn%!f8tB<^9FLi6bM%*^zq02SV5s6YeW-gn|^o~Q3k$p{)lL&fiy}VT|M~@F{(+< zi)%7|Wu-8nj{jwgCPU+)_^g;bdZ{*&M8upV#ch&0)&5`%ovBA`DP$XhgB~(I>Q=F{ z$$2e8M`4-|*=rj_wW+xelo?WEjps0saIxvSJOeU{kU=nTlMV`G)guv1r2uxmI% zjzTMWv{hbtcJ=M0))@{uY&eJwt|AV_jPV*U@fq>!5dH3?leUfAZ?F}KtNf1MaOUhB zwWeO8d4t>Ns%DIy*o6TueHsq^MzGYC8%qeS^+_`*c-x<{6%5aEMX1(uxFCV5!i;>Q zf20EE-{vC+*KP8h^J@FmHPt~sJo%&=#v!>0x1l5N9AQK3f;V}qfQ+)bN@gwcW28Vc zjN_7qXoc-y{i?ydfB~P6AJcb&78WBy5Tj~N4SczfH(dS=81n|@@U3kLo?^Id`_an; z{`GuA{56%psjEH&bV9^$KPZB9=3fo;e@&QMqqZ z44toVjf6@L@;vv4-*P#{726U0Bqir7J*K@9=HIYD?$A|ahgZQd`&vU-g%M<^D1*u< z{4s{!K_bF1`UN?Hc8PLDrp?cJ@xo+Yh=JsE}DBZ2_QJ~+Zx8${gU-neR`P}#4isL668s?DF%!$5c@%Mv~ zp}!b5r0$;ZPH0O^<5_JpTvx`ge`MbqS-i1+P%D`v+hIrXBBcllTAKPZ6tzxJ-zSz$QU4qI|_sZK6@NC@?H6jl1#pb?p`qLeb*I}!vDfI82c#Jxk zi~ZN3gr7pXV#;Xs8id>1P2#!)?j;mkw(99#kRFnW_q;LI{q)_Ng>1?rf{@ener>Ca z)X_eANXIP&oHe1Be><)@J_fIgv-ZV^>$D6KbNBG{0nvj0HR0R-xYq=oBZysN-AAS9 zxYpx7G-Xms3CeE_PqThlWolP74LiwGgH_fj;%D`OdvI>*Ca_BDE)_@}=Uc8Sza9*% z)e!ZVbUTO*U2KO>sFK+JI#R1xJ1ue+bakdM-f(L*jf*n7e>qc>-U@_C3NFIw;(0^8 zlLOC0=<-rihuZ*ksVdRbiWwU@Z*w;8YblRSgo4{(MTW{#=E87t+t`B8qf%$dJ=QY) zVVb(1C-y04i>y1uMFqI>#WOz#V6}$Wk4rj&&5wQ>Kkl(Dp7CkZuCDUT2nO4j#uBLGy%EG0(PWlfg)doQEb^H z@shiieN1*!5e0KTYTMtnJ94Fx&^7wI&o- zocRHGFlMb=``w&v(zT^cfBL^bCi(RWsPgpLDq{-PT^hKLS04dB53s|bbM&Rc{F+nU1_KJl8I@y%-E6X zw%vjokplfzX_HG%ZiK3oK{{uBkF;$G7l&;RBpv2{2wKmpZXp5a3k-|2lb>HwxG*>d zHRn>y1+6g53Sp47tAFl<3;BrP_p6}hyv#*zf185TwIr=Aw+KB-eF~Xv%J2hXBUY!{ z>vMgV3LD1He9Qksa9?I);H+Mv zBr^9N$9&ID3fbDDI9ua-vFYl?56-61p1$2B^kTGvShvQNN)#v3ddy(2f4*#v*x{+FwKtF%M;agc3i*%_TOA#7qyZ9n z8?9aSx?4-9XmrdH$JAX;pj4EE*7Le{TGK4uOVY~ulUMq4x?rn|X!w{ZT?jj2edbgJ zzecvOukJjXNo?9X+wKfp8F}ZbPug%+r55|`k=>8TSoYf|JjUCO%M7}S!z^6{e}+lz zuGbPisGZBBzFH2$6&H#xF^E_L z%>YG?;I`Z)%GMa$oP}F1ey6{fDRllsw=xY_ruRqwFr7q9K=go(b8`q8Xc?7(JBZ2Vm^ILJiG3DQslH*|1~??UqMg~{ zj0z>(s!-}r>s4*}wfN3Eg~hZCtu1X&3lg^m(fAYsO^ENyvZ}ooZ zzu6K)$_Dw_9wOp4#_7N;fq5 z#dIqb!cloSnu923yMa@u6HNeW1n^2;1oQ( z47s#`$TJkjANr=1f3m)IlNXP$RIqpZIX(8vr)1ttV}nueXxeAMz1t@|gP45|9T|l z@{dvvR>Q+w9`(uG%e$Z3Y@_2ZtT~BAOm5>>P0PSPw1{5If6i>i1dsZCW#bgG5i2l2 z86s_e>E4cBZ4|!Ba{{L+m`kfsF`vqp7=a`v%egt{%Gykvo8B81q1EE*yLW_Ol0At` zR3CZd%u>T7A+%PVVMvzAA6%lHp~OIskOEOxc(NkRJto8;L$W7?3z>aW@;OPtvC?$) zoB-*=#9CoWe_NgdO-*Q!ji~xBnVs`NGxbdl*%~!wqC~@ym4s{x$9{GDr5{2Xz`LE( z1L|`;z9Rn6p=qmcOXZnaUIY5&NT1eeF`t~$iJdF(@2vz8V92FP5k3rh$k>5bM%X7j zv^-{F_ca2YB5}2%o-g1smg}eI$!4jir}mB`;L#zNe+UM2<9DZJ4lLCLNwF98cYIPG z2;JoKZF`+88?nVQyZ|maWwR ziwBr%kGyRlR5I|ihsgBtK!{Rbd^Y7zJ$beE8T^d!(g;Q|CuQwj;K7sk_CfRGhd{c8 zW%Y0Mf7W(U%#=tSMSRt1RweIzwGpk=1FhmiVLkgo^U-CcZk@%0o6aoJXnPIgQ>G|KQ{Xx11TWt1muRSB;M2%;1?QW2 zB=%;{H+&w656Zb7=Wfz<?d3WLb~-^a^cC}cV`1n&f*fd2 z4oF^^q)Liek~8Z?yBEFt;Xt(7B3PbLeyyc&QX0aa)_jeN^g4rEEZkHya?33aftw08 zRiS=*q~?|em9@Tt(;H^3TTC;@I-gUFf2-n{ceq;pYVo0AUU#Jgtluo~`Ex=c5J}nZ zfLyR#egOHsU>QGmDX(qNB7H2P85Xi+*YMkqUin|(EiEWbU}l%nVqdVfPtXm;NNAcE zh8U))hNd8X(8ZjmaDVoU6ce}lx= zsIF+d=0-Z(wM28 zj5HCC%PNa7IAS!eZguk}+$RFrubYA?x1{3CY|?Zy=2F3Bk=YMym_gLCQt+LNRucYj zuy*9V^N`v%x_d-UN7!^Rb)qqnfB3!hb=@gdO~!0kTh76X=r&xfQn*WYPI3Jf$@`*# z84MnvZwUOFbv0X#`OdMiW%kCpQQe1bWo^O>>rMZxoxcR#zf3Kx=$ftgE z&B^z_ddhH@-?@-lZ44c{e^$)j4#4+C&%s2pNsrDbkA{^a)-#;EcYbYBIUsX0&2H6H z36sQ-oG&8LDI4}(6wcrIgdjQdidhh)Ibi#h*#WENMFbTHcc3zvBT+>C$wH=;=}n|? z(U+k`mUaL4-RB>t(gWs-e;yiwj}(MHyNyymcHEPH8$2N6nF=a80+Ukm;ID@wwzL&&?3)Bee}~mhA$ZVJlWswtFMn_* z-JU^Hs%~-Kpji-V*;qj|@CO08)9b7SMz&w6GaXv55fSp%=2#kq*`yRWJl_T!;`%HF z_h`Jx8H?Rd?BXXGG zled3q{sPN(L6bpJB|2IEZa*lTJud?5G?GPAl0vgU7j;r63lYL1reY#wPn@QA}+L{3ARwK+qv1tPml(`<))(ORqXje!ntjg&#p z+1sMF^r16Dgyf5t0TXQCEF>&S8`-#z>8JC>OHPhMcx(j%EDN-pkE19E+mTqxC=BO_ z3_=aE8r~xiPZf1jz~-_}892S)70gjGG3KMhe}T`Qj<$v|8nZ&qt1{e)>Hg5XB?r#9 zrLSRWwZvkCF1Au=CB?T>Z-0>REgfb(_>WI~9zUBugKk%e9SU+aKDL(OXW=RxqgD=N+Ky zst8`X^lpswWlFSU{LN$eje^n&$)wN+xRV*T^68fdY*Ga;w`}Ex>JmTcI`q|H! z@XTcXYN(|WHS)lScZtv*Pbl3~X~rGNRMzV4VKoA{*`&C(&a7XtE109v;o{PO#8Vb0kq@-&@8btt z!^HK%=~m^vY+J4eVt*ut(w?= z7~~sF6!4*u$1>Xye6v(Ge?kOL*QnUZoc3a^iXHaZVkP;tEg{L&+{~BeV%;+VnVrKr z$)>tc?W+S1^*w%RMjOwFh~1GF9HRJ7hy%hj)j`oFo?aK+eLL0Coq>(*{g4>OtlCHv z`GlxX);@=Yil= zgO9gnD)afN8d~vqe~1(mt>hiHp^vXuRVzb{uxHxQzJC_Fn%LCvJM~7?e~MD!L_N=t9+auv52g*9YH795xe=(h4;MICggu%r>e#n! z+DHsPgL4RKZ+dW#nMU(R92XN$7A7TgtyPIsD~25%N2xBSN5b^@sjWfxD%b^kNh<$9 zrgGVWejmf3f1hB<|4F{n!KiBo-S8!m3XUcVYJ`*uDu_6vZPA6Y%|~ZkS$G=0Jl@Q9 z=ILpSR64EP8-jG~|Fz;pBVutCiNj}H%}W}*lpJam7VSVTr#g&JDC&eDm{!5>K&F>n z5>XqL$xID91*ov^bwqgHGUir>(n$VzkK%^$5#}cgExgV(U$C$h%wbZ<_H^s;y2Qp!7U3D0 zL2(;mdXp~xip4wCUG&a?19iOL|6UrcREp5!D~q<;6Mb|&Ou|n>A}hqAGE`M_T^y)_ z#|6kce|fybZ#e^8lCS?VxI?*PmXJk|kg`t6reHt(Y69C5SXdYu1`JW@rIVeNnK#_W zOL6QSDli^*De#MYlP3P5cb>W zv}qqXHqI*)jHLVXM!!lJR=h<4`fQX2JfO&`e`Hn93)M(j5#K(z~V6J(o1hZ($9_* zyDB|zpyBqyI;)&HTs(<3dhLQ#FvR)#qY_+zm*N`f`$FHC3e=bQqef-I>*`yAerK`OBW_>wExl!#f2xYLA&vRC6^h)`73e#Z)%U7{+Cx8L)VO>` z^%&9VA6=Q~h`SDC*$}N)1)SHozRv;(N*S_*dZ@%$z z;o$Z2A_6ndXgR>i&v~EQE1o9*c)p1(34Oef2{;@HZG08rM7R{*QRZkWy#Kt-+IxN3J1{%!-?aoMIRmIuFVIgO z-j47!{?N`l{L!j%2pO4;qW+$h`xdhG13870!j8ky?Nn-3hq!$2-reR}un>sL{Z-}@ zNV*2G;sb9(WBc%|qZ2{QYp+jlf5V2l%O+hPL}(+ES=4*hCR*nLW3ZY~@2_Q~7Gw=D zq_}?6*kjF;13&X?e*ure6*u)Z*V2);vHKid()9!W!oG?`XPZ4=`kSr(ggmKA+(+j}G@dgGe?FOT2(3b1 zXVNm;m(K9?8GC{x1Un@Bde%b6G{wRL4m!)JFod84{gb0L@VTp92|3zrO-HZ$$JtP} zJW_dp`GKm`CiY8t;ST}ZMMd${f`ux{Tgh5sTX#Z>n61{K#)Q%reTq?EMBqG*8s6CV z#5$UuZy04p;bit!gUp_6f6l{7BIlbC&yFP9X7awrCX+ROU8LYpUS#<4@m0DKj{pFC z?5=uG4GWg{81Dc+7?STDNSz}2y$diSI-956ij$u>s(m1#J_vs+R)s>fcVHr(M{u(m zrZ;4>z{i*T-UHFV%XFLDoo4Wj;>o_6vtQvIwh8&kVcv7A?n70~e<4v__8<|5o}rg+ znP)6*-6gq~8+KUFITl3l$#UaVp0sF?5Vp9egK;{f6H^%3Pbf%Fos(0)R)^r~JlQHkQb}=7#2_$;O|IxRqxzQ`o72&+Goy z$uXxEE>v2lU6qP_<~Ca$Y#E7q8+Jwc{&VuDygEX)8gOl zy9f|q8y3LPf8vc>X^eW&Mm-p8!60|%o3?5oS3Y9di0%&~gdp+K2ja{J=71$HA0M(1KLY-j6>Nwv$0Ro8Y`5!Ois54cOw-T8rPsz~Ss^;q!?s|b9|20d;A zCT_=y1>Ir*8Ro4cJ?66)u5ofj8*rTUjN;M^HPck;rkX)xe3yAZM0aK)q7Q6xzG9!~ zZE&xaf24kB@F?6=)zCx-Q|87oK1+aIZLv=~Wo)_O`AI|5n%doKS+t0>xNtXcS@|FK zd!$X2sHnX$;jQPfL#Wq5R!V6Q-&s289WHB5)P7RS({sc$OE{fAX7LTtnwb`V&p=pq zDt4=f*3c82ms4Ck0L?0;`$xqnO2uaD{`HFqf8w_9jEzZFs{3C97cF}HaLKrIK^W2l z)g@#bZjoQ;9_xiWrHAbc0NIIaNxYvdH9r_+`mbV^qg%JywQKqFNOx;DU3B3}!c>qj z1dMG_v}Zz?=FsjwgL%?|Eqb!BhjB;~wnW z_VJFTnZPl_^>A&$hOw1{s3}=Jdy`l^e+VzprA;k=ows>4Pk=cp!>=1gC7kZo#36H<%@Pla^!Pf~Sp&Wron<98Z2 z8M!`2rE_fW8sd`9#ap-!_4K(WOU$0)xKe#Vycg;0K&_nT?_tvQHi_aQ&3t7)e+~^b zv~plEKO#LyR+9>qjnlVk>SdZFo|5l_Xl_5VdkM`N} z2IbIY4i+vK%U02PolYsR_O40SVDholygGz@XjE6oL_cuVzKyWmD{UaI(Ckp@dTEzu zIVL7pB!lbn;-{)D7?Fw15gz8v;O=%_ zk>8DRA#t=FO8o-d6w*iHVf-^=&y#m3tmC%S3m6~zzVS*BOSZkAK*0~Bm>0&)qDAeM z%h}*{@By6rt)SX_Oww@AJk*PzazwJKEV~bvRagJQqDzx*pOzQSGvct z`ff_x^21vR=2gP0mRz%@NW1dvx12A2Sfjyu$0)*D`2_@t=MFuo_r7t}OaZBW8>slH zgun@O^J6$AMX``Ruof)b$-XEQf6Yt@LsyiWR>dk0 zI#4Wb31l?mdSM}((>X|B*ZH=_)mU>Ct7mP<>0SAj_#DC)%!5wq#`eg37e9m^?+g)& zaDB`IO6u-KHId@@71Vdwu)P!H*)B(YZNljWO!+sGpVAg!dPsLc25s<|!)9Kl2k*7dYA%rY4u-x40=+3l~AZTW;_2f4LoBb1^(2j}Ro{6$4M34>%+QN2?b z+|!nIT+fD>7!?f5)NF7YPv>}>ByNJrgGBp^YQ;Rz*SUqSlR}nM26K4!0{4|6)?0m> znPch?{AP_rdBK5OC#-g24mas8h^d*e0jamKjTPB1E<;Szjy@mn{ z(3&B|lzzhw4E(wAhOGsTF5ilGhh2 zl1Uc@GuZ#_oyGi4no*_d6DHD%scZ0cMpz=yf4v2ugDhJxQ+L)&fpQuz?sF~PLU!_9 z>kx%s9(4l5_R5Skkh(Nlsvsy2f5}teu5n>qXyIq*y$xp%Uk7niaMxleTs=XFMT(*U z{oY9&{&Q*<9(&nxy(OFbI?Zvwk|dg7ck~E*o!Q)%;-bavy+``9D*@TK<{DufWt11U ze{z%csl3cqwl=bFR{V_-t3yzY30s9DmaWG_4{6#GwBDDLuqBbDc*?2gl(O%IZ}PSm z8H`?>iMVf|#~CK`auApcdUyN?iY0^t|BTfh#=w@$Gyu&1Uz;3puCb z)npl@5z}u8T;SKUg>id{13or2e~C=Q__wd8_U7zhCbzjVm8hf$31AWKSed&%$x@x8 zt>XGgU?ME6RR&A0dT7ZH zU03+Vj8?!#+kmZc9W9ade^-p~Nc6@SWhoQcEGb}reH7j}7WBR?4EF^1VU~1zc8gDM zEZ0nZtclF`JrT(!oiJ_T)-G2HfEDal8w_E;U8N2ikjH*;V)@jKvqSS)z$>LvBqhHb z+nz#>!#l!*{(MqVii_`!#>j-$C5VYkD`?ZOshfIm{HAn;cYp^qe_Iu^gC|ztI~v%( z7-J~)^-z^j>^mg{g~Oe}8E!yvpt}E1L#TPrfmk^x@+buzljw>mQ0;{W58GRRCuKIC zka)C9#Jow{Cz1I7FP$S|+!{SPp8W5jH>;t+AW>3l$2NHJz9%18g32LppQmTwZ%gn;*#gpXl$xgb^tMxWEL@WUYp?~OyBT(L~E zqm=yr3QG+VH3j0i3@tiNb(Rw0fVla*-n94&4Y>=y!aCwvfA7)3EcD0G>MH@I3x&AcV0^3I=kTU*A|e`fi1@2}RZkx*xR`^XUafa9 ztvI8QI;690sigLajVyq*E`unjrdgP8K7?`%Vog)Ban`keQ`Lw*FogLOv|F|vHT}pk zmw8qpX#PaEe_~67JjlK>;P$!|(1v^H^PjLG@Vb-q)KEi9tLH(N^=tker$khWbNLtK zl0QthAO6PxV`fUL_}5lmY|_6$L8)K^RLrD}h^M5{!44V-p=9GVN4Q})Z)`Bg2f11K zCl7qVKI^w5YZ4CiP$)#_P=zxW7+#g9!J=CL;BIObe-j*{D!TVxW^(19icQv%T(;$j zhB%ln@sVhMaytT`UZwe6dH3qu6f!H-G<9UeV;5=yBgu_`%RtWlD=A;9-fQ8817smW zz#n-eB8rLNWM5W&fSEt+&F%7G`Sj)AGu2r%_Joz4t`&!6>&*+%#x9liS=NsYX}DXV zh|53^e@(Zt&NFDlZ=~*N{?*CthfPsH8XC!S_E?>%7y)UiOhjF`rEEFPs|w9;i~RHF z54d8dTuK2UXO;55qGv;NuQENW^)tSi$$cpTlG-)T4ug;WHVKHY;#sRLw^~y)mi1qMMBae`Is##s6-%PUCgh26ge)56`i-(rThZcXkiz zZ|;=+{S+F22`rkvQ^iEy0@}aaAdr|xd?4?X^XU(SQJFE*+eGqydP3LNHXo1FLCIXK z?h2Q+6nLqSgg+7a;>k{D5YE+0a=GlLc@puSuq{^i6iOPwmO7c!;evazC~3bQaM>hq?|+S|Lly)-F;9h6|$eXu5+R4rd&MpL6n ztht6`1b@-lXw5S0DtMF{{Rt?+x8xlihJ+u$Bjb z3I@6aWU23M8ks;YgjWuw;wnPnf5%tJiivyrp-OVg{Ug?SWLZ{7hOh8X@H`!~S=+9V z@gBo(vBSQ7vBpgkr@EyP=8^BF(c)dQgeN&86wa=p-p`rVkRLbRq7-BR2PR$lCjNQN zR6R`^+)Ukcg+Sc0pS)a0!)JA^?W%`~Lg`03zAv5(?<}VEGP#`*V^^;Nf1JH{*_sws z&9`ip(#F>`qKCXv`jE9zfpI9TNTj@)9Q;Sys-WAyPD}Zxt`>Lhw7Wei!XzFMJ|*3L zyCRq?HBn@j*j4Y1fZnWsM7g%iKtX|d84YMT7x5P&qFMKVpFDSVu#`cyH7T}$_Fe^XLYQ62qvy-sg&xvn0y<$ptWPw`~9v`P~YSeP0wv>W+f z7^%w$U(r@^KmsjHqx3mtn*0Kli#I3<@|E^|#uK7ty#e%jkH(oS-&?VH*npDY6xb@v>5DGU7hf4Zxi(wz$1Yrk8b zv?rGv?MIgi6L(wTP^S9hhr2ID_C{Y(hQB;uJv4lM=lRC_{-&)RYZqOJzvuIr7hUJji3GQ$2;_-Z9C@=;2&)s<;Ys=z zZsvvt@Uv4AP;3J6rrjt?>;QR@M~u~n(1qe2vp-8$2{VOgh0;*7m^5#;1(PwhN#n2A z-HwR4e7bC7L3Lq)P*ZC&M`-$i1e-LjK6l}Zzni8dCBn`Vs zMsWNX1kyp_OzOtac)D0z_+dUVuVv%iw638Jjs(6yaaPLa>1`ERe`hx$Dc%IViHaJM zaj`S%p6r+(R)2juW-Vz=Mc!LIJfv-PaS)Gu19W=<91(0k$N${|B2-XOX|b(@n^X2p zwVR|h#2#%de+Z-r>u^3srBX`JE(uKU+A2bT&F04PBegXz9`vYOR|EW z(Ss<%>DlOe!9`Rs|GzvrV@CWm}kZCmkX-0ENTViIY(20Do ze`bUYVDVMQS*wLM>720uF9gM=df^=Z{@k35b(QesrtpOY?hK9dXZ0$X41vBW^6R*e zx1GTuPrBIHqApBHqh{Vr%QG&kAf$Vxj;{rCz*~aFg$c|qVor09qQDV)_LJr9z`2?+ z{EembqZj97L`JkrxB)B7uZhdrI%i(Me{yJe)Z!OF19G;(mdz>}tE&bT zeZR4aI&^QN5H7Ek$`9-XBrU)6yo+b9{f=owAK@QX;6vHvzg`3DeYO&DZ(K5uGkZ%M zzmGb0y1NC3P~U!eVXOjC4_j{FPDQn0=+sun=q4WwubiL`3IZ9&asN1^R!7wtf18Fn z-+?Fb{59L0(@wl-NEoXnpZ<^teHr&Y?jTx6cwY0wQ|9-22(F)!%`0nq+B)EGfF5i& zuuB+39YmMmc=>#1SY*nS&0C^${g-1bY!3iumUxN@OL} z$F7OMP+fN!+JrqT)z!^9Akf)WfA*i)J)^xnv966=S)eKl%SH*1nvc#-Xt^2~q6QuC zL4TRUjmcxKz&1OG$sC3fP4Az#5&_mF@DA&?`dvbKd91&Mv`nw_Vj_&W>b}uU;xe4e z-XbeZG5_q1@u3q=aTJ+@nEtq*-zo)wbI#EZh5 z7hk;rzaxuvJwAE7H10Syl6-;(`aI*llUD-xqmf*#k_G~IIl{{&D5tYB9xnaeeM;G! zB0z8Flihuk>oX232_3!yf1K>OG)EB_2dG!vR9*qABWz##C`gl$10MF=E|5UzT_cl4 zcWZ5WruilpD~?dlnH#6O_I>-CTKYa{^OqMeHy`@J4_f`l`Lo~+bvn^!DJ4RA8-Ba_ zipUZEmF=>glg5PPVmuDjdIlsT?!ucgY#E?vO}o!T{;y#>=0XGuf4j%VGrFdNeWdw% zg9pTP0L;d?>IAWm^iy6%K^h6+;793i*W;M80(^2bor`t%tnI)dZ4Z*M!Wh`6#OBdqAN zB84+mXN)6j0$7>zd3mToTF4Ji9m6tDXr~8x_j{SN@8bj%e=7kR?cx;!ePlDRSw;n@s`4$f}oSz zmucRSWv%p<<2Jt#(-AzL{0Bka&eEP3!At~@f=m5M2=3HKQ`AVC3C&PgezQ?nS0$npi^Nf3o@aThPahmI38vq#&pXrPoAcCI6%OsKOz&+xIDYin^w zKj=n(HyfNqP2sXu66luU-H_0{^XKGbCI|&wM{81s+DHc&TwgO*?uNnZeXm}pF2$mvVM;(p~_U1(Ep_>;%eW{i)U3Ct>|=oD+3tc zIOxo4{w%GieQKc)U2#edtll8zI8LPkKyUKg;2&OujCF(UpNHrcFf;2cbL&rolN>Jn zZB@|^$&;YQeFBF%m^qu^`k~IoZR9{&p!mLrx}(+USgTNDT(#3mxAc3N=l`S^E zaVSke0>2-95@iGx`xx%V=IVQrF>ne#RU-N#j04RYWh*WEyFD>TCWH9S&O^&rTLn!f z$D8B*A(}D})oM1r<1d)E(9Y{tV(@deR(RS+^)W;~SZ&Jx6AxZgT)`py9&*u)z97T~ z7v4zDjd`?RY$B0O8PxQ-OSL?@Crrv8vlH$r0{{``AUpos4R)C5GheI5)UD(df|p7v zfB_{f6k7or@8BZ=2BUg*{EqG4l~Yyg>|JhcknwujNDzB2Rk-#zndJZu_G%Q#Ithru z&tB5zBHzVOxeR{)`nk``%ZlG%uLN$*W?isuun0$%q||?AKg3wbNW+>2@GxVqGrZBLhAY3+BIIHLwPe+zq2jVh-jjeZj54(sR zErqDF^$tOHb6E9>{9iaal2pIBUq*efrR!c-+S>AufM}mFO{@WIf65_qey~E2=wy)_ zI93rM`Q6K+x{Y^zLdyBCs7`VdhkbCrgw2-jM#N?uVJVK`+-WC#13uFQ*9Ud|EWmRV zwakEkyc!quLYCP-n|`EG_ipv(A))A%UlNaMLdftYQ^C4l9_;uhCU-qiL}&U|{t8jq z3dn6qw3cG829Ph6q?PQ+q-E9>efU5Ng8jlq*WR~~=|p@C;o`wH*i83GP&BGH942$} z!5qVD|I{xO3?k~RC=6Y05N(MAx9%h@*=1~ zX-6<({)=ZQXQgrT7#tqggIsOm0S$ido@Wb|NZdb_j1uvOX~y3V<<0qu=-s%5vG&y= zB`c$j1s(XWUr5Ck+;OcmP@i95bWP@Uk-D%toz&NU*H^-m4ca4EWda69YXBA;)S*wq zt9dzN3DbfHTgErjp^q}4&SxlJ6X@HzQa7<2_*uO z`LM%9yx_j2yZRbW;XzO}X;Z0<7o#=i=4}?46<@Q_S@o3d7VV7jJqp!J7Gf?Mvq=X> z67n3g$+Wtv3U)M*@-*AQ)7@C*Rn)`Cg zPt4SmCzvsgE$BcqbAXy}D8pgGRpN=P;ioBr4ai`fE(C58=q8bHEsUg-RKz~j+EIRy zEJItaFQc5lI!-p3GR1Ep$=8{4~04cN8umbIECRB{FyT^QF$cQV1!O#(>g}i-1y;KeF4wIA)BK zhRz?Av}~G4c;+SfK`MqnGsp$={up)DAE`7=Qc9Bv5^>Cd1+wn0~T6CTE#;a5xDax_>luyVkL$+32eAW{>Jt zC{q=JH_0BB_V8K^_zGAHw;pWKIUeMJFrK4EXGbB^6-k5O+KSNM^?>a&(b_3KMrosd zfW%p$5C7}$(JWH)yOG7js?{AMq%aKCZJxT}j6+d?CO{W}=9?r4lSEjqpI&Ht#9Xdv z*txEu^}{6-nF%eWY|+4@G0q+<$4z1--#S1C@-6wQd44*VVA1jL$QLg00)jhi5L9Be zgI!a2y;-#hQCFy1@cj*@Rib&BO5w5^ zpHi)^)_0yesPKj*;9<9o%*_#*nhJiTm-xXfR=jY;Nxm_r4!?SXwK2FFZzmE^yZ4l`sW--Q`znny=3(^ z9Y}G#zlrha9p~aGUfg2%8_cu&{jZi<_pA)2Fd@G+7v*Pp`)$hBRj@l#op`uHD(GAe za*1N~Idi3bw^G-;fw+7V{vY{>%e!X{9{t8sU3Ee3QtKp*4Q(qk?B!<*!|XtqrP&VR z)=UoBJP4q1bE;D zp-IQ!qy)*EsVHH#Pj4{(3GMYDb;v7>Y?`lVjyE(NC1;_lS9k|hK616E)0Z2?B!HMs zJ8g@c4`TBTx?nE{hjp>cSOXE*|Lq}*J$7mxOVltquKMF#vtNaVUXQ%J6!CKM_j+MD z5?xIM@8Q+49$3%MTA-ymTR@DNWjGM-O6*di5Ba1Hb{-)~coIvYsLtA?LO)f+;wkr_ zD%3vYGnL}7P$XH?__6zY{6cCo)i2b-s<2?NQ)C)K7Mdj?{9P5}PYaO!7gV&rQ_aUT zalO73KrOp0+f0l)Px1aGl5Zt964)myX9>P+#WgGSjM-iQCPkwJk0 z!N*=v`)ZQ&mrV$fOY(zTn-iOm2qA+VU1xWL^HHEoPnE5T4{(3FGW3q`{k^$fdO&c- zkPgv&Kj*7rtqTf;hy)l$XmH-}PT5K%Mh#zmWnfEk+!>$W5@Qw)*_rY)5=-a(sx=%n ztjLyV{9`s~y^Ae3T>N~6_aXhYz9spuj3$6MJ|;@i?n4dTqexo*nzDB;YwS`ndS|Db z7#=OF+TxQ6;X@rdjqYSxtDR<~WMrhXkSL{E<;$$aU@P+i{}tHs+`9g~K;;SLD)LZw z*s*S}{w%fmQ=)_DH_==iiV3|7?>A?@y(|N{bG~-Xu!;=w##!rSAbm85*MrCRRp@ff zt1w~%V#<7fw11~mb=GV=+iPY#zAZXq54^D0A!k+UyK-KzmbxJuZ80wWYvIdj~xFYbi@st+(zoo-Fonn1AC? zx$GcH1WZrph0%qTQ}C5HK*U)(Y)oiMPK&%nfL+eT=dBkrY|k^PY~x->ZKg8x6*2qN zhqXnavm$yrSKCYXQsI=;LhypRMaNPXv|p31lZseSKa*$n%i~!f#Sg_EB}a)X)CVi? zyzzOKVFRp~G@uOwA_jZY;N3}ikRmI&yK2#o^Ui{IJ&mD^Tlk4}R^cu-@l|iRkKLt_ z_7%F6%j#yz`u*!)!81qMANQLc9LcMP-jC!7uOb0BImn9$w~AqUb9)na5xvD`PMcjY zJI)utbu3hv>pIkFkVGu*qMZ8Oycd>9@1Nt)bRhMKv6%_yfx7eOJM=;&wm;XEtd(t8 zjH?1$x4`FeA%%2fGWv5fZd)_x=~Fp>2E_fM&G9xH{b~B_uX9(-{0qE3+tsl7x1->D zXp+E$y1rNxPAmVe`S)g0UoHSTP;cKztV-!*6026zkLGTPP? zHRClQ83a-O6!Nvg&7#sH8pZCUXH$O2k5bhrQT;{=fHo0D14C?VjRb1WMM z-=0#F%lY#A+t4p~5booYru#-(65y&ylO`Mv^+dWo{RKkWMU0Z7n zFE%ztK?bsbh_5n6=VQIR28#-!9XuR7+DeB;$mJ2(_zu}yCOb`An=QSsy_BA4xT`2fM6n4occJJn%h+ney~Yb_MaTTU)hXQ z`kn++M1&I3op=wb2k#fOptOJ6Dn5QWI%vz?6PgtsdqH6Bl{$4L-=U$*A9DD)6hL zd-Ii2=|K`jO33>Rw`~EHhF{wJtIyNJF))q#L%c3PZMa@h08}*`ulRiKHpu5T3e+&$ z^C`-PaZK@Krw5jlRX#_>SAp%Z!r%a|6P0g=-4DiP66f|hz>!AL^ z8n-rys@^GHzJ88X9b5aS$WG;0wrj#;Q8wd|L}OZMf%MqMMuW6(yN#d2@lcYr@AeNnJad%jlDGPHNp zrOOiIW7VU!l5MOZxaf(Fn$w-BNf?9}XlHw#ohV4H)G^yHfyxkdp4pe?CvV=?(O-8- zQhhmB;4cFST+h!1Odg3=D3<@)YqX4g&4ll7O!y)uXH5RbMl6GFMcy;b!=>bU>M zaN+n?5m?cQ3QlH$?v|_cO+GQLC!d?yguI+jv)sf;>LW9D;?VZ;l*{-W&TPJ~h82E= zGP?W}xrE=6@%dX&7uV;8<02b-PRIW8qE$;#WlqokgUvBY-Xu`#EXBUV5VQtafurBjqG5J zbu7}nc&nNjAe#RF{#}Hrsusi$lUm5|)}_U>o{;)Ytb*lP?tL7c0nmnK=10OsU{V2p ziAOk#ssFBk6C?fRP`Mx*(Jb za#pcNQvvb|L)?{I4dB_)F;v6y^5Px&-Y2Q3C}DU7C8ns#qd)|)@&=KrsI2&Wt%L;Y zz2*D{QB?Gr{~o(He;Lu!*Ok+hllheud^(K-LItR^n-yFT~yZB zU9yUD0{9B9RzS9}A!*%MW`1LQVQIlW$rKD$=C2tVDu8;HHUC>di#i7`*^OGyZ9@gB0nV$NJ4=Aqq7qNR(L;8)5%{L)4S>d znu6LYa0@rqcl>b4{vQlAPeKnaEWdw%W)bKK zZRLEc{^!n^?t-OhXK?i*ysbA7e_`n1+L}Y{yy|=m9~e}84qF^H^CUG{w@+~2LCRXjuU~O5G|D zivK>Fy(pA^zpl2!GJpIn`fwN=_+iNMhO`ICg!2t`3z8=L70tEfLgB{YK>3{-6r7F& z{55?;dcnkbKpKTKWch|Ng<{hBz-w^s`ibNPHzPREJx2Epx;?l41=Y|+{vOIaq4Qs< z?r$sF`Zwj4V6wj zHNBF41F22E42AU`cKpfUpT7r6n7j+^oe&Ar;1+;mS)NUMmvt|XT?%#_5(b|L+&XuDBNfmGZSl=GcxEy~WaH=v-^IOlyA z({|Qng%R>O5lSj;-WP~)eZbf!3D<2c@}Pzqt~QJ)23?pyWKj(Lo zEmBIo;rlEyvS*r#gRlCWMyvuhS$yDR`=UZ`pKo5|`G}nJ3qxVrfhB8=VRKZ`5L3oo z-GQcvg~t@5Ju#l@oY29h>aFuDD}+r<@kUmw6A||{^DIA4yQGJzp()GWz&XBKL?{~O z5tE8{#YJ;3s{Pe~RuQ<3*`GE9dW@lXPOFm(LBZFJM=n*869Ya>Xc@q*=^IIVTH4NW z$6u;nn~qS-MQcscV-*Ci=$Lz$jh}`vkNb+hWuh8~{D;+I`6k=0NG=V$LXib>;Vxjy zeXta+I3x6+Y9eLzk5^6eZ8#Gw@PpI3Qc!$o>+^GXc;j42JV{_D6P(Ij(`OYQ-w7H9 zY->K~fAx13hF$Si+rI!5?-k=tEe#5Ki@i!H&xwC4ic3ZGE-TzG*?Kn&1TK*?l#yK2 zjmes+$55Chcuq;;u`{1vyy=y;P*T<Uv*-HqvO3Co*0&FV_V&8*6?Hr=Rn!4?LXY9k6HzG=Ss!#~ zt7TqkB})ghct-Aj($3yuLWbv(pW3Ea_7%ZE2IoTNtSQzbdbiC8jZ;t(Hmzn84#@o2 z>CeIp&oMaRrp9`w#$yJGOlc+cq_*}mq0bCu@6=dHSmS01nvNo*EM9mH>a6;dR4Lkw zq}Xl);l>2F>5hP_aeqq-1el*EKoU!}J3Svs{ z{sC6~4CN_HA}*ePtNaNh^jD6xdlGXbS!FZBI@54JBrH6&@XFKF2Vo9zjL35?6Km@e zFxQGZPHir}tY-@8_yTz^j(Qvq17VIAe00c5Zk99o2}OaIOOBKKrZu!93!Lqt>cxMF zcSeFXJ%6zX+eE*KKQIgiACM+7z^Ly}Bx_z-qLW$WJcDAQ7gy?QX@1%tb``%I@}F1> z@#1Z7A;VqBXc#r$UZhVyGf{`@I9W3-ubW2d!Iuw_V}X1R^*l9U;XWu>rXN1A)65zK zgw+7P`Tte#`!S=uL(Nd^T53C?=2h~hSKnO1%^<@Rzv-~>6(vh^ZcR9%zB7~>Cqw?O zX@&i+(&$XUpt#Hw7cMMP_-%=FXsRWS{ryU@^Ci!s$xgVBFV`gSl`0MU#ONjm=Q1(f zA_>lE6gYjA|KuGn?QJ&OuR&I5R%I73%+j$Z;D`V9+>gfiHeqIBYCbkapC;6vN5vlioWOb8wo|F-nP9Vr{ zR|!?x#YBkU&P=>M`djoeZ>Z6@boVdfux=W82bVd^hVktCF=f!aqOLc0DSxR{S)hV= z?sWkbElnbRuk$k}Vu$BO11q@!E|g)>x!DB)yoR+I&flCy5Cb1d?S`QO@Y*Xsvue~M;*m5ybTEmqyW ztNSlqws(s@jAqR!Jz(Ts3$B1GyCcv;*oF*@GyDd*W^ap-{2glLy}QLJpdR;9-x>it zbMg1E!d+|49%z*Kr3VR|P~@))x-jbW)B>yI_EgXrB+UBA?;AoOkwsZ+yE#1K*3hQS zzJ?Q1YN>96ek}JeLlOU7wD4q@JD@Iuarm-Bo?}Y|vrTEa#e$r#`2|UfLlNUt4OFJx z4R%FuJ)@{0*~Jk;6a9TQ9`P$jU8e_b2bf2#-lC@RJA~2s^7m&x+x3e|4z?C|IG!+8 z7Rh;b6|W)VF{5a{)uQdWngyUjRt`#XFE#7be1Y16COrJ%BHBCx7lE{^`-&&0D*bCo z#Hv9D4alElR%=q!RK*6U@#W(7FS$IsSSL&1`@A>#D|F$BjWC@1>0!9)3wi)8wbG-B zMvy^&|7Q-M#q-$v-1Z}`RttY8z>h+LkC4zMD%ZT20a ze#vut!uDnr2S7Ia&?B_-5|-|8!I z!NC+%8|tB@x8R$G8q41Lgsu~-~YZ_#Y~CMy>`d|1v+>u5r=Lc|E@iz;mRkWz3P!CP~vtfTo_7c1#48* z;dd*Q!uyeWpar;6(ls8i05j;_z_GwgxZ9F=R*2r3^GxO37c&BpsW;rtBtH3Eo#{+Q z)Uk;V!`I99Qg|Zxi?m4Q;TP$NV4E)3LuDom-vR~+V{4({(C`rpr%jk>_Y(H@FCXcC z$_;ldN(Y^_vDkrXYsJcxFa3_n48E(MG!!3WTsZ0_dFO_|h`eus@}#(B!$Xb23J+~8 z9Dgb~er`_NeY<{Dl=?o_$Bi}v420n^D3?IYtfTQHTA7uwqDF(b1nFLR=by<}v?#72 zg-7oxYT}19k-oq1BeZc{)jED0d8sQc;CJi89rUBFj+I1+K*~hwe!&-ALgcQe)V-=K zqR6;QCX3)%;^5Q+p(K;8vZMxHP}RcuoR}&uj*m54k4cBP+1V|v=iS7e7io5(MpQ!~ z-1~p;3Q5j}Mx%?{@tCKh)TwFb)HFLpASg@-NP1ng7ri{x@q8aIO0JI6gmWi@GeR?5 zcMkLrd`YT~$`}|gx$85-UefGOZ4`eHRuY3d4T-t)lhEA(7}-JN71AKCf)@6RQ%lj< z+aNERM^Kg9nV0M+?=jvR528oYCf7DKYZL&Z(SId?|9+lj3`82ZUf@o~<%G9u7Un3V z!Wh@xoZIm$8CrA(Iy@eorL>%LC181H)Sq#v2y=UywD+~> z2g+x2G6wJ8Vg}o)`pEPGuWuVr{5lOjGIZR^9LY?ydK$+T6-5FVbIGAA+EcJQB1M)v zpmS{rTnvi#pF!Wjb+Oo1I@Vt0S_PMz@`^QFY`xIHAiN18XA`F>(7ov0&ZesV*VmmKryns3#q|Wu=CNlq|9}lw z^hexY0K9|Z`$P8QGP_`4Jg)Kx${iqPK;5|>TQx&XdrOzxS0k8}64I}dFqt(IL;C}; zji)Qm@!n;Q1eD%R$tkrKw4etd$1dX#iu0F`72ROilrgR>ud>SLq8G%X;y1~`QeUUB zLYjDfIyhSCZ9ecuv-}o?$XUCI2RHMARmin3p(TzeL72uBIKY?Z7No+eD=rjtuPHhm z9o%iiFq8aAPIm-RhSqFFlL;10TGk1?%I!jSN15Sw8iI^pNDOdCnIH@yDqo2EzlP^v zWA2}89FfSlTt+(Ae29j-ZhIpC=P9FiL*R^mc4&fW*_PE4`{1#5)LvYTU4)6%2AOp; zoiks8zMwYE$3k%|w^&x7K0XR!g&iMhHW43tO3D=4u+-EInOKLB$LPY1Qj!2=ha&xP ztaq&*X*!sTkf#cP)u|v?P+}HIWKg|^Sm9-87MM9D3ecm zJYlle=pcl0vAj-b$dI?hfl*?z>5DG2Vg>34R?$N!(BGw)VCyiR_9y z{LGO;5Ju9)QpTX+jve}`*upQc$V|kk5|T@SFx=GoqdYpPFrt1arvEhmVzc-OqSQS7 z>1Qt+(%Saj-N1+~W;N1leBv3Zp#n-&-A(5`vkRnos7x6Ek7V7I0R z5|%50<~Hf&LZ7DPzuEyR2V+ZMMR@DK1plTpQBi*ViIQOH_TAVB8fVhq@`zdMUFCL8 zy5=AD?`Bcu2=lI0L_rz{PNH2Dr)N@fE?K6@Hh{ng30O zDLKo()UZrAviAt@X^HcKXIYth`HEgolld5HobDc0QwXAxpKbkhR~Q3)qJjWiP@zG^iK8~3d`(Ue9J$P$;=O8S+mL#`%BGlspW~?kiarpHYL7T#m7PQzqWhgsQnU zK>oRex@Kyi-DaVb%Sn7jZ_!aYzcgg|!)Y*U;m-6aN-7N;c^I|tl+jFgsI2kot!FrQ z^Ma1%{j5sbH+Z`ci70%jz7H?y15Y72Bo1ktiCo6FYOWpoGSyUY)SaxJ)od!pZmuGw z4NA3$)B)!#>aE8mf?55IU>a(2K0$Q&UT5J81+vG)O!nKh=P5{~7~7sKit~?be)#AU zYPH1x7xFs*GN~uS#@%#k7kM_IjO?5wmFux$k|2NaDFw5N>%qeKk^*ThJ%@_q+kh}5 z=+0PyER}F-gZaZ3O!BXHTUVea5&J;2U%APMO#+n@2K}|&gXPM_Mu5>9vL_8j(mlhe zi&hw${%H&r1=^M5OTTwsvA|cKtx{^#lEUTd+I>3^>qGM2RB_Y}B5mjsB?fs%A;3sI z03rS|<5!#(v!+(pz@nj%MU$+R;>Xn2sJw%5&H)n42DY3kw@XY773sm(mH+6ht8l<^ zAt5sC^4+sEQVDIGiS)et;9j17=b4n4?&YbwyX`e|hkz66qguLCEUiTH(Z6U&t{-+K zwhmvwM?;4a_YDSro z03W3P9`@xAYC9F2Clt2#j=O6a@bl=ih5(*>%CRt6?)${2Eq@T&^4RWxv?)#{>cy3p zH&X7egKK3>06$^sIPPkp zuJp1R&EUpH{jR||TXYyaj#&4{PP^zcqnZi{43d35v!+m@;a3k7#7X3-Ngg1fYE0?}D-?024buHsG!&4wy zrFJVb$4S(bwL3aSrgUOgXw`U9Ml&rykf9V9_4Zka{gSK5CIzmR-8jxxZ328CDRNE>K4ra% zNE$>c3l3%O`MV!KtGG9^sB@u3XETRhPNfm9WMXBjV}$p- z?-0irMr8~iJO^vz zbmunfjP8?D5$aV?6da3lgUfpwveM}bSwbF=zJ?#2yKg7`!F)n-bQ?H?e6srak5!#)d`4XDe>S~ic*0+#4= zL3++_VFpA03aFDXJA{0mJy?w&vq?jWNaqco9FqjVS7`+Nrgduxz=K zBE83}qzf@!x}p%0LPn?L_R89A+Idd(BRcw11X2gq`^Wxe!Y=~H92BjmYOX_0$K;jE z34&r19b)%S^~8a%_t!J{$gmxQ0#keh5_LU=D}_cV93o#2aM!=*t)@c0PRqQwZ)_$0 zsLc-F(V(X+*%kq9x|I%mBSVpFY$99i($BXTlafaHcgX50v-?nmD3-{r14 z${Zkvj+xUWO&P4~$V_dONS~A18q&=6mU%Hh-z9HDz5#tQZ7ig*}@7Z7eC~M*7+${d;;308@z60A+omwIC!oV zXUaY0GkbtO%}4UpI{h8H2^=3Cyd8|9e8#EP8;RnS1H1#xd@S23GyzVI)Eor%tNJ%;@f zj5uVfuQBw_*}nBwOYzHLw}zU|Jgg+T$?Mv{&Br|xLsMC0_0rkn@^}(Z*`poFO{CDM zo^y+P!QQ-$Vlpz0Exi8F_nS?8b0jR5>)8~#@GLP20~CVqQf_(bh*7VOeGIWD*^I6; zh7mvr&04)QQ~W2H(cck2@dJ5n0k zjWF4bhj4>41UY(N`^uRDJ&XIB!oiDoRCa|Miop;YG@P&MLYLHkWqs3vL(fd?8wbZi zoDP^zO}F`X#P`MVxQIR9akNbaFG zk-Jn+ol+T3N@((Rv?8qc2{A?GRORv^(q1@jaWeX&EjZ=~6|NpjeT~X0!)s|`s0^q$ z>HEmW`zLeCES_msr1a0*+hdRCJ1D_0M(UI>kuW4HqQ;;-cHW<3?L9_WzMq{7lc*u1 z;`E*y%xG+Xrl{Go-I-EI&K0yAH^Xce)el6hw0qfOC|k26@HAsET%wwH-q9Y45xh8wgiTpTZ#6)>F6H*Uhy7rqh*Ki?dQrNpF>28Zh^byXA zT%EOJf%IXN^O&c_W1EfD`0d7C%b@$FgKbuef@T=I?KU8__7!m&>`g#hhy;vGzp)SF zO-_$@TCGgD`Ofs+NffG=bSXSgJ&Hzcz$9Nc{<~DAGn7`N5P%?_F6Cw}*Cl~NnL>0q zY^YkOWnGMz@`ig;qCRxW<@;G&NJootV-%{l)?oYU<7fm9CI6htgr5@*X4Tw++oH`; z1b_0?j7+}dTJ7UA&MK@EOAbiEhYPQvEj^*Dy}^0#4-ag32pT_Yk~z3}g)h6jMO|Z@ zYX}{YOQd;&aO2mOLmF|2sxsvF&M53#%9~{{S5zFJmmvsPoXnK?pMWTX$49HI5SqOR zd*$UD?SW=CnOPyP8Md4n(U>pHX|3>H|1bc;(D2gmdYDnpDp$SM8i9Os+b9gB0SEYF zLD+OvjV(C&Q%5`#jJvfFUJto&X)Ggbq4e4^-;`8vVq&>ANNO!Jy`*YUiMp$>`gMr^iYus&$34Q!ShoETu zNnB1x3+Oe%bu5O(yyj5Ht%7IpIXxBndh{%Uc2L=SM^s~n$0F4<|6!ig6w=(s0i>t0 zYL5ylI~Qda`pHY|0aYJ+>->btDR}uM{y~hO=s(z#n&Bdhf2`Nue3_ZjX^t3dy6D#| zAgcr$P|xyUQ39|CIXsU6lb4VL+Ic`@L!^xx$~08`zJy_gqaTh8k%r1fTJRgK_6)_H z^tdMvVj)u%^2!RN^MTC$+@7~piELyT;pXP5^6HJMlinZoi^akEr`#K4SqLh!0lLFk zM1&Cp@7W?-dvW^7W}Ep+&PDTqegBt zy*G1yONxEg`<%%Z}?ycVBt-79l>S_UTio9+uQ?;Be!yfu7%_**`IL@&Aa zC|1qURo(=`x3QYk+T@Y1V-x;S6i0Xcy-=#Ev$XTaCg+;e(%XsShB`*@X_buO=t?OW8% zQz>7`UW-Wvjq=LM!C{G8oB2-MM(*{_B3?l>fWN)u;XxtaH^37PSAL}0qb;qiuWED1 zS5ZuhQWz5?A2_t&Tk`C)4*kbh@d9+6I);y|^KCRbH1crT#6=tB{Ho>HSwKUg7Ln=T z8knd{-|wGu`7u(RE!7ekk8!TkyMEq0-XeokJua~AtSdzQlhvVkU*Kv$UCRcfJ_m}M ztm$3zWm*_3$6MjQorQ25Y|X73V%Zj1Y-6cc>1-9);-QDdc#Kt1Bd&E&>;61UyQ3-T zNZd6T!6AAHRASA5CZWS$80Wa|tD1=q@<8I5<~@aAxnuqj*z*-6Tr=3uR^tBS_L1k& z+2ojsQMT`2#^if<|}VgLK|&U zyOK{D>ZIDe=cc1`I*w|g_nm4Csg2umTS$wUpM9QEY7Goc}p4l8y z1=+2nR6~dX!)B+IChzjlj21|jI{1*^)9nP)YF=rAr4>uk^A%y!7!OEVWvR+E#JLCJ zVG5yT(I1Yk+QW8+)1y0unrRmkk^oJLA!WzNq?V&DZT-@pg3D*&{C&;QcVGCSjHm*Vt<+({IkZ&<~Mo^GRyh&T&7LT(UP8F%xn+_ z4W>&zwpay{RSX9qWcdqV?b7oa*sU?ig~5WWqu61b~h=Edn29 z=+@kF0u%R=6uITas2h2k0nF*}b4C>c|qWjSf0vd1Q=MI(9Gf$iBKQ@}w&Z1cSy> zZ1-gWX|mW*&B;LgaTF4%>Pj*nFK{URep&DNaLUwP{z-VON1_qA6uzm{$9!G1la)WS z!dR!S4B0g}YU+}{F~s+4H8gjX?b)@%4~g<3e0$~yjY3_$fEPjz04Rswn}4e7)KqdhHruo7dTtoa1`Hy!Va1Vvt*Jo#9= zK4*s$!4N)AF-zqzSxz*Hv%H&0^u7v_drB$cO+Eowem#4BIYi@)ESW8*P(-t#3dE`e zUkHBc#dHxY7%}$)K(dUL%xySlRf>u9S+Gxt{0V@ zidXZBLFtsdAESlal~m-%i0?2%fRWLsF?xG|!wCKByS~X1f_);v#4#72k^&7F0*Ia-gEX6mi&ahv@s=;$6sW+A z&!NtrE6zy`R)$u3>8sb86)rGtC+N{PJpFJLE4xRtG~R@Y9W`$aP~L$UNf5x zCEpaDlyyg35uIbJ!uXoc;@ZYzXyN%|$z7!uHRh5*I;^OIPF8PEop$oCa^Cx3D+PFV z8zg1Kzy(LkRO&5Zu3EpKx}hz-mxHr`I+%TNJKy%7J8D&b_P9aMY)nolXluyFXxzgB zD?(gX-he#T+CpK&gKu%=~cn0}>{Y&?a`H|9L@^ z=i?98f34i(>fFruJ_Flb1^6r`68)}RBNP0caSal0d z0Ja1@F~ztC|7$KylzAd;UN46$LHLr|4#Oi8Syw7ee5R`RqW=MYK!Lv_GK4f;UTSoC zh~N(tZ>#*o(GQvunYkHtxvR_1=d8sT zXq(TZc0JQZGfFMIXsd1{-T+70HXi*&$q9hrKl*>oCuL|m_qlK2E73P=2vdH6wM*W= z##*H1*k{7Tg=7F*E;}-uQv=Z$2%~%@`3?7UsE{XAed*6AV3$78A3psaz(HwZuy`g% zo<+Qptzk+hF55grC@WT66e8)E^a< zk?+>5GR9nLMvCl^@nGV)Hl=n#H7Uty^{#((^u+=fR3~Jfdwg<^8i?bsAikqUP{!ML zd@XXAVrFf^(j3biBMzg=9AV+f$(q6_eA74IiA<>NHcGMi3fDNov1$UyIU%7z>lR?q zp|gdG5J1%rO^^hfh~@j(>Y6UdO=?Do!!){rP9~g#k$D~D#-%W`RMsUsLR$LF?9xkH5e#>6r1vtrV%Ye4O>%^D#@~u{-Nl-B# zc>Ugmsdzszx3XJl3BGQ!K;ZP%XyYx2LbI71=R=^Cd8irv1tWY0@g<+kJBY`;QlC?6 z-Z+S@LSsjh)52ZA*Y?Ztl4!_s^*Vp*

    0wa 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 HCD4BWZb%kf delta 276966 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 z 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%0D)RB-A3CM?FHyIVE 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

    tY8k99qaFlu~6?0;>eICH*24InFih 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 From d33a4b7500f999d59e37fdef7cc97bee05a3cc89 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 1 Mar 2024 10:13:03 +0100 Subject: [PATCH 46/75] Add limitations and constraints --- Makefile | 1 + README.md | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/Makefile b/Makefile index 0373f13..082907d 100644 --- a/Makefile +++ b/Makefile @@ -122,6 +122,7 @@ DISABLE_STANDARD_WEBUSB = 1 DEFINES += CUSTOM_IO_APDU_BUFFER_SIZE=\(255+5+64\) DEFINES += HAVE_USB_CLASS_CCID DEFINES += HAVE_RSA +# Watchdog issue causing the device reset with long prime number computation # DEFINES += WITH_SUPPORT_RSA4096 ifeq ($(TARGET_NAME),TARGET_NANOS) diff --git a/README.md b/README.md index afa9dfc..7e348e7 100644 --- a/README.md +++ b/README.md @@ -321,3 +321,11 @@ It outputs 3 artifacts: - `compiled_app_binaries` within binary files of the build process for each device - `code-coverage` within HTML details of code coverage + +## Known limitations + +Today, the current App has some known limitations. + +- RSA4096 is disabled, because of an issue with the watchdog, resetting the device + during long prime number operation. +- Using Ed25519 template, the decrypt doesn't output a correct result. From 4bfe79cd94b597ea4d364a879b1f35629bca3e76 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 1 Mar 2024 16:13:21 +0100 Subject: [PATCH 47/75] Fix missing elements in backup / restore --- pytools/gpgapp/gpgcard.py | 44 +++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/pytools/gpgapp/gpgcard.py b/pytools/gpgapp/gpgcard.py index 0774288..665a353 100644 --- a/pytools/gpgapp/gpgcard.py +++ b/pytools/gpgapp/gpgcard.py @@ -330,7 +330,7 @@ def backup(self, file_name: str) -> None: self.get_all() with open(file_name, mode="w+b") as f: pickle.dump( - (self.data.AID, self.data.PW_status, self.data.rsa_pub_exp, + (self.data.AID, self.data.PW_status, self.data.rsa_pub_exp, self.data.digital_counter, self.data.private_01, self.data.private_02, self.data.private_03, self.data.private_04, self.data.name, self.data.login, self.data.salutation, self.data.url, self.data.lang, @@ -351,7 +351,7 @@ def restore(self, file_name: str) -> None: """ with open(file_name, mode="r+b") as f: - (self.data.AID, self.data.PW_status, self.data.rsa_pub_exp, + (self.data.AID, self.data.PW_status, self.data.rsa_pub_exp, self.data.digital_counter, self.data.private_01, self.data.private_02, self.data.private_03, self.data.private_04, self.data.name, self.data.login, self.data.salutation, self.data.url, self.data.lang, self.data.sig.key, self.data.sig.uif, self.data.sig.attribute, self.data.sig.date, @@ -373,7 +373,11 @@ def restore(self, file_name: str) -> None: self._put_data(DataObject.DO_LOGIN, self.data.login.encode("utf-8")) self._put_data(DataObject.DO_CARD_LANG, self.data.lang.encode("utf-8")) self._put_data(DataObject.DO_URL, self.data.url.encode("utf-8")) - self._put_data(DataObject.DO_CARD_SALUTATION, bytes.fromhex(USER_SALUTATION[self.data.salutation])) + if len(self.data.salutation) == 0: + self._put_data(DataObject.DO_CARD_SALUTATION, b'\x30') + else: + self._put_data(DataObject.DO_CARD_SALUTATION, + bytes.fromhex(USER_SALUTATION[self.data.salutation])) self._put_data(DataObject.DO_SIG_ATTR, self.data.sig.attribute) self._put_data(DataObject.DO_DEC_ATTR, self.data.dec.attribute) @@ -384,7 +388,35 @@ def restore(self, file_name: str) -> None: self._put_data(DataObject.DO_UIF_AUT, self.data.aut.uif.to_bytes(2, "little")) self._put_data(DataObject.DO_SIG_COUNT, self.data.digital_counter.to_bytes(4, "big")) - self._put_data(DataObject.CMD_RSA_EXP, self.data.rsa_pub_exp.to_bytes(4, "big")) + self._put_data(DataObject.CMD_RSA_EXP, self.data.rsa_pub_exp.to_bytes(4, "little")) + + self._put_data(DataObject.DO_CERT, self.data.aut.cert.encode("utf-8")) + self._put_data(DataObject.DO_CERT, self.data.dec.cert.encode("utf-8")) + self._put_data(DataObject.DO_CERT, self.data.sig.cert.encode("utf-8")) + + self._put_data(DataObject.DO_CA_FINGERPRINT_WR_SIG, self.data.sig.ca_fingerprint) + self._put_data(DataObject.DO_FINGERPRINT_WR_SIG, self.data.sig.fingerprint) + date = str(self.data.sig.date) + dt = datetime.strptime(date, "%Y-%m-%d %H:%M:%S").replace(tzinfo=timezone.utc) + bdate = int(dt.timestamp()).to_bytes(4, "big") + self._put_data(DataObject.DO_DATES_WR_SIG, bdate) + self._put_data(DataObject.DO_SIG_KEY, self.data.sig.key) + + self._put_data(DataObject.DO_CA_FINGERPRINT_WR_DEC, self.data.dec.ca_fingerprint) + self._put_data(DataObject.DO_FINGERPRINT_WR_DEC, self.data.dec.fingerprint) + date = str(self.data.dec.date) + dt = datetime.strptime(date, "%Y-%m-%d %H:%M:%S").replace(tzinfo=timezone.utc) + bdate = int(dt.timestamp()).to_bytes(4, "big") + self._put_data(DataObject.DO_DATES_WR_DEC, bdate) + self._put_data(DataObject.DO_DEC_KEY, self.data.dec.key) + + self._put_data(DataObject.DO_CA_FINGERPRINT_WR_AUT, self.data.aut.ca_fingerprint) + self._put_data(DataObject.DO_FINGERPRINT_WR_AUT, self.data.aut.fingerprint) + date = str(self.data.aut.date) + dt = datetime.strptime(date, "%Y-%m-%d %H:%M:%S").replace(tzinfo=timezone.utc) + bdate = int(dt.timestamp()).to_bytes(4, "big") + self._put_data(DataObject.DO_DATES_WR_AUT, bdate) + self._put_data(DataObject.DO_AUT_KEY, self.data.aut.key) def export_pub_key(self, pubkey: dict, file_name: str) -> None: @@ -810,13 +842,13 @@ def get_rsa_pub_exp(self) -> int: return self.data.rsa_pub_exp def get_key_cert(self, key: str) -> str: - """Get key fingerprint + """Get key Certificate Args: key (str): Key type (SIG, DC, AUT) Return: - Key Fingerprint + Key Certificate """ return self._get_key_object(key).cert From 18152cacdbbd8b1edfc3a28c1f361ddcf6407b21 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 1 Mar 2024 16:25:05 +0100 Subject: [PATCH 48/75] Update doc for Backup/Restore --- doc/user/app-openpgp.pdf | Bin 1218644 -> 1217826 bytes doc/user/app-openpgp.rst | 75 ++++++++++++++++++++++----------------- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/doc/user/app-openpgp.pdf b/doc/user/app-openpgp.pdf index c35c99c7d5980240c73716d4c6c678a2afdf60e3..57c94c87585e9499c35383b91e26c7ef049370ef 100644 GIT binary patch delta 88343 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

    Xgof8V3D9`jiK4F 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%0Ae5G(VP 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 GPeuygoOXi% diff --git a/doc/user/app-openpgp.rst b/doc/user/app-openpgp.rst index 73e1c96..b1a5f13 100644 --- a/doc/user/app-openpgp.rst +++ b/doc/user/app-openpgp.rst @@ -310,9 +310,9 @@ Seed mode When generating new keys on the device, those keys can be generated randomly or in a deterministic way. The deterministic way is specified in [GPGADD]_. The current mode is displayed in the first sub menu. -To activate the seeded mode select *ON*, to deactivate the seeded mode select *OFF*. +To activate the seed mode select *ON*, to deactivate the seed mode select *OFF*. -When the application starts, the seeded mode is always set to *ON* +When the application starts, the seed mode is always set to *ON* PIN mode ~~~~~~~~ @@ -1059,6 +1059,9 @@ The backup/restore tool is located in ``pytools`` directory. See `Tools` later in this document for the tools details and usage. +Note: The keys backup will work *only* if the SEED Mode is enabled! + + Restore without backup ~~~~~~~~~~~~~~~~~~~~~~ @@ -1375,41 +1378,12 @@ Tools There are 2 tools provided: -- ``backup.py``: Backup and Restore of the configuration - ``gpgcli.py``: General test tool +- ``backup.py``: Backup and Restore of the configuration If you encounter an error when performing the backup/restore, reload your scdaemon with ``gpgconf --reload scdaemon`` -Backup tool ------------ - -The tool usage is the following: - - | ``$ ./backup.py --help`` - | ``usage: backup.py [-h] [--reader READER] [--slot {1,2,3}] [--pinpad] --adm-pin PIN --user-pin PIN [--restore] [--file FILE]`` - | - | ``Backup/Restore OpenPGP App configuration`` - | - | ``options:`` - | ``-h, --help show this help message and exit`` - | ``--reader READER PCSC reader name (default is 'Ledger')`` - | ``--slot {1,2,3} Select slot (1 to 3)`` - | ``--pinpad PIN validation will be delegated to pinpad`` - | ``--adm-pin PIN Admin PIN (if pinpad not used)`` - | ``--user-pin PIN User PIN (if pinpad not used)`` - | ``--restore Perform a Restore instead of Backup`` - | ``--file FILE Backup/Restore file (default is 'gpg_backup')`` - | - | ``Keys restore is only possible with SEED mode...`` - -To perform a backup, simply use the tool like this: - - | ``$ ./backup.py --adm-pin 12345678 --user-pin 123456`` - | ``Connect to card 'Ledger'...`` - | ``Configuration saved in file 'gpg_backup'.`` - - Test command line tool ---------------------- @@ -1482,7 +1456,7 @@ Sample output to get Card information: | ``- Manufacturer : 2C97`` | ``- Serial : E1A67CBF`` | ``=============== Historical Bytes ===============`` - | ``- historical bytes : 0031c573c001800790000000000000`` + | ``- historical bytes : 0031c573c001800000000000059000`` | ``=============== Max Extended Length ===============`` | ``- Command : 254`` | ``- Response : 254`` @@ -1568,6 +1542,41 @@ Sample output to get Card information: | ``* Private key size: 1040`` +Backup tool +----------- + +The tool usage is the following: + + | ``$ ./backup.py --help`` + | ``usage: backup.py [-h] [--reader READER] [--slot {1,2,3}] [--pinpad] --adm-pin PIN --user-pin PIN [--restore] [--file FILE]`` + | + | ``Backup/Restore OpenPGP App configuration`` + | + | ``options:`` + | ``-h, --help show this help message and exit`` + | ``--reader READER PCSC reader name (default is 'Ledger')`` + | ``--slot {1,2,3} Select slot (1 to 3)`` + | ``--pinpad PIN validation will be delegated to pinpad`` + | ``--adm-pin PIN Admin PIN (if pinpad not used)`` + | ``--user-pin PIN User PIN (if pinpad not used)`` + | ``--restore Perform a Restore instead of Backup`` + | ``--file FILE Backup/Restore file (default is 'gpg_backup')`` + | + | ``Keys restore is only possible with SEED mode...`` + +To perform a backup, simply use the tool like this: + + | ``$ ./backup.py --adm-pin 12345678 --user-pin 123456`` + | ``Connect to card 'Ledger'...`` + | ``Configuration saved in file 'gpg_backup'.`` + +Once the configuration is restored, just use the previous tool to re-generate the seeded keys: + + | ``./gpgcli.py --user-pin 123456 --adm-pin 12345678 --seed-key`` + | ``Connect to card 'Ledger'...`` + | ``Verify PINs...`` + | ``Get card info...`` + Annexes ======= From 9f917865c4a64b99f6ad43fd4832fa4ae28e9129 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 1 Mar 2024 18:39:40 +0100 Subject: [PATCH 49/75] Add curve secp256K1 --- README.md | 4 ++-- doc/user/app-openpgp.pdf | Bin 1217826 -> 1217897 bytes doc/user/app-openpgp.rst | 5 +++-- src/gpg_init.c | 37 +++++++++++++++---------------------- 4 files changed, 20 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 7e348e7..5c5a959 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ This specification is available in *doc* directory and at Ol;e>ZQJ<%x4y;Q+^SorepSz+7ri)j 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 Rh~Zc{IpHWM#1$pr{y%AxYO4SM diff --git a/doc/user/app-openpgp.rst b/doc/user/app-openpgp.rst index b1a5f13..d665220 100644 --- a/doc/user/app-openpgp.rst +++ b/doc/user/app-openpgp.rst @@ -51,9 +51,9 @@ This specification is available in doc directory at [G10CODE]_. The application supports: - RSA with key up to 3072 bits -- ECDSA with secp256R1 +- ECDSA with secp256R1 and secp256K1 - EDDSA with Ed25519 curve -- ECDH with secp256R1 and curve25519 curves +- ECDH with secp256R1, secp256K1 and curve25519 curves This release has known missing parts (see also [GPGADD]_): @@ -290,6 +290,7 @@ This 3 commands fix, in that order, the template for Signature, Decryption, Auth Supported curve name are: - secp256k1 with tag 19 +- secp256r1 with tag 19 - nistp256 with tag 19 - cv25519 (only for key 2) - ed25519 with tag 22 (only for key 1 and 3) diff --git a/src/gpg_init.c b/src/gpg_init.c index 1cd4185..45b3482 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -40,12 +40,9 @@ const unsigned char C_OID_SECP384R1[5] = { const unsigned char C_OID_SECP521R1[5] = { 0x2B, 0x81, 0x04, 0x00, 0x23 }; - -//secp256k1: 1.3.132.0.10 -const unsigned char C_OID_SECP256K1[5] = { - 0x2B, 0x81, 0x04, 0x00, 0x0A -}; */ +// secp256k1: 1.3.132.0.10 +const unsigned char C_OID_SECP256K1[5] = {0x2B, 0x81, 0x04, 0x00, 0x0A}; /* //brainpool 256t1: 1.3.36.3.3.2.8.1.1.8 @@ -97,20 +94,23 @@ unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len) { if ((len == sizeof(C_OID_SECP256R1)) && (memcmp(oid, C_OID_SECP256R1, len) == 0)) { return CX_CURVE_SECP256R1; } - /* - if ( (len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len)==0) ) { - return CX_CURVE_SECP256K1; - } + if ((len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len) == 0)) { + return CX_CURVE_SECP256K1; + } + /* if ( (len == sizeof(C_OID_SECP384R1)) && (memcmp(oid, C_OID_SECP384R1, len)==0) ) { return CX_CURVE_SECP384R1; } if ( (len == sizeof(C_OID_SECP521R1)) && (memcmp(oid, C_OID_SECP521R1, len)==0) ) { return CX_CURVE_SECP521R1; } - */ + */ /* + if ( (len == sizeof(C_OID_BRAINPOOL256T1)) && (memcmp(oid, C_OID_BRAINPOOL256T1, len)==0) ) { + return CX_CURVE_BrainPoolP256T1; + } if ( (len == sizeof(C_OID_BRAINPOOL256R1)) && (memcmp(oid, C_OID_BRAINPOOL256R1, len)==0) ) { return CX_CURVE_BrainPoolP256R1; } @@ -120,7 +120,7 @@ unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len) { if ( (len == sizeof(C_OID_BRAINPOOL512R1)) && (memcmp(oid, C_OID_BRAINPOOL512R1, len)==0) ) { return CX_CURVE_BrainPoolP512R1; } - */ + */ if ((len == sizeof(C_OID_Ed25519)) && (memcmp(oid, C_OID_Ed25519, len) == 0)) { return CX_CURVE_Ed25519; } @@ -129,14 +129,6 @@ unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len) { return CX_CURVE_Curve25519; } - /* - if ( (len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len)==0) ) { - return CX_CURVE_256K1; - } - if ( (len == sizeof(C_OID_BRAINPOOL256T1)) && (memcmp(oid, C_OID_BRAINPOOL256T1, len)==0) ) { - return CX_CURVE_BrainPoolP256T1; - } - */ return CX_CURVE_NONE; } @@ -146,11 +138,11 @@ unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len) { *len = sizeof(C_OID_SECP256R1); return (unsigned char *) PIC(C_OID_SECP256R1); - /* case CX_CURVE_SECP256K1: - *len = sizeof(C_OID_SECP256K1); - return (unsigned char*)PIC(C_OID_SECP256K1); + *len = sizeof(C_OID_SECP256K1); + return (unsigned char *) PIC(C_OID_SECP256K1); + /* case CX_CURVE_SECP384R1: *len = sizeof(C_OID_SECP384R1); return (unsigned char*)PIC(C_OID_SECP384R1); @@ -188,6 +180,7 @@ unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len) { unsigned int gpg_curve2domainlen(unsigned int cv) { switch (cv) { + case CX_CURVE_SECP256K1: case CX_CURVE_SECP256R1: case CX_CURVE_Ed25519: case CX_CURVE_Curve25519: From c252ca069becd2f139d7b03cf8d7d0669527cce2 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 14:49:15 +0100 Subject: [PATCH 50/75] Update version to 2.2.0 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 082907d..b867aef 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ APPNAME = OpenPGP # Application version APPVERSION_M = 2 -APPVERSION_N = 1 +APPVERSION_N = 2 APPVERSION_P = 0 APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" From 1d16c87fc86f8210c0124051b1ddfb4c7264eaa9 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 11:45:43 +0100 Subject: [PATCH 51/75] Cleanup unused fields --- src/gpg_types.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gpg_types.h b/src/gpg_types.h index 41e0dd8..58a1a7d 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -287,9 +287,6 @@ struct gpg_v_state_s { #ifdef HAVE_NBGL char line[112]; unsigned int ux_step; - unsigned int keypadIndex; - unsigned int hiddenDigitsIndex; - unsigned char pinLen; nbgl_layout_t *layoutCtx; #endif From 6983d8cbb859543976ccc7029f3336851c037599 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 11:48:12 +0100 Subject: [PATCH 52/75] Fix screen message buffer overwrite --- src/gpg_ux_nanos.c | 2 +- src/gpg_ux_nanox.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 9dbdc7f..a2b9230 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -425,7 +425,7 @@ static void validate_pin() { sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, EMPTY, ui_menu_main_display, 0); + ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display, 0); return; } offset = 1 + G_gpg_vstate.work.io_buffer[0]; diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index efdaf45..efa42fd 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -329,11 +329,11 @@ static void validate_pin() { gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); if (sw != SW_OK) { - snprintf(G_gpg_vstate.menu, - sizeof(G_gpg_vstate.menu), + snprintf(G_gpg_vstate.ux_buff1, + sizeof(G_gpg_vstate.ux_buff1), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, G_gpg_vstate.menu); + ui_info(WRONG_PIN, G_gpg_vstate.ux_buff1); } else { ui_menu_main_display(0); } @@ -354,11 +354,11 @@ static void validate_pin() { gpg_io_discard(1); gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); gpg_io_do(IO_RETURN_AFTER_TX); - snprintf(G_gpg_vstate.menu, - sizeof(G_gpg_vstate.menu), + snprintf(G_gpg_vstate.ux_buff1, + sizeof(G_gpg_vstate.ux_buff1), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, EMPTY); + ui_info(WRONG_PIN, G_gpg_vstate.ux_buff1); return; } offset = 1 + G_gpg_vstate.work.io_buffer[0]; From c3c0fde6fcdbb8327d83fc432dba1f5114e303d5 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 11:48:49 +0100 Subject: [PATCH 53/75] Fix Security Audit issue OPGP-#01 - Fix buffer overflow in pinentry buffer - Add dedicated variable to manage the pin length --- src/gpg_types.h | 3 ++- src/gpg_ux_nanos.c | 30 +++++++++++++----------------- src/gpg_ux_nanox.c | 30 +++++++++++++----------------- 3 files changed, 28 insertions(+), 35 deletions(-) diff --git a/src/gpg_types.h b/src/gpg_types.h index 58a1a7d..b9e4e64 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -270,7 +270,8 @@ struct gpg_v_state_s { /* ux menus */ char menu[112]; - unsigned char ux_pinentry[12]; + unsigned char ux_pinentry[GPG_MAX_PW_LENGTH]; + unsigned char ux_pinLen; unsigned int ux_key; unsigned int ux_type; diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index a2b9230..a03cde8 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -354,8 +354,7 @@ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { } } else if (element->component.userid == 2) { unsigned int i; - G_gpg_vstate.menu[0] = ' '; - for (i = 1; i < G_gpg_vstate.ux_pinentry[0]; i++) { + for (i = 0; i < G_gpg_vstate.ux_pinLen; i++) { G_gpg_vstate.menu[i] = '*'; } G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; @@ -372,8 +371,8 @@ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { void ui_menu_pinentry_display(unsigned int value) { if (value == 0) { memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); - G_gpg_vstate.ux_pinentry[0] = 1; - G_gpg_vstate.ux_pinentry[1] = 5; + G_gpg_vstate.ux_pinLen = 0; + G_gpg_vstate.ux_pinentry[0] = 5; } UX_DISPLAY(ui_pinentry_action, (void *) ui_pinentry_predisplay); } @@ -382,7 +381,7 @@ static void validate_pin() { unsigned int offset, len, sw = SW_UNKNOWN; gpg_pin_t *pin; - for (offset = 1; offset <= G_gpg_vstate.ux_pinentry[0]; offset++) { + for (offset = 0; offset <= G_gpg_vstate.ux_pinLen; offset++) { G_gpg_vstate.menu[offset] = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; } @@ -390,8 +389,8 @@ static void validate_pin() { pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); sw = gpg_pin_check(pin, G_gpg_vstate.io_p2, - (unsigned char *) (G_gpg_vstate.menu + 1), - G_gpg_vstate.ux_pinentry[0]); + (unsigned char *) G_gpg_vstate.menu, + G_gpg_vstate.ux_pinLen); gpg_io_discard(1); gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); @@ -408,8 +407,8 @@ static void validate_pin() { if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { if (G_gpg_vstate.io_p1 <= 2) { - gpg_io_insert_u8(G_gpg_vstate.ux_pinentry[0]); - gpg_io_insert((unsigned char *) (G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); + gpg_io_insert_u8(G_gpg_vstate.ux_pinLen); + gpg_io_insert((unsigned char *) G_gpg_vstate.menu, G_gpg_vstate.ux_pinLen); G_gpg_vstate.io_p1++; } if (G_gpg_vstate.io_p1 == 3) { @@ -455,7 +454,7 @@ static void validate_pin() { unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter) { UNUSED(button_mask_counter); - unsigned int offset = G_gpg_vstate.ux_pinentry[0]; + unsigned int offset = G_gpg_vstate.ux_pinLen; char digit; switch (button_mask) { @@ -480,9 +479,8 @@ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int bu digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; // next digit if ((digit >= '0') && (digit <= '9')) { - offset++; - G_gpg_vstate.ux_pinentry[0] = offset; - if (offset == GPG_MAX_PW_LENGTH + 1) { + G_gpg_vstate.ux_pinLen = ++offset; + if (offset == GPG_MAX_PW_LENGTH) { validate_pin(); } else { G_gpg_vstate.ux_pinentry[offset] = 5; @@ -491,15 +489,13 @@ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int bu } // cancel digit else if (digit == '<') { - if (offset > 1) { - offset--; - G_gpg_vstate.ux_pinentry[0] = offset; + if (offset > 0) { + G_gpg_vstate.ux_pinLen--; } ui_menu_pinentry_display(1); } // validate pin else if (digit == 'V') { - G_gpg_vstate.ux_pinentry[0] = offset - 1; validate_pin(); } // cancel input without check diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index efa42fd..9cfb6be 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -287,8 +287,7 @@ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { } } else if (element->component.userid == 2) { unsigned int i; - G_gpg_vstate.menu[0] = ' '; - for (i = 1; i < G_gpg_vstate.ux_pinentry[0]; i++) { + for (i = 0; i < G_gpg_vstate.ux_pinLen; i++) { G_gpg_vstate.menu[i] = '*'; } G_gpg_vstate.menu[i] = C_pin_digit[G_gpg_vstate.ux_pinentry[i]]; @@ -305,8 +304,8 @@ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { void ui_menu_pinentry_display(unsigned int value) { if (value == 0) { memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); - G_gpg_vstate.ux_pinentry[0] = 1; - G_gpg_vstate.ux_pinentry[1] = 5; + G_gpg_vstate.ux_pinLen = 0; + G_gpg_vstate.ux_pinentry[0] = 5; } UX_DISPLAY(ui_pinentry_action, (void *) ui_pinentry_predisplay); } @@ -315,7 +314,7 @@ static void validate_pin() { unsigned int offset, len, sw = SW_UNKNOWN; gpg_pin_t *pin; - for (offset = 1; offset <= G_gpg_vstate.ux_pinentry[0]; offset++) { + for (offset = 0; offset <= G_gpg_vstate.ux_pinLen; offset++) { G_gpg_vstate.menu[offset] = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; } @@ -323,8 +322,8 @@ static void validate_pin() { pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); sw = gpg_pin_check(pin, G_gpg_vstate.io_p2, - (unsigned char *) (G_gpg_vstate.menu + 1), - G_gpg_vstate.ux_pinentry[0]); + (unsigned char *) G_gpg_vstate.menu, + G_gpg_vstate.ux_pinLen); gpg_io_discard(1); gpg_io_insert_u16(sw); gpg_io_do(IO_RETURN_AFTER_TX); @@ -341,8 +340,8 @@ static void validate_pin() { if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { if (G_gpg_vstate.io_p1 <= 2) { - gpg_io_insert_u8(G_gpg_vstate.ux_pinentry[0]); - gpg_io_insert((unsigned char *) (G_gpg_vstate.menu + 1), G_gpg_vstate.ux_pinentry[0]); + gpg_io_insert_u8(G_gpg_vstate.ux_pinLen); + gpg_io_insert((unsigned char *) G_gpg_vstate.menu, G_gpg_vstate.ux_pinLen); G_gpg_vstate.io_p1++; } if (G_gpg_vstate.io_p1 == 3) { @@ -388,7 +387,7 @@ static void validate_pin() { unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter) { UNUSED(button_mask_counter); - unsigned int offset = G_gpg_vstate.ux_pinentry[0]; + unsigned int offset = G_gpg_vstate.ux_pinLen; char digit; switch (button_mask) { @@ -413,9 +412,8 @@ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int bu digit = C_pin_digit[G_gpg_vstate.ux_pinentry[offset]]; // next digit if ((digit >= '0') && (digit <= '9')) { - offset++; - G_gpg_vstate.ux_pinentry[0] = offset; - if (offset == GPG_MAX_PW_LENGTH + 1) { + G_gpg_vstate.ux_pinLen = ++offset; + if (offset == GPG_MAX_PW_LENGTH) { validate_pin(); } else { G_gpg_vstate.ux_pinentry[offset] = 5; @@ -424,15 +422,13 @@ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int bu } // cancel digit else if (digit == '<') { - if (offset > 1) { - offset--; - G_gpg_vstate.ux_pinentry[0] = offset; + if (offset > 0) { + G_gpg_vstate.ux_pinLen--; } ui_menu_pinentry_display(1); } // validate pin else if (digit == 'V') { - G_gpg_vstate.ux_pinentry[0] = offset - 1; validate_pin(); } // cancel input without check From f3070bb886845ac08bccafa64dc3207ab4c9905b Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 12:00:00 +0100 Subject: [PATCH 54/75] Remove useless TODO comments --- src/gpg_dispatch.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index 847fc20..c5a5381 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -308,13 +308,11 @@ int gpg_dispatch() { } gpg_io_fetch_tl(&t, &l); if (t != 0x60) { - // TODO add l check sw = SW_WRONG_DATA; break; } gpg_io_fetch_tl(&t, &l); if (t != 0x5C) { - // TODO add l check sw = SW_WRONG_DATA; break; } From 710de03cadb477ab27389f391058309ba5284c93 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 12:08:46 +0100 Subject: [PATCH 55/75] Replace memset by explicit_bzero --- src/gpg_challenge.c | 2 +- src/gpg_data.c | 4 ++-- src/gpg_gen.c | 2 +- src/gpg_init.c | 4 ++-- src/gpg_io.c | 2 +- src/gpg_ux_nanos.c | 14 +++++++------- src/gpg_ux_nanox.c | 8 ++++---- src/gpg_ux_nbgl.c | 22 +++++++++++----------- 8 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/gpg_challenge.c b/src/gpg_challenge.c index a8327ee..4ad0889 100644 --- a/src/gpg_challenge.c +++ b/src/gpg_challenge.c @@ -43,7 +43,7 @@ int gpg_apdu_get_challenge() { unsigned int path[2]; unsigned char chain[32] = {0}; - memset(chain, 0, 32); + explicit_bzero(chain, 32); path[0] = 0x80475047; path[1] = 0x0F0F0F0F; CX_CHECK(os_derive_bip32_no_throw(CX_CURVE_SECP256K1, path, 2, Sr, chain)); diff --git a/src/gpg_data.c b/src/gpg_data.c index 6b24683..d795f2c 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -460,9 +460,9 @@ int gpg_apdu_put_data(unsigned int ref) { p = G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset; q = p + len_p; memmove(pq + ksz - len_p, p, len_p); - memset(pq, 0, ksz - len_p); + explicit_bzero(pq, ksz - len_p); memmove(pq + 2 * ksz - len_q, q, len_q); - memset(pq + ksz, 0, ksz - len_q); + explicit_bzero(pq + ksz, ksz - len_q); // regenerate RSA private key unsigned char _e[4]; diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 9c85e3f..052d3e1 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -27,7 +27,7 @@ int gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { unsigned char chain[32]; cx_err_t error = CX_INTERNAL_ERROR; - memset(chain, 0, 32); + explicit_bzero(chain, 32); path[0] = 0x80475047; path[1] = slot + 1; CX_CHECK(os_derive_bip32_no_throw(CX_CURVE_SECP256K1, path, 2, seed, chain)); diff --git a/src/gpg_init.c b/src/gpg_init.c index 45b3482..9bc1949 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -345,12 +345,12 @@ const unsigned char C_sha256_PW2[] = { /* ----------------------------------------------------------------------- */ void gpg_init() { - memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); + explicit_bzero(&G_gpg_vstate, sizeof(gpg_v_state_t)); // first init ? if (memcmp((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)) != 0) { gpg_install(STATE_ACTIVATE); nvm_write((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)); - memset(&G_gpg_vstate, 0, sizeof(gpg_v_state_t)); + explicit_bzero(&G_gpg_vstate, sizeof(gpg_v_state_t)); } // key conf diff --git a/src/gpg_io.c b/src/gpg_io.c index 0d08fee..5ec85ee 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -64,7 +64,7 @@ void gpg_io_discard(int clear) { } void gpg_io_clear() { - memset(G_gpg_vstate.work.io_buffer, 0, GPG_IO_BUFFER_LENGTH); + explicit_bzero(G_gpg_vstate.work.io_buffer, GPG_IO_BUFFER_LENGTH); } /* ----------------------------------------------------------------------- */ diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index a03cde8..1dfd081 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -40,13 +40,13 @@ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int bu /* ------------------------------- Helpers UX ------------------------------- */ void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { - memset(&G_gpg_vstate.ui_dogsays[0], 0, sizeof(ux_menu_entry_t)); + explicit_bzero(&G_gpg_vstate.ui_dogsays[0], sizeof(ux_menu_entry_t)); G_gpg_vstate.ui_dogsays[0].callback = menu_display; G_gpg_vstate.ui_dogsays[0].userid = value; G_gpg_vstate.ui_dogsays[0].line1 = msg1; G_gpg_vstate.ui_dogsays[0].line2 = msg2; - memset(&G_gpg_vstate.ui_dogsays[1], 0, sizeof(ux_menu_entry_t)); + explicit_bzero(&G_gpg_vstate.ui_dogsays[1], sizeof(ux_menu_entry_t)); UX_MENU_DISPLAY(0, G_gpg_vstate.ui_dogsays, NULL); }; @@ -101,7 +101,7 @@ void ui_menu_uifconfirm_display(unsigned int value) { } unsigned int ui_uifconfirm_predisplay(const bagl_element_t *element) { - memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + explicit_bzero(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)); switch (element->component.userid) { case 1: @@ -370,7 +370,7 @@ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { void ui_menu_pinentry_display(unsigned int value) { if (value == 0) { - memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + explicit_bzero(G_gpg_vstate.ux_pinentry, sizeof(G_gpg_vstate.ux_pinentry)); G_gpg_vstate.ux_pinLen = 0; G_gpg_vstate.ux_pinentry[0] = 5; } @@ -600,7 +600,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { const unsigned char *oid; unsigned int oid_len; - memset(&attributes, 0, sizeof(attributes)); + explicit_bzero(&attributes, sizeof(attributes)); switch (G_gpg_vstate.ux_type) { case 2048: case 3072: @@ -999,7 +999,7 @@ const ux_menu_entry_t ui_menu_main[] = { const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, bagl_element_t *element) { if (entry == &ui_menu_main[0]) { - memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + explicit_bzero(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)); if (element->component.userid == 0x21) { memmove(G_gpg_vstate.menu, (void *) (N_gpg_pstate->name.value), 12); if (G_gpg_vstate.menu[0] == 0) { @@ -1014,7 +1014,7 @@ const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, } if (element->component.userid == 0x22) { unsigned int serial = U4BE(G_gpg_vstate.kslot->serial, 0); - memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + explicit_bzero(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)); snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "ID: %x", serial); } if (G_gpg_vstate.menu[0] != 0) { diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 9cfb6be..97e14bd 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -303,7 +303,7 @@ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { void ui_menu_pinentry_display(unsigned int value) { if (value == 0) { - memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); + explicit_bzero(G_gpg_vstate.ux_pinentry, sizeof(G_gpg_vstate.ux_pinentry)); G_gpg_vstate.ux_pinLen = 0; G_gpg_vstate.ux_pinentry[0] = 5; } @@ -595,7 +595,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { const unsigned char *oid = NULL; unsigned int oid_len; - memset(&attributes, 0, sizeof(attributes)); + explicit_bzero(&attributes, sizeof(attributes)); switch (G_gpg_vstate.ux_type) { case 2048: case 3072: @@ -1205,7 +1205,7 @@ UX_FLOW(ux_flow_main, &ux_menu_main_5_step); void ui_menu_main_predisplay() { - memset(G_gpg_vstate.ux_buff1, 0, sizeof(G_gpg_vstate.ux_buff1)); + explicit_bzero(G_gpg_vstate.ux_buff1, sizeof(G_gpg_vstate.ux_buff1)); memmove(G_gpg_vstate.ux_buff1, (void *) (N_gpg_pstate->name.value), 20); if (G_gpg_vstate.ux_buff1[0] == 0) { memmove(G_gpg_vstate.ux_buff1, "", 9); @@ -1218,7 +1218,7 @@ void ui_menu_main_predisplay() { } unsigned int serial = U4BE(G_gpg_vstate.kslot->serial, 0); - memset(G_gpg_vstate.ux_buff2, 0, sizeof(G_gpg_vstate.ux_buff2)); + explicit_bzero(G_gpg_vstate.ux_buff2, sizeof(G_gpg_vstate.ux_buff2)); snprintf(G_gpg_vstate.ux_buff2, sizeof(G_gpg_vstate.ux_buff2), "ID: %x / %d", diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index b118995..371025c 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -67,7 +67,7 @@ static void ui_setting_header(const char* title, layoutDescription.modal = false; layoutCtx = nbgl_layoutGet(&layoutDescription); - memset(&bar, 0, sizeof(nbgl_layoutBar_t)); + explicit_bzero(&bar, sizeof(nbgl_layoutBar_t)); bar.text = PIC(title); bar.iconLeft = &C_leftArrow32px; bar.token = back_token; @@ -92,7 +92,7 @@ void ui_init(void) { char name[32]; unsigned int serial = U4BE(G_gpg_vstate.kslot->serial, 0); - memset(name, 0, sizeof(name)); + explicit_bzero(name, sizeof(name)); memmove(name, (void*) (N_gpg_pstate->name.value), 20); if (name[0] != 0) { for (int i = 0; i < 12; i++) { @@ -101,7 +101,7 @@ void ui_init(void) { } } } - memset(G_gpg_vstate.menu, 0, sizeof(G_gpg_vstate.menu)); + explicit_bzero(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)); snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s\nID: %x / %d", @@ -286,7 +286,7 @@ static void template_key_cb(int token, uint8_t index) { uint8_t key_type = index + FIRST_USER_TOKEN; if (token != TOKEN_TYPE_BACK) { - memset(&attributes, 0, sizeof(attributes)); + explicit_bzero(&attributes, sizeof(attributes)); switch (key_type) { case TOKEN_TYPE_RSA2048: case TOKEN_TYPE_RSA3072: @@ -396,7 +396,7 @@ static void ui_settings_template(void) { ui_setting_header("Keys templates", TOKEN_TEMPLATE_BACK, template_cb); for (i = 0; i < KEY_NB; i++) { - memset(&bar, 0, sizeof(nbgl_layoutBar_t)); + explicit_bzero(&bar, sizeof(nbgl_layoutBar_t)); switch (_getKeyType(TOKEN_TEMPLATE_SIG + i)) { case TOKEN_TYPE_RSA2048: bar.subText = PIC(LABEL_RSA2048); @@ -637,7 +637,7 @@ static void ui_settings_uif(void) { ui_setting_header("User Interaction Flags", TOKEN_UIF_BACK, uif_cb); if (G_gpg_vstate.kslot->sig.UIF[0] != 2) { - memset(&option, 0, sizeof(nbgl_layoutSwitch_t)); + explicit_bzero(&option, sizeof(nbgl_layoutSwitch_t)); option.initState = G_gpg_vstate.kslot->sig.UIF[0]; option.text = "UIF for Signature"; option.token = TOKEN_UIF_SIG; @@ -647,7 +647,7 @@ static void ui_settings_uif(void) { } if (G_gpg_vstate.kslot->dec.UIF[0] != 2) { - memset(&option, 0, sizeof(nbgl_layoutSwitch_t)); + explicit_bzero(&option, sizeof(nbgl_layoutSwitch_t)); option.initState = G_gpg_vstate.kslot->dec.UIF[0]; option.text = "UIF for Decryption"; option.token = TOKEN_UIF_DEC; @@ -657,7 +657,7 @@ static void ui_settings_uif(void) { } if (G_gpg_vstate.kslot->aut.UIF[0] != 2) { - memset(&option, 0, sizeof(nbgl_layoutSwitch_t)); + explicit_bzero(&option, sizeof(nbgl_layoutSwitch_t)); option.initState = G_gpg_vstate.kslot->aut.UIF[0]; option.text = "UIF for Authentication"; option.token = TOKEN_UIF_AUT; @@ -690,7 +690,7 @@ enum { static bool reset_nav_cb(uint8_t page, nbgl_pageContent_t* content) { UNUSED(page); - memset(content, 0, sizeof(nbgl_pageContent_t)); + explicit_bzero(content, sizeof(nbgl_pageContent_t)); content->type = INFO_LONG_PRESS; content->infoLongPress.text = "Reset the app to factory default?\nThis will delete ALL the keys!!!"; @@ -745,7 +745,7 @@ static bool settings_nav_cb(uint8_t page, nbgl_pageContent_t* content) { TOKEN_SETTINGS_PIN, TOKEN_SETTINGS_UIF, TOKEN_SETTINGS_RESET}; - memset(content, 0, sizeof(nbgl_pageContent_t)); + explicit_bzero(content, sizeof(nbgl_pageContent_t)); switch (page) { case SETTINGS_PAGE_INFO: content->type = INFOS_LIST; @@ -940,7 +940,7 @@ void ui_menu_pinentry_display(unsigned int value) { char line[10]; // Init the page title - memset(G_gpg_vstate.line, 0, sizeof(G_gpg_vstate.line)); + explicit_bzero(G_gpg_vstate.line, sizeof(G_gpg_vstate.line)); if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { switch (value) { case 0: From b4a5c236ea45ced7194ec0c673647f446cee04e9 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 12:13:50 +0100 Subject: [PATCH 56/75] Replace memmove by strlcpy --- src/gpg_ux_nanos.c | 2 +- src/gpg_ux_nanox.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 1dfd081..cc32264 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -1003,7 +1003,7 @@ const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, if (element->component.userid == 0x21) { memmove(G_gpg_vstate.menu, (void *) (N_gpg_pstate->name.value), 12); if (G_gpg_vstate.menu[0] == 0) { - memmove(G_gpg_vstate.menu, "", 9); + strlcpy(G_gpg_vstate.menu, "", 9); } else { for (int i = 0; i < 12; i++) { if (G_gpg_vstate.menu[i] == '<') { diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 97e14bd..7c9c348 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -1208,7 +1208,7 @@ void ui_menu_main_predisplay() { explicit_bzero(G_gpg_vstate.ux_buff1, sizeof(G_gpg_vstate.ux_buff1)); memmove(G_gpg_vstate.ux_buff1, (void *) (N_gpg_pstate->name.value), 20); if (G_gpg_vstate.ux_buff1[0] == 0) { - memmove(G_gpg_vstate.ux_buff1, "", 9); + strlcpy(G_gpg_vstate.ux_buff1, "", 9); } else { for (int i = 0; i < 12; i++) { if (G_gpg_vstate.ux_buff1[i] == '<') { From cc8de8eb97a014bddb9047039d04eb5c8f0a11cf Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 14:04:21 +0100 Subject: [PATCH 57/75] Clean magic numbers with define constants --- src/gpg_data.c | 8 ++++---- src/gpg_dispatch.c | 2 +- src/gpg_io.c | 2 +- src/gpg_pso.c | 12 ++++++------ src/gpg_types.h | 15 +++++++++++++-- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index d795f2c..17caf90 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -111,7 +111,7 @@ int gpg_apdu_get_data(unsigned int ref) { /* ----------------- aid, histo, ext_length, ... ----------------- */ case 0x6E: - gpg_io_insert_tlv(0x4F, 16, (const unsigned char *) N_gpg_pstate->AID); + gpg_io_insert_tlv(0x4F, AID_LENGTH, (const unsigned char *) N_gpg_pstate->AID); memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset - 6, G_gpg_vstate.kslot->serial, 4); @@ -743,7 +743,7 @@ int gpg_apdu_put_data(unsigned int ref) { G_gpg_vstate.io_length, &aes_key)); nvm_write((void *) &N_gpg_pstate->SM_enc, &aes_key, sizeof(cx_aes_key_t)); - CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer + 16, + CX_CHECK(cx_aes_init_key_no_throw(G_gpg_vstate.work.io_buffer + CX_AES_128_KEY_LEN, G_gpg_vstate.io_length, &aes_key)); nvm_write((void *) &N_gpg_pstate->SM_mac, &aes_key, sizeof(cx_aes_key_t)); @@ -809,11 +809,11 @@ static int gpg_init_keyenc(cx_aes_key_t *keyenc) { if (sw != SW_OK) { return sw; } - sw = gpg_pso_derive_key_seed(seed, (unsigned char *) PIC("key "), 1, seed, 16); + sw = gpg_pso_derive_key_seed(seed, (unsigned char *) PIC("key "), 1, seed, CX_AES_BLOCK_SIZE); if (sw != SW_OK) { return sw; } - CX_CHECK(cx_aes_init_key_no_throw(seed, 16, keyenc)); + CX_CHECK(cx_aes_init_key_no_throw(seed, CX_AES_BLOCK_SIZE, keyenc)); end: if (error != CX_OK) { diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index c5a5381..1a3127a 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -242,7 +242,7 @@ int gpg_dispatch() { #ifdef GPG_LOG case INS_GET_LOG: gpg_io_discard(1); - gpg_io_insert(G_gpg_vstate.log_buffer, 32); + gpg_io_insert(G_gpg_vstate.log_buffer, sizeof(G_gpg_vstate.log_buffer)); return SW_OK; #endif diff --git a/src/gpg_io.c b/src/gpg_io.c index 5ec85ee..6312d68 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -242,7 +242,7 @@ void gpg_io_do(unsigned int io_flags) { memmove(G_io_apdu_buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, tx); G_gpg_vstate.io_length -= tx; G_gpg_vstate.io_offset += tx; - G_io_apdu_buffer[tx] = 0x61; + G_io_apdu_buffer[tx] = (SW_CORRECT_BYTES_AVAILABLE >> 8) & 0xFF; if (G_gpg_vstate.io_length > MAX_OUT - 2) { xx = MAX_OUT - 2; } else { diff --git a/src/gpg_pso.c b/src/gpg_pso.c index ed4fea5..82d4b24 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -225,7 +225,7 @@ int gpg_apdu_pso() { unsigned int msg_len; cx_aes_key_t *key = NULL; key = &G_gpg_vstate.kslot->AES_dec; - if (!(key->size != 16)) { + if (!(key->size != CX_AES_128_KEY_LEN)) { return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; @@ -238,7 +238,7 @@ int gpg_apdu_pso() { &ksz)); // send gpg_io_discard(0); - G_gpg_vstate.work.io_buffer[0] = 0x02; + G_gpg_vstate.work.io_buffer[0] = PAD_AES; gpg_io_inserted(1 + ksz); return SW_OK; } @@ -251,7 +251,7 @@ int gpg_apdu_pso() { switch (pad_byte) { // --- PSO:DEC:RSA - case 0x00: { + case PAD_RSA: { cx_rsa_private_key_t *key = NULL; if (G_gpg_vstate.mse_dec->attributes.value[0] != KEY_ID_RSA) { return SW_CONDITIONS_NOT_SATISFIED; @@ -291,10 +291,10 @@ int gpg_apdu_pso() { } // --- PSO:DEC:AES - case 0x02: { + case PAD_AES: { cx_aes_key_t *key; key = &G_gpg_vstate.kslot->AES_dec; - if (!(key->size != 16)) { + if (!(key->size != CX_AES_128_KEY_LEN)) { return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; @@ -312,7 +312,7 @@ int gpg_apdu_pso() { } // --- PSO:DEC:ECDH - case 0xA6: { + case PAD_ECDH: { cx_ecfp_private_key_t *key; unsigned int curve; diff --git a/src/gpg_types.h b/src/gpg_types.h index b9e4e64..f763b45 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -41,6 +41,7 @@ #define GPG_MIN_PW1_LENGTH 6 #define GPG_MIN_PW3_LENGTH 8 +#define AID_LENGTH 16 #define HISTO_LENGTH 15 #define HISTO_OFFSET_STATE 12 // 3rd byte from last (buffer size is 15) #ifdef TARGET_NANOS @@ -53,6 +54,10 @@ #define GPG_RSA_DEFAULT_PUB 0x00010001U +#ifndef CX_AES_128_KEY_LEN +#define CX_AES_128_KEY_LEN CX_AES_BLOCK_SIZE +#endif + /* --- Keys IDs --- */ // https://www.rfc-editor.org/rfc/rfc4880#section-9.1 #define KEY_ID_RSA 1 // RSA (Encrypt or Sign) @@ -160,7 +165,7 @@ struct gpg_nv_state_s { /* -- Application Related Data -- */ /* 4F */ - unsigned char AID[16]; + unsigned char AID[AID_LENGTH]; /* 5F52 */ unsigned char histo[HISTO_LENGTH]; @@ -292,7 +297,7 @@ struct gpg_v_state_s { #endif #ifdef GPG_LOG - unsigned char log_buffer[32]; + unsigned char log_buffer[256]; #endif }; typedef struct gpg_v_state_s gpg_v_state_t; @@ -367,6 +372,7 @@ typedef struct gpg_v_state_s gpg_v_state_t; #define SW_INS_NOT_SUPPORTED 0x6d00 #define SW_CLA_NOT_SUPPORTED 0x6e00 #define SW_UNKNOWN 0x6f00 +#define SW_CORRECT_BYTES_AVAILABLE 0x6100 #define SW_OK 0x9000 /* --- P1/P2 constants --- */ @@ -394,4 +400,9 @@ typedef struct gpg_v_state_s gpg_v_state_t; #define KEY_AUT 0xa4 #define KEY_NB 3 +/* --- Padding indicators --- */ +#define PAD_RSA 0x00 +#define PAD_AES 0x02 +#define PAD_ECDH 0xa6 + #endif From ae8d1f7607d599e66acf75a4baa9983ddb9626be Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 14:06:40 +0100 Subject: [PATCH 58/75] Cleanup / comment dead code --- src/gpg_data.c | 7 ------- src/gpg_dispatch.c | 10 ---------- src/gpg_gen.c | 4 ++-- src/gpg_init.c | 27 ++++++++++++--------------- 4 files changed, 14 insertions(+), 34 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index 17caf90..cb20ea6 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -379,7 +379,6 @@ int gpg_apdu_put_data(unsigned int ref) { case 0x93: len_q = l; break; - break; case 0x94: case 0x95: case 0x96: @@ -1007,12 +1006,7 @@ int gpg_apdu_put_key_data(unsigned int ref) { sw = SW_CONDITIONS_NOT_SATISFIED; break; } - if (len != GPG_IO_BUFFER_LENGTH) { - sw = SW_CONDITIONS_NOT_SATISFIED; - break; - } - PRINTF("[DATA] - put_key_data: key len: %d\n", len); gpg_io_discard(0); CX_CHECK(cx_aes_no_throw(&keyenc, CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, @@ -1021,7 +1015,6 @@ int gpg_apdu_put_key_data(unsigned int ref) { G_gpg_vstate.work.io_buffer, &ksz)); if (len != ksz) { - PRINTF("[DATA] - put_key_data: Wrong aes output len: %d / %d\n", len, ksz); sw = SW_WRONG_DATA; break; } diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index 1a3127a..b92fddf 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -249,7 +249,6 @@ int gpg_dispatch() { /* --- SELECT --- */ case INS_SELECT: return gpg_apdu_select(); - break; /* --- ACTIVATE/TERMINATE FILE --- */ case INS_ACTIVATE_FILE: @@ -258,17 +257,14 @@ int gpg_dispatch() { gpg_install(STATE_ACTIVATE); } return SW_OK; - break; case INS_TERMINATE_DF: gpg_io_discard(0); if (gpg_pin_is_verified(PIN_ID_PW3) || (N_gpg_pstate->PW3.counter == 0)) { gpg_install(STATE_TERMINATE); return SW_OK; - break; } return SW_CONDITIONS_NOT_SATISFIED; - break; } /* Other commands allowed if not terminated */ @@ -283,12 +279,6 @@ int gpg_dispatch() { } switch (G_gpg_vstate.io_ins) { -#ifdef GPG_DEBUG_APDU - case 0x42: - sw = debug_apdu(); - break; -#endif - case INS_EXIT: os_sched_exit(0); sw = SW_OK; diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 052d3e1..ccf8804 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -219,7 +219,7 @@ static int gpg_gen_ecc_kyey(gpg_key_t *keygpg, uint8_t *name) { nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); gpg_io_clear(); - return SW_OK; + error = SW_OK; end: return error; @@ -256,7 +256,7 @@ static int gpg_read_ecc_kyey(gpg_key_t *keygpg) { keygpg->pub_key.ecfp.W_len, (unsigned char *) &keygpg->pub_key.ecfp.W); } - return SW_OK; + error = SW_OK; end: return error; diff --git a/src/gpg_init.c b/src/gpg_init.c index 9bc1949..5b3cdd4 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -31,12 +31,13 @@ const unsigned char C_MAGIC[8] = {'G', 'P', 'G', 'C', 'A', 'R', 'D', '3'}; // secp256r1 / NIST P256 /ansi-x9.62 : 1.2.840.10045.3.1.7 const unsigned char C_OID_SECP256R1[8] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07}; -/* -//secp384r1 / NIST P384 /ansi-x9.62 :1.3.132.0.34 + +/* Unsupported (yet) Curves +// secp384r1 / NIST P384 /ansi-x9.62 :1.3.132.0.34 const unsigned char C_OID_SECP384R1[5] = { 0x2B, 0x81, 0x04, 0x00 , 0x22 }; -//secp521r1 / NIST P521 /ansi-x9.62 : 1.3.132.0.35 +// secp521r1 / NIST P521 /ansi-x9.62 : 1.3.132.0.35 const unsigned char C_OID_SECP521R1[5] = { 0x2B, 0x81, 0x04, 0x00, 0x23 }; @@ -44,20 +45,20 @@ const unsigned char C_OID_SECP521R1[5] = { // secp256k1: 1.3.132.0.10 const unsigned char C_OID_SECP256K1[5] = {0x2B, 0x81, 0x04, 0x00, 0x0A}; -/* -//brainpool 256t1: 1.3.36.3.3.2.8.1.1.8 +/* Unsupported (yet) Curves +// brainpool 256t1: 1.3.36.3.3.2.8.1.1.8 const unsigned char C_OID_BRAINPOOL256T1[9] = { 0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x07 }; -//brainpool 256r1: 1.3.36.3.3.2.8.1.1.7 +// brainpool 256r1: 1.3.36.3.3.2.8.1.1.7 const unsigned char C_OID_BRAINPOOL256R1[9] = { 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x08 }; -//brainpool 384r1: 1.3.36.3.3.2.8.1.1.11 +// brainpool 384r1: 1.3.36.3.3.2.8.1.1.11 const unsigned char C_OID_BRAINPOOL384R1[9] = { 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0B }; -//brainpool 512r1: 1.3.36.3.3.2.8.1.1.13 +// brainpool 512r1: 1.3.36.3.3.2.8.1.1.13 const unsigned char C_OID_BRAINPOOL512R1[9] = { 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0D }; @@ -98,16 +99,14 @@ unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len) { if ((len == sizeof(C_OID_SECP256K1)) && (memcmp(oid, C_OID_SECP256K1, len) == 0)) { return CX_CURVE_SECP256K1; } - /* + /* Unsupported (yet) Curves if ( (len == sizeof(C_OID_SECP384R1)) && (memcmp(oid, C_OID_SECP384R1, len)==0) ) { return CX_CURVE_SECP384R1; } if ( (len == sizeof(C_OID_SECP521R1)) && (memcmp(oid, C_OID_SECP521R1, len)==0) ) { return CX_CURVE_SECP521R1; } - */ - /* if ( (len == sizeof(C_OID_BRAINPOOL256T1)) && (memcmp(oid, C_OID_BRAINPOOL256T1, len)==0) ) { return CX_CURVE_BrainPoolP256T1; } @@ -142,7 +141,7 @@ unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len) { *len = sizeof(C_OID_SECP256K1); return (unsigned char *) PIC(C_OID_SECP256K1); - /* + /* Unsupported (yet) Curves case CX_CURVE_SECP384R1: *len = sizeof(C_OID_SECP384R1); return (unsigned char*)PIC(C_OID_SECP384R1); @@ -150,9 +149,7 @@ unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len) { case CX_CURVE_SECP521R1: *len = sizeof(C_OID_SECP521R1); return (unsigned char*)PIC(C_OID_SECP521R1); - */ - /* case CX_CURVE_BrainPoolP256R1: *len = sizeof(C_OID_SECP256R1); return (unsigned char*)PIC(C_OID_SECP256R1); @@ -455,7 +452,7 @@ void gpg_install(unsigned char app_state) { nvm_write((void *) (&N_gpg_pstate->config_pin), G_gpg_vstate.work.io_buffer, 1); gpg_activate_pinpad(3); - // default key template: RSA 2048) + // default key template for (int s = 0; s < GPG_KEYS_SLOTS; s++) { gpg_install_slot((gpg_key_slot_t *) &N_gpg_pstate->keys[s]); } From 6541cf32f8a50ce40354b714a419377c37886bf3 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 14:24:03 +0100 Subject: [PATCH 59/75] Clear return buffer in case of error --- src/gpg_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gpg_main.c b/src/gpg_main.c index fb17459..d0da2fd 100644 --- a/src/gpg_main.c +++ b/src/gpg_main.c @@ -50,6 +50,9 @@ void app_main(void) { sw = gpg_dispatch(); if (sw) { PRINTF("[MAIN] - FINALLY INSERT sw=0x%x\n", sw); + if ((sw != SW_OK) && ((sw & 0xFF00) != SW_CORRECT_BYTES_AVAILABLE)) { + gpg_io_discard(1); + } gpg_io_insert_u16(sw); io_flags = 0; } else { From 43da8634284c4a427a71c54279da63d575dec2cc Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 14:46:11 +0100 Subject: [PATCH 60/75] Fix Name display --- src/gpg_ux_nanos.c | 6 ++---- src/gpg_ux_nanox.c | 6 ++---- src/gpg_ux_nbgl.c | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index cc32264..87255d9 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -1002,11 +1002,9 @@ const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, explicit_bzero(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)); if (element->component.userid == 0x21) { memmove(G_gpg_vstate.menu, (void *) (N_gpg_pstate->name.value), 12); - if (G_gpg_vstate.menu[0] == 0) { - strlcpy(G_gpg_vstate.menu, "", 9); - } else { + if (G_gpg_vstate.menu[0] != 0) { for (int i = 0; i < 12; i++) { - if (G_gpg_vstate.menu[i] == '<') { + if ((G_gpg_vstate.menu[i] == '<') || (G_gpg_vstate.menu[i] == '>')) { G_gpg_vstate.menu[i] = ' '; } } diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 7c9c348..fec2006 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -1207,11 +1207,9 @@ UX_FLOW(ux_flow_main, void ui_menu_main_predisplay() { explicit_bzero(G_gpg_vstate.ux_buff1, sizeof(G_gpg_vstate.ux_buff1)); memmove(G_gpg_vstate.ux_buff1, (void *) (N_gpg_pstate->name.value), 20); - if (G_gpg_vstate.ux_buff1[0] == 0) { - strlcpy(G_gpg_vstate.ux_buff1, "", 9); - } else { + if (G_gpg_vstate.ux_buff1[0] != 0) { for (int i = 0; i < 12; i++) { - if (G_gpg_vstate.ux_buff1[i] == '<') { + if ((G_gpg_vstate.menu[i] == '<') || (G_gpg_vstate.menu[i] == '>')) { G_gpg_vstate.ux_buff1[i] = ' '; } } diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index 371025c..1f7e9e1 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -96,7 +96,7 @@ void ui_init(void) { memmove(name, (void*) (N_gpg_pstate->name.value), 20); if (name[0] != 0) { for (int i = 0; i < 12; i++) { - if (name[i] == '<') { + if ((name[i] == '<') || (name[i] == '>')) { name[i] = ' '; } } From 7b7bd27fa3b70cff979813b1d00ca14cfb94a77a Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 14 Mar 2024 11:11:59 +0100 Subject: [PATCH 61/75] Add few buffer checks --- src/gpg_pso.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 82d4b24..c792a88 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -321,12 +321,15 @@ int gpg_apdu_pso() { } key = &G_gpg_vstate.mse_dec->priv_key.ecfp; gpg_io_fetch_l(&l); + if (l != 37) { + return SW_WRONG_DATA; + } gpg_io_fetch_tl(&t, &l); - if (t != 0x7f49) { + if ((t != 0x7f49) || (l != 34)) { return SW_WRONG_DATA; } gpg_io_fetch_tl(&t, &l); - if (t != 0x86) { + if ((t != 0x86) || (l != 32)) { return SW_WRONG_DATA; } From 3e98639670972033cf11e950858367eba8e9472b Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 13 Mar 2024 15:40:31 +0100 Subject: [PATCH 62/75] Fix #80: set 'URL of public key' on each slot --- src/gpg_data.c | 10 +++++----- src/gpg_types.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index cb20ea6..be17673 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -95,8 +95,8 @@ int gpg_apdu_get_data(unsigned int ref) { break; case 0x5F50: /* Uniform resource locator */ - gpg_io_insert((const unsigned char *) N_gpg_pstate->url.value, - N_gpg_pstate->url.length); + gpg_io_insert((const unsigned char *) N_gpg_pstate->keys[G_gpg_vstate.slot].url.value, + N_gpg_pstate->keys[G_gpg_vstate.slot].url.length); break; case 0x65: /* Name, Language, salutation */ @@ -571,14 +571,14 @@ int gpg_apdu_put_data(unsigned int ref) { break; /* Uniform resource locator */ case 0x5F50: - if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->url.value)) { + if (G_gpg_vstate.io_length > sizeof(N_gpg_pstate->keys[G_gpg_vstate.slot].url.value)) { sw = SW_WRONG_LENGTH; break; } - nvm_write((void *) N_gpg_pstate->url.value, + nvm_write((void *) N_gpg_pstate->keys[G_gpg_vstate.slot].url.value, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - nvm_write((void *) &N_gpg_pstate->url.length, + nvm_write((void *) &N_gpg_pstate->keys[G_gpg_vstate.slot].url.length, &G_gpg_vstate.io_length, sizeof(unsigned int)); sw = SW_OK; diff --git a/src/gpg_types.h b/src/gpg_types.h index f763b45..99b6146 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -129,6 +129,8 @@ typedef struct gpg_key_slot_s { unsigned int sig_count; /* D5 */ cx_aes_key_t AES_dec; + /* 5F50 */ + LV(url, GPG_EXT_PRIVATE_DO_LENGTH); } gpg_key_slot_t; @@ -152,8 +154,6 @@ struct gpg_nv_state_s { /* 5E */ LV(login, GPG_EXT_PRIVATE_DO_LENGTH); - /* 5F50 */ - LV(url, GPG_EXT_PRIVATE_DO_LENGTH); /* -- Cardholder Related Data -- */ /* 5B */ From 2d309b8c792cca433bdd64c32c3281a111ee77b1 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 14 Mar 2024 09:00:33 +0100 Subject: [PATCH 63/75] Add debug PRINTF --- src/gpg_io.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/gpg_io.c b/src/gpg_io.c index 6312d68..dbaa8a5 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -317,6 +317,13 @@ void gpg_io_do(unsigned int io_flags) { break; } + PRINTF("[IO] - io_do: 1st APDU=0x %02x.%02x.%02x.%02x - %d (0x%x)\n", + G_gpg_vstate.io_cla, + G_gpg_vstate.io_ins, + G_gpg_vstate.io_p1, + G_gpg_vstate.io_p2, + G_gpg_vstate.io_lc, + G_gpg_vstate.io_lc); while (G_gpg_vstate.io_cla & CLA_APP_CHAIN) { G_io_apdu_buffer[0] = ((SW_OK >> 8) & 0xFF); G_io_apdu_buffer[1] = (SW_OK & 0xFF); @@ -338,6 +345,13 @@ void gpg_io_do(unsigned int io_flags) { if ((G_gpg_vstate.io_length + G_gpg_vstate.io_lc) > GPG_IO_BUFFER_LENGTH) { return; } + PRINTF("[IO] - io_do: Next APDU=0x %02x.%02x.%02x.%02x - %d (0x%x)\n", + G_gpg_vstate.io_cla, + G_gpg_vstate.io_ins, + G_gpg_vstate.io_p1, + G_gpg_vstate.io_p2, + G_gpg_vstate.io_lc, + G_gpg_vstate.io_lc); memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_length, G_io_apdu_buffer + OFFSET_CDATA, G_gpg_vstate.io_lc); From 546523ad43c13761746fe72204822bc47b358e8b Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 14 Mar 2024 08:53:34 +0100 Subject: [PATCH 64/75] Improve test tools - Replace 'pycard' by 'ledgercomm', allowint to work also with 'speculos' - Update 'manual-tests' allowing expert mode init with full log generation - Improve backup meachnism - Add 'seed-key' option directly to 'backup.py' for easier operation - Adapt the document accordingly --- doc/user/app-openpgp.pdf | Bin 1217897 -> 1217912 bytes doc/user/app-openpgp.rst | 8 ++++---- manual-tests/manual.sh | 10 ++++++++++ pytools/backup.py | 9 ++++++++- pytools/gpgapp/gpgcard.py | 29 ++++++++++++----------------- pytools/gpgcli.py | 2 +- pytools/requirements.txt | 2 +- 7 files changed, 36 insertions(+), 24 deletions(-) diff --git a/doc/user/app-openpgp.pdf b/doc/user/app-openpgp.pdf index ccab45b3b4bb49680a2fcb672da048603b827efb..5e2ea57d2c0731c9d915712a811425527a5456f1 100644 GIT binary patch delta 5363 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 Cd`%Ys delta 5337 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 diff --git a/doc/user/app-openpgp.rst b/doc/user/app-openpgp.rst index d665220..48ac27d 100644 --- a/doc/user/app-openpgp.rst +++ b/doc/user/app-openpgp.rst @@ -1562,6 +1562,7 @@ The tool usage is the following: | ``--user-pin PIN User PIN (if pinpad not used)`` | ``--restore Perform a Restore instead of Backup`` | ``--file FILE Backup/Restore file (default is 'gpg_backup')`` + | ``--seed-key After Restore, regenerate all keys, based on seed mode`` | | ``Keys restore is only possible with SEED mode...`` @@ -1571,12 +1572,11 @@ To perform a backup, simply use the tool like this: | ``Connect to card 'Ledger'...`` | ``Configuration saved in file 'gpg_backup'.`` -Once the configuration is restored, just use the previous tool to re-generate the seeded keys: +To *restore* a backup, simply use the tool like this: - | ``./gpgcli.py --user-pin 123456 --adm-pin 12345678 --seed-key`` + | ``$ ./backup.py --restore --adm-pin 12345678 --user-pin 123456 --seed-key`` | ``Connect to card 'Ledger'...`` - | ``Verify PINs...`` - | ``Get card info...`` + | ``Configuration saved in file 'gpg_backup'.`` Annexes ======= diff --git a/manual-tests/manual.sh b/manual-tests/manual.sh index d882da9..082cd9b 100755 --- a/manual-tests/manual.sh +++ b/manual-tests/manual.sh @@ -62,6 +62,16 @@ init() { echo enable-pinpad-varlen echo card-timeout 1 } > "${dir}/scdaemon.conf" + + if [[ ${EXPERT} == true ]]; then + { + echo log-file /tmp/scd.log + echo debug-level guru + echo debug-all + } >> "${dir}/scdaemon.conf" + fi + + gpgconf --reload scdaemon } #=============================================================================== diff --git a/pytools/backup.py b/pytools/backup.py index bdf7268..9a4e66e 100755 --- a/pytools/backup.py +++ b/pytools/backup.py @@ -34,7 +34,7 @@ def get_argparser() -> Namespace: formatter_class=RawTextHelpFormatter ) parser.add_argument("--reader", type=str, default="Ledger", - help="PCSC reader name (default is '%(default)s')") + help="PCSC reader name (default is '%(default)s') or 'speculos'") parser.add_argument("--slot", type=int, choices=range(1, 4), help="Select slot (1 to 3)") @@ -51,6 +51,9 @@ def get_argparser() -> Namespace: parser.add_argument("--file", type=str, default="gpg_backup", help="Backup/Restore file (default is '%(default)s')") + parser.add_argument("--seed-key", action="store_true", + help="After Restore, regenerate all keys, based on seed mode") + return parser.parse_args() @@ -95,6 +98,10 @@ def entrypoint() -> None: if args.restore: gpgcard.restore(args.file) print(f"Configuration restored from file '{args.file}'.") + + if args.seed_key: + gpgcard.seed_key() + else: gpgcard.backup(args.file) print(f"Configuration saved in file '{args.file}'.") diff --git a/pytools/gpgapp/gpgcard.py b/pytools/gpgapp/gpgcard.py index 665a353..9e08884 100644 --- a/pytools/gpgapp/gpgcard.py +++ b/pytools/gpgapp/gpgcard.py @@ -24,14 +24,12 @@ from dataclasses import dataclass from Crypto.PublicKey.RSA import construct -# pylint: disable=import-error -from smartcard.System import readers # type: ignore -from smartcard.pcsc import PCSCReader # type: ignore -from smartcard import CardConnectionDecorator # type: ignore -# pylint: enable=import-error from gpgapp.gpgcmd import DataObject, ErrorCodes, KeyTypes, PassWord, PubkeyAlgo # type: ignore from gpgapp.gpgcmd import KEY_OPERATIONS, KEY_TEMPLATES, USER_SALUTATION # type: ignore +# pylint: disable=import-error +from ledgercomm import Transport # type: ignore +# pylint: enable=import-error APDU_MAX_SIZE: int = 0xFE APDU_CHAINING_MODE: int = 0x10 @@ -143,7 +141,7 @@ def reset(self): class GPGCard() : def __init__(self) -> None: self.log: bool = False - self.connection: CardConnectionDecorator = None + self.transport: Transport = None self.slot_current: bytes = b"\x00" self.slot_config: bytes = bytes(3) self.data: CardInfo = CardInfo() @@ -156,21 +154,17 @@ def connect(self, device: str) -> None: device (str): Reader device name """ - allreaders: list = readers() - for elt in allreaders: - if str(elt).startswith(device): - reader: PCSCReader.PCSCReader = elt - self.connection = reader.createConnection() - self.connection.connect() - return + if device == "speculos": + self.transport = Transport("tcp", server="127.0.0.1", port=9999, debug=False) + else: + self.transport = Transport("hid") print("") - raise GPGCardExcpetion(ErrorCodes.ERR_INTERNAL, "No Reader detected!") def disconnect(self): """Connect from the selected Reader""" - return self.connection.disconnect() + self.transport.close() ############### LOG interface ############### @@ -1236,8 +1230,9 @@ def _transmit(self, data: bytes, long_resp: bool = False) -> Tuple[bytes, int, i """ self.add_log("send", data) - resp, sw1, sw2 = self.connection.transmit(list(data)) - sw = (sw1 << 8) | sw2 + sw, resp = self.transport.exchange_raw(data) + sw1 = (sw >> 8) & 0xFF + sw2 = sw & 0xFF self.add_log("recv", resp, sw) if sw != ErrorCodes.ERR_SUCCESS and not long_resp: raise GPGCardExcpetion(sw, "") diff --git a/pytools/gpgcli.py b/pytools/gpgcli.py index 797fb12..4d85839 100755 --- a/pytools/gpgcli.py +++ b/pytools/gpgcli.py @@ -38,7 +38,7 @@ def get_argparser() -> Namespace: parser.add_argument("--info", action="store_true", help="Get and display card information") parser.add_argument("--reader", type=str, default="Ledger", - help="PCSC reader name (default is '%(default)s')") + help="PCSC reader name (default is '%(default)s') or 'speculos'") parser.add_argument("--apdu", action="store_true", help="Log APDU exchange") parser.add_argument("--slot", type=int, choices=range(1, 4), help="Select slot (1 to 3)") diff --git a/pytools/requirements.txt b/pytools/requirements.txt index 2baafa8..0c51a3d 100644 --- a/pytools/requirements.txt +++ b/pytools/requirements.txt @@ -1,2 +1,2 @@ -pyscard pycryptodome +ledgercomm From 8c60342f051981e8d84f3b300b28ef285dee2113 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 14 Mar 2024 16:05:46 +0100 Subject: [PATCH 65/75] Revert "Add few buffer checks" Causing issue with secp256r1 curve! This reverts commit 7b7bd27fa3b70cff979813b1d00ca14cfb94a77a. --- src/gpg_pso.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/gpg_pso.c b/src/gpg_pso.c index c792a88..82d4b24 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -321,15 +321,12 @@ int gpg_apdu_pso() { } key = &G_gpg_vstate.mse_dec->priv_key.ecfp; gpg_io_fetch_l(&l); - if (l != 37) { - return SW_WRONG_DATA; - } gpg_io_fetch_tl(&t, &l); - if ((t != 0x7f49) || (l != 34)) { + if (t != 0x7f49) { return SW_WRONG_DATA; } gpg_io_fetch_tl(&t, &l); - if ((t != 0x86) || (l != 32)) { + if (t != 0x86) { return SW_WRONG_DATA; } From 6a587af35b00aa349665442c6cfdb7a36e83473c Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 14 Mar 2024 16:05:15 +0100 Subject: [PATCH 66/75] Fix missing curve 'secp256k1' in the menus --- src/gpg_ux.h | 1 + src/gpg_ux_nanos.c | 5 +++++ src/gpg_ux_nanox.c | 6 ++++++ src/gpg_ux_nbgl.c | 41 ++++++++++++++++++++++++++++++++++------- 4 files changed, 46 insertions(+), 7 deletions(-) diff --git a/src/gpg_ux.h b/src/gpg_ux.h index fc7a63d..38b56fe 100644 --- a/src/gpg_ux.h +++ b/src/gpg_ux.h @@ -29,6 +29,7 @@ #define LABEL_RSA2048 "RSA 2048" #define LABEL_RSA3072 "RSA 3072" #define LABEL_RSA4096 "RSA 4096" +#define LABEL_SECP256K1 "SECP 256K1" #define LABEL_SECP256R1 "SECP 256R1" #define LABEL_Ed25519 "Ed25519" diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 87255d9..c26692b 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -535,6 +535,7 @@ const ux_menu_entry_t ui_menu_tmpl_type[] = { #ifdef WITH_SUPPORT_RSA4096 {NULL, ui_menu_tmpl_type_action, 4096, NULL, LABEL_RSA4096, NULL, 0, 0}, #endif + {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256K1, NULL, LABEL_SECP256K1, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256R1, NULL, LABEL_SECP256R1, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, CX_CURVE_Ed25519, NULL, LABEL_Ed25519, NULL, 0, 0}, {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, @@ -573,6 +574,9 @@ const bagl_element_t *ui_menu_template_predisplay(const ux_menu_entry_t *entry, snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA4096); break; #endif + case CX_CURVE_SECP256K1: + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_SECP256K1); + break; case CX_CURVE_SECP256R1: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_SECP256R1); break; @@ -615,6 +619,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { attributes.length = 6; break; + case CX_CURVE_SECP256K1: case CX_CURVE_SECP256R1: if (G_gpg_vstate.ux_key == 2) { attributes.value[0] = KEY_ID_ECDH; diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index fec2006..c1c5f85 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -473,6 +473,7 @@ const char *const tmpl_type_getter_values[] = {LABEL_RSA2048, #ifdef WITH_SUPPORT_RSA4096 LABEL_RSA4096, #endif + LABEL_SECP256K1, LABEL_SECP256R1, LABEL_Ed25519}; @@ -481,6 +482,7 @@ const unsigned int tmpl_type_getter_values_map[] = {2048, #ifdef WITH_SUPPORT_RSA4096 4096, #endif + CX_CURVE_SECP256K1, CX_CURVE_SECP256R1, CX_CURVE_Ed25519}; @@ -572,6 +574,9 @@ void ui_menu_template_predisplay() { snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA4096); break; #endif + case CX_CURVE_SECP256K1: + snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_SECP256K1); + break; case CX_CURVE_SECP256R1: snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_SECP256R1); break; @@ -610,6 +615,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { attributes.length = 6; break; + case CX_CURVE_SECP256K1: case CX_CURVE_SECP256R1: oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); if (oid == NULL) { diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index 1f7e9e1..2af475a 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -207,6 +207,7 @@ enum { #ifdef WITH_SUPPORT_RSA4096 TOKEN_TYPE_RSA4096, #endif + TOKEN_TYPE_SECP256K1, TOKEN_TYPE_SECP256R1, TOKEN_TYPE_Ed25519, TOKEN_TYPE_BACK @@ -217,12 +218,12 @@ static const char* const keyTypeTexts[] = {LABEL_RSA2048, #ifdef WITH_SUPPORT_RSA4096 LABEL_RSA4096, #endif + LABEL_SECP256K1, LABEL_SECP256R1, LABEL_Ed25519}; static uint32_t _getKeyType(const uint8_t key) { uint8_t* attributes = NULL; - uint32_t tag = 0; uint32_t token = 0; switch (key) { @@ -241,8 +242,7 @@ static uint32_t _getKeyType(const uint8_t key) { } switch (attributes[0]) { case KEY_ID_RSA: - tag = U2BE(attributes, 1); - switch (tag) { + switch (U2BE(attributes, 1)) { case 2048: token = TOKEN_TYPE_RSA2048; break; @@ -257,18 +257,31 @@ static uint32_t _getKeyType(const uint8_t key) { } break; case KEY_ID_ECDH: - tag = attributes[1]; - switch (tag) { + switch (attributes[1]) { case 0x2A: token = TOKEN_TYPE_SECP256R1; break; case 0x2B: - token = TOKEN_TYPE_Ed25519; + switch (attributes[2]) { + case 0x06: + token = TOKEN_TYPE_Ed25519; + break; + case 0x81: + token = TOKEN_TYPE_SECP256K1; + break; + } break; } break; case KEY_ID_ECDSA: - token = TOKEN_TYPE_SECP256R1; + switch (attributes[1]) { + case 0x2A: + token = TOKEN_TYPE_SECP256R1; + break; + case 0x2B: + token = TOKEN_TYPE_SECP256K1; + break; + } break; case KEY_ID_EDDSA: token = TOKEN_TYPE_Ed25519; @@ -315,6 +328,17 @@ static void template_key_cb(int token, uint8_t index) { oid_len = 6; break; + case TOKEN_TYPE_SECP256K1: + if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { + attributes.value[0] = KEY_ID_ECDH; + } else { + attributes.value[0] = KEY_ID_ECDSA; + } + oid = gpg_curve2oid(CX_CURVE_SECP256K1, &oid_len); + memmove(attributes.value + 1, oid, oid_len); + attributes.length = 1 + oid_len; + break; + case TOKEN_TYPE_SECP256R1: if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { attributes.value[0] = KEY_ID_ECDH; @@ -409,6 +433,9 @@ static void ui_settings_template(void) { bar.subText = PIC(LABEL_RSA4096); break; #endif + case TOKEN_TYPE_SECP256K1: + bar.subText = PIC(LABEL_SECP256K1); + break; case TOKEN_TYPE_SECP256R1: bar.subText = PIC(LABEL_SECP256R1); break; From 120bbeb8b6d834813b2c02d10869b3d47d9f0734 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 14 Mar 2024 16:13:17 +0100 Subject: [PATCH 67/75] Update snapshots --- .../nanos/test_menu_settings/00006.png | Bin 401 -> 410 bytes .../nanos/test_menu_settings/00007.png | Bin 417 -> 421 bytes .../nanos/test_menu_settings/00008.png | Bin 321 -> 411 bytes .../nanos/test_menu_settings/00009.png | Bin 415 -> 440 bytes .../nanos/test_menu_settings/00013.png | Bin 415 -> 440 bytes .../nanosp/test_menu_settings/00006.png | Bin 475 -> 481 bytes .../nanosp/test_menu_settings/00007.png | Bin 604 -> 584 bytes .../nanosp/test_menu_settings/00008.png | Bin 601 -> 669 bytes .../nanosp/test_menu_settings/00009.png | Bin 484 -> 619 bytes .../nanosp/test_menu_settings/00010.png | Bin 376 -> 408 bytes .../nanosp/test_menu_settings/00012.png | Bin 376 -> 408 bytes .../nanox/test_menu_settings/00006.png | Bin 475 -> 481 bytes .../nanox/test_menu_settings/00007.png | Bin 604 -> 584 bytes .../nanox/test_menu_settings/00008.png | Bin 601 -> 669 bytes .../nanox/test_menu_settings/00009.png | Bin 484 -> 619 bytes .../nanox/test_menu_settings/00010.png | Bin 376 -> 408 bytes .../nanox/test_menu_settings/00012.png | Bin 376 -> 408 bytes .../stax/test_menu_settings/00002.png | Bin 9595 -> 11104 bytes .../stax/test_menu_settings/00003.png | Bin 11641 -> 12023 bytes 19 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/snapshots/nanos/test_menu_settings/00006.png b/tests/snapshots/nanos/test_menu_settings/00006.png index 5304bfcec7a225e759d65fa7af391ead86107357..f434eb1e9bf71f9f30da914b2c49bce9bbc522fa 100644 GIT binary patch delta 383 zcmV-_0f7FI1DXSnB!6K^L_t(|ob8&yj)O1^M8m55{|EQb9-?JUJRYJI*a*#250P=4 z%BCqE(pn*(_c(~I+7I!J!VVFjLlLj4g?B7#`@Gw-GKY@O6rVUupY%`U9tE)Y+u7y| zmTH^Q?cJxfslrTp3L%6LLI@$mX)Fb6+Ey!SshaD4VXqX0B7bp+y`mkfD}e7pVWLU3 zU`#UR&P6Tp{iKLwszrz&V5^e`$JHa5b1>dq&w&EsFRlPx>Po1A&l=gRxln31lYgum z8P8(K=UzaBLQZ#+)y^Fi7bF z^@meSNo3#p1MjT-0Z%V%7r}H$;+-||fn_cGR+bexRCK2Bz;5`Ue;{)dK%$qk%$HfJ zHl*6CPbou%8T2HC5JCtcgpkWv66Tbxme*1h)%}{ik{1fZ0e|+4b}X*|x(hWE4XS0v z1jpDpsU@CIiU=lKgm@XYJZZ3>-IF;x_RfIEI UZ%O2P@Bjb+07*qoM6N<$g7ZMC6951J diff --git a/tests/snapshots/nanos/test_menu_settings/00007.png b/tests/snapshots/nanos/test_menu_settings/00007.png index 706365e845100e6bf782d81199c997b5bde5c68d..280b683e44ca6cbadcded27911d65803495fb49e 100644 GIT binary patch delta 395 zcmV;60d)SM1Em9yB!6s4L_t(|ob8&+62c%1MX6)||AV{G1WKj{r%F zv$W%C%S`ByxoIxQ39>yDuS000000D%7^>U}`! zPRB?yZq}1_HEsTK{^j{J(-17RF1*S)kk)a%9KDu>ci)PkV_(Q{HEPn=nZ~|!vF#-= p0HVI;bVt*Db!eS`C)Wtc6Y_oMtm62(Qvd(}07*qoLJg>jkh|G-{s7icwm8>FrmZS5H8LWr9U2r>eA2 zdoofw>mimM0RR910001BI7`qtWo^ZZUMhm5kyT`}T#}WP>VNrA%ku8{0xhHxwjM?X zNPS>SrJycZAY#?BX98CDK#gchDZfa9fI3ZS zo)uZnBLubPvMjg8Be$s*&)+>sgzH{Y{8(AOHXW diff --git a/tests/snapshots/nanos/test_menu_settings/00008.png b/tests/snapshots/nanos/test_menu_settings/00008.png index c51842fee31ac07c5db9e7b532b6ba1e6fe166dd..41bbb72580ef2d9745dab27c7adc0a4c737ca417 100644 GIT binary patch delta 384 zcmV-`0e}9%0-FPnB!6N_L_t(|ob8&y4#OY_hILur|ABjG4MW!Z)^0{R z$f#5ewNyOUYnh&|a<)9MIT6^3n9k7S>7V@lX52$NX!aeSv&H(IB=MNb+vLn+He5vj z=*KwMFU_=@+_!3PhNTxxXOS~)0lA*}^P29i0Vrc(F>tQc+KFMRvcyR9kleA!u=FrMY%Ec`xTmUq^E%$Es({JzuKKsEBx+O8*-3Bb@BtGfGN egqlQCvIZyHG~1T(Q_JB100000oneW1Hl52B!37=L_t(|ob8y)5`!QNMWIvw|ASrVf*A%A9?{a^;+&NeAh9=K zNkZ`F*yV#B8X7GVbfC_IJ=|12p21Aq{r$%t;`TgT+?*8`eEmZ8cXtvo$svq(&uPA1 zo>l%ORR9100001Uh>PQw)tRW0MCqisDwb>|(eh<~^ZgeVmh6}4U~EMk6k zRrThMV=Kar7Ul6iU9Ins+6nM~>9YTGw`o(Z)t2Gea-iFARS8JVMdutCKL{c>!;eoZ zR;Z=ze+WIV?b~Yt^4RJoZH0;Nlk((wGP0hkd0r$yj4jE5asN)ixj~)uRN-EE4ej4A stHx*7(B*#*03QGV00000007{|3Bn_Z=W7=21ONa407*qoM6N<$f}Hw`MF0Q* diff --git a/tests/snapshots/nanos/test_menu_settings/00009.png b/tests/snapshots/nanos/test_menu_settings/00009.png index 6dea62da1b0cfbf81a1d9b54f49c07f39958124a..81ce431d406492e6ef993253962442b74136c1b1 100644 GIT binary patch delta 414 zcmV;P0b%~11Goc_B!7QNL_t(|ob8&+5`!=ZMUzhb{||Q2E}UTy2;u{5$9qjRjaW0H3**{R{x%c< z000000Ps9Y5;0$MujHXetRgzZ<|)$bp4@ak<-YF${NofqMJq%CEfwh7wpOkjH9~tI zbs&D+@ej}vygrkB;2iatTED9B$aKjYU`kyF##X7$Ru@I2FYgTzA4RigCjbBd07*qo IM6N<$g6;jn1poj5 delta 388 zcmV-~0ek+q1D^wsB!6Z}L_t(|ob8%P4#OY}MNQS*|G-(a3nWC0&5&Y@n*UZQW-1Pr z`GLrk&)FzU&;5m!I^sZ;PCEOs(Z(3L7 zpbOdQ91xDiLgXvR(#NtbD-ornRL3tFHI^cNpsbh^nFE;3 z(FdLH?-WL3-F$L~5TC>ThwQgE?WqQdD$lobZ iYwKjjRjaW0H3**{R{x%c< z000000Ps9Y5;0$MujHXetRgzZ<|)$bp4@ak<-YF${NofqMJq%CEfwh7wpOkjH9~tI zbs&D+@ej}vygrkB;2iatTED9B$aKjYU`kyF##X7$Ru@I2FYgTzA4RigCjbBd07*qo IM6N<$g6;jn1poj5 delta 388 zcmV-~0ek+q1D^wsB!6Z}L_t(|ob8%P4#OY}MNQS*|G-(a3nWC0&5&Y@n*UZQW-1Pr z`GLrk&)FzU&;5m!I^sZ;PCEOs(Z(3L7 zpbOdQ91xDiLgXvR(#NtbD-ornRL3tFHI^cNpsbh^nFE;3 z(FdLH?-WL3-F$L~5TC>ThwQgE?WqQdD$lobZ iYwKjF1DKvB}^PT2pFyqA73VHhL?t{tI?@A;w* zkMIb#MN)g8 ziqg-v=XG3)_F|V)7Lhq?C0#*TkDcGao(Z@`J5}+G=04U0$ba9&=+FOEE+?!me0#6E zF6Z3!uC%ph0%ULHwo|X$gK}};Jhz}a2klabat}y@IjCz>wLV_8=VuGvtIR>WTzTry_AHP0Pxi!*fw$ xL6zs~n+7=?xW{s8)Nd(XXEwDSM}002ovPDHLkV1lE-;>`d6 delta 449 zcmV;y0Y3iW1KR_TB!8kwL_t(|obB3Ma)cldKv5=@ov{BUxtDxU(?!wHVq}`G@t!Z^ z@CXl48&d)R0000000000000000Km6+IoEd_haBgePk$;Wo0K|BoxrG~TcDl((|(-m zD@r@-mP@}B^~ols&Z1LFAx%bIj-B4Yo&i{*9;*08V;^e(^nW!m`tyH<>j9IAZ?ARt z<(!+=mAdu}fNrf`cI3R>DK|ULa|x0$sHZ}ddq5hDfy~XW`TmlYU(L8y8H0Md{BHR_ zPBo7=c7M%G|H;QH2Tj%6?g9GgML$#OgPM_deoc3~2LJ#70Kl8~en4XsiysC0?Kd)A zLN~n8yaPV^<$tRi{xqWhc1%K-FbV?OXFSCUM?X-|0k}FVOEBkjF_}s8EJvmLlN{IQ zjnYO3qr7|9pA;b+JqkGMEu@FFQgf{3yNHQn7!uyzwTLhq*tSAeF2``yjUQTkL3 z=gfBIX)*u+003CZbw9xP-fbpupXT1e>|*UQzxng5$vV)yo$OL1ZnEkoqjPvJN-Rjk r`D)XLYb>Z6k1Pjk8*i*j(UzA#Q)6<^Im)y000000NkvXXu0mjfrE=9w diff --git a/tests/snapshots/nanosp/test_menu_settings/00007.png b/tests/snapshots/nanosp/test_menu_settings/00007.png index c4df69f427064c2b43299206eaf784f6d859c524..3ad71f8f204410cddadc03b86ac67c3e1c14e9cc 100644 GIT binary patch delta 559 zcmV+~0?_^31jq!CB!3S{L_t(|ob8)ic7z}dK&_`cVgE~VFa6+@a>zrS(S(loelY=q zCV-eQ%K`uZ00000002+nE3xlw+giDlBISdy|GC?EkXU-0mY+}WfL88>L#*T-mkek=;}lQ#hb!*j5hqINq8pTvLR=){O%BBhiV zqpMM@r8%I6Tz_WpffEF^l4buQo+IPC^@i8}N2Cv=)ttrJ50qLl?SuVV!pmvq?IVn< z3^&I3K((6c12toFA(8W52HsaSQ5SYY4*ljN;FiLkdgv%~7o?Ue>b6AYQci6{7j3Dr zrXT* z9?LT%0jGNhoVCcCD@nQ!;@$!3a<3lkKl@^^cDL7>Z>@2RzXqMeC=O@|alAF&-Qh;-!+V^MAFf`t-F-XTGBv&g8Dw zKY#9<<>zqrx4Urj3R$Yl2Rk5>&21Q^ToT91(3&%=sVJ6kKuxo(Z0t3&5-p==#xWng z3I@u}&jx7mnHz|H;vTieMlq zB_E@UD%MsUkbfnY6?|Zbpjxo(CG?zL-_19?*FQXc&|A%ztZkuG)3hhs)iQ6Vn739K z_g-%F@quVH(FbD0=0-fneJ{N4VxZ3Lh79V(iNh_qJ$2Jid+&kc`MgDo-KRgiYHv+^VFCOhbJ2_}e%z9FK=k+B300000ycm(+3n~m1e{F{~ z89dO=V?41h`^6Rm3^jjV`Zodqu`Ktgg2G+aS-hLC;(%VyF+R{?{87wVnIBb41W(26 R>B0a2002ovPDHLkV1n!=5pVzi diff --git a/tests/snapshots/nanosp/test_menu_settings/00008.png b/tests/snapshots/nanosp/test_menu_settings/00008.png index 3d0298af9c42369fc3b15bf683fe953270f767b2..e678a8324068e41f8cb784e51d784a5fc7d08879 100644 GIT binary patch delta 644 zcmV-~0(<@01f2ztB!6T{L_t(|ob8-Zmct+jMV*}P#QiU6_A(!y<4{FJYk;=zex=4p zg3-hWX-abLg_jd^$(F65jOcl|kMjo<6u(vDCeJ-b`3Z;5jU6pFhA zr_^2SSebg0RtV+&6r=+v)x~viP=B$$YYwTSN7FINng9R*0Dk}g0C0{UU-NWj+pJgF zLd`;q7P3p|M*sNgRhV8HYxEqsHK8d@i6xh#ZIHrt!0KID5V5>1Ko=U_-6DW;%k z^G}MPh8_tCXy|YM2m>O@6x6tztxz~+F@pC~gb~oQ8WQMVD3wA#-b4Wa0000003H~{ z0~$G=4Fd?0eScH4Z&qkTt~rVgm?dmktb|7wBg9XdYC?pd?3Gu``b0Te--drJ$Xyp) zWl0(mY6`KlgN%gOtNxhEVRxLteOKEk(t_xnp1bF)dn*HqrS|rXDK(!zEDz&%9ewKXaE2J00000pN{GG0e!|*-KC5QY=;CirW2>leGbZ0 zeYx6FX0Fn7ubYlc+(DGw(2C>T=VID4HocRz32fhJ1G*c8c8yV26BDxDgfT8`=I`00000 z00000OmP0cpu$w~m$Ue3p%4uC7TtdXP5LccqL==K0DvzM|Ei#H$~(bt^C%tA>p9AV e>Nk@9S^fZTl~sVx*m)BG0000Ay81=$3UB!3`DL_t(|ob8)kc7z}dMyaPeasNx|Ui!c}Gz}2L3_@)0eR41Y z2KoEKq_mGOLGxC*mg&8$>g(4M7xTHR;LLfRsrCNnd3yX_?&f?9gY?_ow*5*rH$W!4 z+i*&`)$A*m-joKRyq|(JfTXy%bPnmSrtj1vrT2Im#%T!v0Dk}g05Fe_y~WF&t=g|P z6FnO-nb_PyEB)hN@521jn9_6X+>ER|DJwZPmJKOv1B`x^S-!p;Orj}q`%00000J6IGC zP;z`T3}8t1%73!X*2rYkQr=y#L0hpC?!Al=KT&2zgdpFwcgvTVtH)O=bU#|qc3p6k zA!*2Od6OS{LhMm~T*_g0)Zo6iRf=>^^sbpJ`N?dRxSLBkChCLuhkrdcK7waeSk-n#Kt>L}YOzsE z|NeKbI&yK#d{xNr+S}I)^5JXH60S000000002+XZQvZV*w6LeK~6Y O0000p5TvG2Rn?@o^6NNpK8@oaOO&oFma z4@mTCaRu+w3QvF}_e6d;N>53zvE!-ePTR$@A^-pY00000jDP1RvN1Ws%0+o9Br~gr zX*N&I%E=u|S6g`l9wAIq<%}w_$k~u)JXoGvMGMMA-hHPcM*yK(P*smiiM|(a#HDKF z`64uxU(3l=s?q7RqMfj7#Sk5WuHAID7Jd0%KGnbjSZ)kx^~lXgGQAJt#(-+LXPL6sE3o8M1V=x9|aMl8r^62Hv%M{4@NzF195%cQ@IJ?TEDjgt2A*X<9#HGbupID^>npUhz z^*?87IZT?7D`z=?RXV^)mu<{<7ALy1-1h+nuiQkw$`in1h`ken#7k$>0Pw6q0ssI2 h000000002IhF`Ni5wK+KM)?2$002ovPDHLkV1j&Q6tn;U delta 459 zcmV;+0W|*W1mpvdBYy#_Nkl`;b~h`ThTo&S4s zP{0l9u7MTV>TC>m)$O+2Y0cWO>N>5(_}tsQh?G)f6o^vFWZWm6=Xv$zl*Bvsc3*Yj z9v*O6)nkU}ONKi@t0Pfwjy6&{YTfbD45uGrT@e5P004g9M}K5z`VFh@s;@%2aCn&2 z=54cnn=`L(f7MJP%*x6+RrIdOj;xBo>A5VqplajQx25aQT+lEdd2Ouy@Xm87+v6o} z0NRIdn>CxMdmFxXXeYl;k_<_7HuN^_Y}Io1zLr?F<{^Tm`wn;-kvG%&uU!xe#oYnJ zTfQs2!twOsV1NC@d^$Y<00000AwuT^G$+^Jy*kb0{U@{h{scp?6sd^YHHU2kyUc;E z+m#I0=hkDk=YoDx5lPlcim_04Ra4n~-vL+jcb%?Yi9R23J&D$3lagFjmP49rf7cjH zJ`nU=g8%Tb`VwRAbBjZ-Jx+3ForPz$e5Lz44t*Y(XGCS!{y$)CgRe>P|A00Y-IPFk zfVe-0h9ypSk|6p3000000000000000008(`z5qw0O6~eV+7JK$002ovPDHLkV1kYu B;~fA1 diff --git a/tests/snapshots/nanosp/test_menu_settings/00010.png b/tests/snapshots/nanosp/test_menu_settings/00010.png index 2aa394d95f58df2507c3f3cbdb267ce58c47c4b9..ae682df49eb5e2d8cf52fb4e11e02372783a3f8b 100644 GIT binary patch delta 381 zcmeytG=q79N`1Vii(^Q|oVPcli<%9190F&(^tqxUmt6*yyHq!%UgTZOl!p#Ol$1ZqE`hM z{(34h#jGP`u7h=s({!(o6S%&HzT+?{dc4X%IdI;BSBK@YSyCFaKQNpP32v6QNtEk5 zz3h6TX-LzCZkD;JbN(Ib+x6_jroY+W_8TXy_FGuy{eQzbgQ>CX`B$tyZu8slV)};1 zm&-q|mAzKh^oG4XS0VkbN9?yn(zTD?F-3wIzEAg<3%ho^JCvSS-D@ek`Ru~4U6E!>)%V9UA%dx4e;vcz Wzh6uC{5B2*iF&&FxvXh;sJ-TJ z-ODdgmb|(1Z!fXu$c%V=VEGTNy`>rXYH`c&RvvBL{@de@rd*)U`-;o%g5jyhKc(lb zU`VPu`CYa7Z`i`)(SEflD;OT1Je7UfqxUmt6*yyHq!%UgTZOl!p#Ol$1ZqE`hM z{(34h#jGP`u7h=s({!(o6S%&HzT+?{dc4X%IdI;BSBK@YSyCFaKQNpP32v6QNtEk5 zz3h6TX-LzCZkD;JbN(Ib+x6_jroY+W_8TXy_FGuy{eQzbgQ>CX`B$tyZu8slV)};1 zm&-q|mAzKh^oG4XS0VkbN9?yn(zTD?F-3wIzEAg<3%ho^JCvSS-D@ek`Ru~4U6E!>)%V9UA%dx4e;vcz Wzh6uC{5B2*iF&&FxvXh;sJ-TJ z-ODdgmb|(1Z!fXu$c%V=VEGTNy`>rXYH`c&RvvBL{@de@rd*)U`-;o%g5jyhKc(lb zU`VPu`CYa7Z`i`)(SEflD;OT1Je7UfF1DKvB}^PT2pFyqA73VHhL?t{tI?@A;w* zkMIb#MN)g8 ziqg-v=XG3)_F|V)7Lhq?C0#*TkDcGao(Z@`J5}+G=04U0$ba9&=+FOEE+?!me0#6E zF6Z3!uC%ph0%ULHwo|X$gK}};Jhz}a2klabat}y@IjCz>wLV_8=VuGvtIR>WTzTry_AHP0Pxi!*fw$ xL6zs~n+7=?xW{s8)Nd(XXEwDSM}002ovPDHLkV1lE-;>`d6 delta 449 zcmV;y0Y3iW1KR_TB!8kwL_t(|obB3Ma)cldKv5=@ov{BUxtDxU(?!wHVq}`G@t!Z^ z@CXl48&d)R0000000000000000Km6+IoEd_haBgePk$;Wo0K|BoxrG~TcDl((|(-m zD@r@-mP@}B^~ols&Z1LFAx%bIj-B4Yo&i{*9;*08V;^e(^nW!m`tyH<>j9IAZ?ARt z<(!+=mAdu}fNrf`cI3R>DK|ULa|x0$sHZ}ddq5hDfy~XW`TmlYU(L8y8H0Md{BHR_ zPBo7=c7M%G|H;QH2Tj%6?g9GgML$#OgPM_deoc3~2LJ#70Kl8~en4XsiysC0?Kd)A zLN~n8yaPV^<$tRi{xqWhc1%K-FbV?OXFSCUM?X-|0k}FVOEBkjF_}s8EJvmLlN{IQ zjnYO3qr7|9pA;b+JqkGMEu@FFQgf{3yNHQn7!uyzwTLhq*tSAeF2``yjUQTkL3 z=gfBIX)*u+003CZbw9xP-fbpupXT1e>|*UQzxng5$vV)yo$OL1ZnEkoqjPvJN-Rjk r`D)XLYb>Z6k1Pjk8*i*j(UzA#Q)6<^Im)y000000NkvXXu0mjfrE=9w diff --git a/tests/snapshots/nanox/test_menu_settings/00007.png b/tests/snapshots/nanox/test_menu_settings/00007.png index c4df69f427064c2b43299206eaf784f6d859c524..3ad71f8f204410cddadc03b86ac67c3e1c14e9cc 100644 GIT binary patch delta 559 zcmV+~0?_^31jq!CB!3S{L_t(|ob8)ic7z}dK&_`cVgE~VFa6+@a>zrS(S(loelY=q zCV-eQ%K`uZ00000002+nE3xlw+giDlBISdy|GC?EkXU-0mY+}WfL88>L#*T-mkek=;}lQ#hb!*j5hqINq8pTvLR=){O%BBhiV zqpMM@r8%I6Tz_WpffEF^l4buQo+IPC^@i8}N2Cv=)ttrJ50qLl?SuVV!pmvq?IVn< z3^&I3K((6c12toFA(8W52HsaSQ5SYY4*ljN;FiLkdgv%~7o?Ue>b6AYQci6{7j3Dr zrXT* z9?LT%0jGNhoVCcCD@nQ!;@$!3a<3lkKl@^^cDL7>Z>@2RzXqMeC=O@|alAF&-Qh;-!+V^MAFf`t-F-XTGBv&g8Dw zKY#9<<>zqrx4Urj3R$Yl2Rk5>&21Q^ToT91(3&%=sVJ6kKuxo(Z0t3&5-p==#xWng z3I@u}&jx7mnHz|H;vTieMlq zB_E@UD%MsUkbfnY6?|Zbpjxo(CG?zL-_19?*FQXc&|A%ztZkuG)3hhs)iQ6Vn739K z_g-%F@quVH(FbD0=0-fneJ{N4VxZ3Lh79V(iNh_qJ$2Jid+&kc`MgDo-KRgiYHv+^VFCOhbJ2_}e%z9FK=k+B300000ycm(+3n~m1e{F{~ z89dO=V?41h`^6Rm3^jjV`Zodqu`Ktgg2G+aS-hLC;(%VyF+R{?{87wVnIBb41W(26 R>B0a2002ovPDHLkV1n!=5pVzi diff --git a/tests/snapshots/nanox/test_menu_settings/00008.png b/tests/snapshots/nanox/test_menu_settings/00008.png index 3d0298af9c42369fc3b15bf683fe953270f767b2..e678a8324068e41f8cb784e51d784a5fc7d08879 100644 GIT binary patch delta 644 zcmV-~0(<@01f2ztB!6T{L_t(|ob8-Zmct+jMV*}P#QiU6_A(!y<4{FJYk;=zex=4p zg3-hWX-abLg_jd^$(F65jOcl|kMjo<6u(vDCeJ-b`3Z;5jU6pFhA zr_^2SSebg0RtV+&6r=+v)x~viP=B$$YYwTSN7FINng9R*0Dk}g0C0{UU-NWj+pJgF zLd`;q7P3p|M*sNgRhV8HYxEqsHK8d@i6xh#ZIHrt!0KID5V5>1Ko=U_-6DW;%k z^G}MPh8_tCXy|YM2m>O@6x6tztxz~+F@pC~gb~oQ8WQMVD3wA#-b4Wa0000003H~{ z0~$G=4Fd?0eScH4Z&qkTt~rVgm?dmktb|7wBg9XdYC?pd?3Gu``b0Te--drJ$Xyp) zWl0(mY6`KlgN%gOtNxhEVRxLteOKEk(t_xnp1bF)dn*HqrS|rXDK(!zEDz&%9ewKXaE2J00000pN{GG0e!|*-KC5QY=;CirW2>leGbZ0 zeYx6FX0Fn7ubYlc+(DGw(2C>T=VID4HocRz32fhJ1G*c8c8yV26BDxDgfT8`=I`00000 z00000OmP0cpu$w~m$Ue3p%4uC7TtdXP5LccqL==K0DvzM|Ei#H$~(bt^C%tA>p9AV e>Nk@9S^fZTl~sVx*m)BG0000Ay81=$3UB!3`DL_t(|ob8)kc7z}dMyaPeasNx|Ui!c}Gz}2L3_@)0eR41Y z2KoEKq_mGOLGxC*mg&8$>g(4M7xTHR;LLfRsrCNnd3yX_?&f?9gY?_ow*5*rH$W!4 z+i*&`)$A*m-joKRyq|(JfTXy%bPnmSrtj1vrT2Im#%T!v0Dk}g05Fe_y~WF&t=g|P z6FnO-nb_PyEB)hN@521jn9_6X+>ER|DJwZPmJKOv1B`x^S-!p;Orj}q`%00000J6IGC zP;z`T3}8t1%73!X*2rYkQr=y#L0hpC?!Al=KT&2zgdpFwcgvTVtH)O=bU#|qc3p6k zA!*2Od6OS{LhMm~T*_g0)Zo6iRf=>^^sbpJ`N?dRxSLBkChCLuhkrdcK7waeSk-n#Kt>L}YOzsE z|NeKbI&yK#d{xNr+S}I)^5JXH60S000000002+XZQvZV*w6LeK~6Y O0000p5TvG2Rn?@o^6NNpK8@oaOO&oFma z4@mTCaRu+w3QvF}_e6d;N>53zvE!-ePTR$@A^-pY00000jDP1RvN1Ws%0+o9Br~gr zX*N&I%E=u|S6g`l9wAIq<%}w_$k~u)JXoGvMGMMA-hHPcM*yK(P*smiiM|(a#HDKF z`64uxU(3l=s?q7RqMfj7#Sk5WuHAID7Jd0%KGnbjSZ)kx^~lXgGQAJt#(-+LXPL6sE3o8M1V=x9|aMl8r^62Hv%M{4@NzF195%cQ@IJ?TEDjgt2A*X<9#HGbupID^>npUhz z^*?87IZT?7D`z=?RXV^)mu<{<7ALy1-1h+nuiQkw$`in1h`ken#7k$>0Pw6q0ssI2 h000000002IhF`Ni5wK+KM)?2$002ovPDHLkV1j&Q6tn;U delta 459 zcmV;+0W|*W1mpvdBYy#_Nkl`;b~h`ThTo&S4s zP{0l9u7MTV>TC>m)$O+2Y0cWO>N>5(_}tsQh?G)f6o^vFWZWm6=Xv$zl*Bvsc3*Yj z9v*O6)nkU}ONKi@t0Pfwjy6&{YTfbD45uGrT@e5P004g9M}K5z`VFh@s;@%2aCn&2 z=54cnn=`L(f7MJP%*x6+RrIdOj;xBo>A5VqplajQx25aQT+lEdd2Ouy@Xm87+v6o} z0NRIdn>CxMdmFxXXeYl;k_<_7HuN^_Y}Io1zLr?F<{^Tm`wn;-kvG%&uU!xe#oYnJ zTfQs2!twOsV1NC@d^$Y<00000AwuT^G$+^Jy*kb0{U@{h{scp?6sd^YHHU2kyUc;E z+m#I0=hkDk=YoDx5lPlcim_04Ra4n~-vL+jcb%?Yi9R23J&D$3lagFjmP49rf7cjH zJ`nU=g8%Tb`VwRAbBjZ-Jx+3ForPz$e5Lz44t*Y(XGCS!{y$)CgRe>P|A00Y-IPFk zfVe-0h9ypSk|6p3000000000000000008(`z5qw0O6~eV+7JK$002ovPDHLkV1kYu B;~fA1 diff --git a/tests/snapshots/nanox/test_menu_settings/00010.png b/tests/snapshots/nanox/test_menu_settings/00010.png index 2aa394d95f58df2507c3f3cbdb267ce58c47c4b9..ae682df49eb5e2d8cf52fb4e11e02372783a3f8b 100644 GIT binary patch delta 381 zcmeytG=q79N`1Vii(^Q|oVPcli<%9190F&(^tqxUmt6*yyHq!%UgTZOl!p#Ol$1ZqE`hM z{(34h#jGP`u7h=s({!(o6S%&HzT+?{dc4X%IdI;BSBK@YSyCFaKQNpP32v6QNtEk5 zz3h6TX-LzCZkD;JbN(Ib+x6_jroY+W_8TXy_FGuy{eQzbgQ>CX`B$tyZu8slV)};1 zm&-q|mAzKh^oG4XS0VkbN9?yn(zTD?F-3wIzEAg<3%ho^JCvSS-D@ek`Ru~4U6E!>)%V9UA%dx4e;vcz Wzh6uC{5B2*iF&&FxvXh;sJ-TJ z-ODdgmb|(1Z!fXu$c%V=VEGTNy`>rXYH`c&RvvBL{@de@rd*)U`-;o%g5jyhKc(lb zU`VPu`CYa7Z`i`)(SEflD;OT1Je7UfqxUmt6*yyHq!%UgTZOl!p#Ol$1ZqE`hM z{(34h#jGP`u7h=s({!(o6S%&HzT+?{dc4X%IdI;BSBK@YSyCFaKQNpP32v6QNtEk5 zz3h6TX-LzCZkD;JbN(Ib+x6_jroY+W_8TXy_FGuy{eQzbgQ>CX`B$tyZu8slV)};1 zm&-q|mAzKh^oG4XS0VkbN9?yn(zTD?F-3wIzEAg<3%ho^JCvSS-D@ek`Ru~4U6E!>)%V9UA%dx4e;vcz Wzh6uC{5B2*iF&&FxvXh;sJ-TJ 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 CQnJPX literal 9595 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 m{SRL3Z=3D@ZkiI literal 11641 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 Wjx)=zA2?DCGBL8eUU$_!;lBY@&*}02 From dc6b5254d0f9b31a4dc36084c27dd68545a3ca54 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 14 Mar 2024 16:15:28 +0100 Subject: [PATCH 68/75] Update version --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b867aef..da59afa 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ APPNAME = OpenPGP # Application version APPVERSION_M = 2 APPVERSION_N = 2 -APPVERSION_P = 0 +APPVERSION_P = 1 APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" SPECVERSION:="3.3.1" From 3847b0636d7d6ff7f9b12012cb45bf800229b119 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 21 Mar 2024 12:05:01 +0100 Subject: [PATCH 69/75] Add inline comment for functions description --- src/gpg_api.h | 45 +++++++- src/gpg_challenge.c | 6 ++ src/gpg_data.c | 62 +++++++++++- src/gpg_dispatch.c | 28 ++++- src/gpg_gen.c | 67 ++++++++++-- src/gpg_init.c | 51 ++++++++++ src/gpg_io.c | 158 +++++++++++++++++++++++++++++ src/gpg_mse.c | 17 ++++ src/gpg_pin.c | 87 ++++++++++++++++ src/gpg_pso.c | 24 +++++ src/gpg_select.c | 6 ++ src/gpg_ux.c | 4 + src/gpg_ux_nanos.c | 202 ++++++++++++++++++++++++++++++++++++ src/gpg_ux_nanox.c | 242 +++++++++++++++++++++++++++++++++++++++++++- src/gpg_ux_nbgl.c | 226 +++++++++++++++++++++++++++++++++++++---- 15 files changed, 1183 insertions(+), 42 deletions(-) diff --git a/src/gpg_api.h b/src/gpg_api.h index 29b3897..17c71cc 100644 --- a/src/gpg_api.h +++ b/src/gpg_api.h @@ -18,18 +18,28 @@ #ifndef GPG_API_H #define GPG_API_H -void gpg_activate_pinpad(uint8_t enabled); +/* ----------------------------------------------------------------------- */ +/* --- INIT ---- */ +/* ----------------------------------------------------------------------- */ +void gpg_activate_pinpad(uint8_t enabled); unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len); unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len); unsigned int gpg_curve2domainlen(unsigned int cv); void gpg_init(void); -void gpg_init_ux(void); void gpg_install(unsigned char app_state); -void gpg_install_slot(gpg_key_slot_t *slot); + +/* ----------------------------------------------------------------------- */ +/* --- DISPATCH ---- */ +/* ----------------------------------------------------------------------- */ + int gpg_dispatch(void); +/* ----------------------------------------------------------------------- */ +/* --- DATA ---- */ +/* ----------------------------------------------------------------------- */ + void gpg_apdu_select_data(unsigned int ref, int record); int gpg_apdu_get_data(unsigned int ref); int gpg_apdu_get_next_data(unsigned int ref); @@ -37,6 +47,10 @@ int gpg_apdu_put_data(unsigned int ref); int gpg_apdu_get_key_data(unsigned int ref); int gpg_apdu_put_key_data(unsigned int ref); +/* ----------------------------------------------------------------------- */ +/* --- PSO ---- */ +/* ----------------------------------------------------------------------- */ + int gpg_pso_derive_slot_seed(int slot, unsigned char *seed); int gpg_pso_derive_key_seed(unsigned char *Sn, unsigned char *key_name, @@ -45,27 +59,48 @@ int gpg_pso_derive_key_seed(unsigned char *Sn, unsigned int Ski_len); int gpg_apdu_pso(void); int gpg_apdu_internal_authenticate(void); + +/* ----------------------------------------------------------------------- */ +/* --- GEN ---- */ +/* ----------------------------------------------------------------------- */ + int gpg_apdu_gen(void); + +/* ----------------------------------------------------------------------- */ +/* --- CHALLENGE ---- */ +/* ----------------------------------------------------------------------- */ + int gpg_apdu_get_challenge(void); +/* ----------------------------------------------------------------------- */ +/* --- SELECT ---- */ +/* ----------------------------------------------------------------------- */ + int gpg_apdu_select(void); +/* ----------------------------------------------------------------------- */ +/* --- PIN ---- */ +/* ----------------------------------------------------------------------- */ + int gpg_apdu_verify(void); int gpg_apdu_change_ref_data(void); int gpg_apdu_reset_retry_counter(void); gpg_pin_t *gpg_pin_get_pin(int id); -int gpg_pin_is_blocked(gpg_pin_t *pin); int gpg_pin_is_verified(int pinID); void gpg_pin_set_verified(int pinID, int verified); int gpg_pin_check(gpg_pin_t *pin, int pinID, const unsigned char *pin_val, unsigned int pin_len); int gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len); +/* ----------------------------------------------------------------------- */ +/* --- MSE ---- */ +/* ----------------------------------------------------------------------- */ + void gpg_mse_reset(); int gpg_apdu_mse(); /* ----------------------------------------------------------------------- */ -/* --- IO ---- */ +/* --- IO ---- */ /* ----------------------------------------------------------------------- */ void gpg_io_discard(int clear); void gpg_io_clear(void); diff --git a/src/gpg_challenge.c b/src/gpg_challenge.c index 4ad0889..d4c7260 100644 --- a/src/gpg_challenge.c +++ b/src/gpg_challenge.c @@ -18,6 +18,12 @@ #include "gpg_vars.h" #include "cx_errors.h" +/** + * Generate a Random Number + * + * @return Status Word + * + */ int gpg_apdu_get_challenge() { unsigned int olen; cx_err_t error = CX_INTERNAL_ERROR; diff --git a/src/gpg_data.c b/src/gpg_data.c index be17673..436bde8 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -19,12 +19,27 @@ #include "gpg_ux.h" #include "cx_errors.h" +/** + * Select a DO (Data Object) in the current template + * + * @param[in] ref DO tag + * @param[in] record Offset of the record + * + */ void gpg_apdu_select_data(unsigned int ref, int record) { G_gpg_vstate.DO_current = ref; G_gpg_vstate.DO_reccord = record; G_gpg_vstate.DO_offset = 0; } +/** + * Read a DO (Data Object) from the card + * + * @param[in] ref DO tag + * + * @return Status Word + * + */ int gpg_apdu_get_data(unsigned int ref) { int sw = SW_UNKNOWN; @@ -211,6 +226,14 @@ int gpg_apdu_get_data(unsigned int ref) { return sw; } +/** + * Read the next instance of the same DO (Data Object) from the card + * + * @param[in] ref DO tag + * + * @return Status Word + * + */ int gpg_apdu_get_next_data(unsigned int ref) { int sw = SW_UNKNOWN; @@ -224,6 +247,14 @@ int gpg_apdu_get_next_data(unsigned int ref) { return sw; } +/** + * Write a DO (Data Object) to the card + * + * @param[in] ref DO tag + * + * @return Status Word + * + */ int gpg_apdu_put_data(unsigned int ref) { unsigned int t, l, sw; unsigned int *ptr_l = NULL; @@ -799,6 +830,15 @@ int gpg_apdu_put_data(unsigned int ref) { return error; } +/** + * Init an encryption key to protect Private Key + * Used for Backup/Restore + * + * @param[out] keyenc aes encryption key + * + * @return Status Word + * + */ static int gpg_init_keyenc(cx_aes_key_t *keyenc) { int sw = SW_UNKNOWN; unsigned char seed[32]; @@ -821,8 +861,15 @@ static int gpg_init_keyenc(cx_aes_key_t *keyenc) { return SW_OK; } -// cmd -// resp TID API COMPAT len_pub len_priv priv +/** + * Read a Key DO (Data Object) from the card + * for Backup + * + * @param[in] ref DO tag + * + * @return Status Word + * + */ int gpg_apdu_get_key_data(unsigned int ref) { cx_aes_key_t keyenc = {0}; gpg_key_t *keygpg = NULL; @@ -932,8 +979,15 @@ int gpg_apdu_get_key_data(unsigned int ref) { return error; } -// cmd TID API COMPAT len_pub len_priv priv -// resp - +/** + * Write a key DO (Data Object) to the card + * For Restore + * + * @param[in] ref DO tag + * + * @return Status Word + * + */ int gpg_apdu_put_key_data(unsigned int ref) { cx_aes_key_t keyenc = {0}; gpg_key_t *keygpg = NULL; diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index b92fddf..6f2eed3 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -17,6 +17,13 @@ #include "gpg_vars.h" +/** + * Check INS access condition + * Verify if the corresponding PW is verified + * + * @return Status Word + * + */ static int gpg_check_access_ins() { int sw = SW_UNKNOWN; @@ -92,6 +99,13 @@ static int gpg_check_access_ins() { return sw; } +/** + * Check INS Read access condition + * Verify if the corresponding PW is verified + * + * @return Status Word + * + */ static int gpg_check_access_read_DO() { int sw = SW_UNKNOWN; @@ -163,6 +177,13 @@ static int gpg_check_access_read_DO() { return sw; } +/** + * Check INS Write access condition + * Verify if the corresponding PW is verified + * + * @return Status Word + * + */ static int gpg_check_access_write_DO() { int sw = SW_UNKNOWN; @@ -228,7 +249,12 @@ static int gpg_check_access_write_DO() { return sw; } -/* assume command is fully received */ +/** + * APDU Handler: dispatch command + * + * @return Status Word + * + */ int gpg_dispatch() { unsigned int tag, t, l; int sw = SW_UNKNOWN; diff --git a/src/gpg_gen.c b/src/gpg_gen.c index ccf8804..bd9b451 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -19,8 +19,14 @@ #include "cx_ram.h" #include "cx_errors.h" -/* @in slot slot num [0 ; GPG_KEYS_SLOTS[ - * @out seed 32 bytes master seed for given slot +/** + * Derivate the App Path from the Master Seed for a specific slot + * + * @param[in] slot Selected slot + * @param[out] seed 32 bytes seed for given slot + * + * @return Status Word + * */ int gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { unsigned int path[2]; @@ -39,11 +45,17 @@ int gpg_pso_derive_slot_seed(int slot, unsigned char *seed) { return SW_OK; } -/* @in Sn master seed slot number - * @in key_name key name: 'sig ', 'auth ', 'dec ' - * @in idx sub-seed index - * @out Ski generated sub_seed - * @in Ski_len sub-seed length +/** + * Derivate the Key from the Generated Seed + * + * @param[in] Sn Seed for the selected slot + * @param[in] key_name key name: 'sig ', 'auth ', 'dec ' + * @param[in] idx sub-seed index + * @param[out] Ski generated sub_seed + * @param[in] Ski_len sub-seed length + * + * @return Status Word + * */ int gpg_pso_derive_key_seed(unsigned char *Sn, unsigned char *key_name, @@ -74,6 +86,15 @@ int gpg_pso_derive_key_seed(unsigned char *Sn, return SW_OK; } +/** + * Generate a RSA key pair and writes it in NVRam + * + * @param[in] keygpg pointer on key structure + * @param[in] name key name: 'sig ', 'auth ', 'dec ' + * + * @return Status Word + * + */ static int gpg_gen_rsa_kyey(gpg_key_t *keygpg, uint8_t *name) { cx_rsa_public_key_t *rsa_pub = NULL; cx_rsa_private_key_t *rsa_priv = NULL; @@ -146,6 +167,14 @@ static int gpg_gen_rsa_kyey(gpg_key_t *keygpg, uint8_t *name) { return error; } +/** + * Read a RSA key pair + * + * @param[in] keygpg pointer on key structure + * + * @return Status Word + * + */ static int gpg_read_rsa_kyey(gpg_key_t *keygpg) { uint32_t ksz = 0; @@ -182,6 +211,15 @@ static int gpg_read_rsa_kyey(gpg_key_t *keygpg) { return SW_OK; } +/** + * Generate an Elliptic Curve key pair and writes it in NVRam + * + * @param[in] keygpg pointer on key structure + * @param[in] name key name: 'sig ', 'auth ', 'dec ' + * + * @return Status Word + * + */ static int gpg_gen_ecc_kyey(gpg_key_t *keygpg, uint8_t *name) { uint32_t curve = 0, keepprivate = 0; uint32_t ksz = 0, reset_cnt = 0; @@ -225,6 +263,14 @@ static int gpg_gen_ecc_kyey(gpg_key_t *keygpg, uint8_t *name) { return error; } +/** + * Read an Elliptic Curve key pair + * + * @param[in] keygpg pointer on key structure + * + * @return Status Word + * + */ static int gpg_read_ecc_kyey(gpg_key_t *keygpg) { uint32_t curve = 0; uint32_t i, len; @@ -262,7 +308,12 @@ static int gpg_read_ecc_kyey(gpg_key_t *keygpg) { return error; } -/* assume command is fully received */ +/** + * APDU handler to Generate/Read key pair + * + * @return Status Word + * + */ int gpg_apdu_gen() { uint32_t t, l; gpg_key_t *keygpg = NULL; diff --git a/src/gpg_init.c b/src/gpg_init.c index 5b3cdd4..ee9d35d 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -91,6 +91,15 @@ const unsigned char C_OID_cv25519[10] = { 0x01, }; +/** + * Retrieve Curve associated to a given OID + * + * @param[in] oid Selected OID as a reference + * @param[in] len OID length + * + * @return Found Curve, or CX_CURVE_NONE if not supported + * + */ unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len) { if ((len == sizeof(C_OID_SECP256R1)) && (memcmp(oid, C_OID_SECP256R1, len) == 0)) { return CX_CURVE_SECP256R1; @@ -131,6 +140,15 @@ unsigned int gpg_oid2curve(unsigned char *oid, unsigned int len) { return CX_CURVE_NONE; } +/** + * Retrieve OID of the selected Curve + * + * @param[in] cv Selected Curve as a reference + * @param[out] len OID length + * + * @return Found OID, or NULL if not supported + * + */ unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len) { switch (cv) { case CX_CURVE_SECP256R1: @@ -175,6 +193,14 @@ unsigned char *gpg_curve2oid(unsigned int cv, unsigned int *len) { return NULL; } +/** + * Retrieve the selected Curve length + * + * @param[in] cv Selected Curve as a reference + * + * @return Length, or 0 if not supported + * + */ unsigned int gpg_curve2domainlen(unsigned int cv) { switch (cv) { case CX_CURVE_SECP256K1: @@ -341,6 +367,10 @@ const unsigned char C_sha256_PW2[] = { /* --- boot init --- */ /* ----------------------------------------------------------------------- */ +/** + * App global config + * + */ void gpg_init() { explicit_bzero(&G_gpg_vstate, sizeof(gpg_v_state_t)); // first init ? @@ -370,6 +400,13 @@ void gpg_init_ux() { /* ----------------------------------------------------------------------- */ /* --- Install/ReInstall GPGapp --- */ /* ----------------------------------------------------------------------- */ + +/** + * App dedicated slot config + * + * @param[in] slot Selected slot to configure + * + */ void gpg_install_slot(gpg_key_slot_t *slot) { unsigned char tmp[4]; unsigned int l; @@ -396,6 +433,12 @@ void gpg_install_slot(gpg_key_slot_t *slot) { nvm_write((void *) (&slot->aut.UIF), &tmp, 2); } +/** + * App 1st installation or reinstallation + * + * @param[in] app_state Current App (card) state + * + */ void gpg_install(unsigned char app_state) { gpg_pin_t pin; @@ -459,6 +502,14 @@ void gpg_install(unsigned char app_state) { } } +/** + * Setup pinpad configuration + * + * @param[in] enabled pinpad configuration + * + * @return N/A + * + */ void gpg_activate_pinpad(uint8_t enabled) { uint8_t e = enabled ? 3 : 0; diff --git a/src/gpg_io.c b/src/gpg_io.c index dbaa8a5..96c63e9 100644 --- a/src/gpg_io.c +++ b/src/gpg_io.c @@ -30,6 +30,12 @@ /* MISC */ /* ----------------------------------------------------------------------- */ +/** + * Set Offset in APDU buffer + * + * @param[in] offset value to set + * + */ void gpg_io_set_offset(unsigned int offset) { switch (offset) { case IO_OFFSET_END: @@ -45,15 +51,32 @@ void gpg_io_set_offset(unsigned int offset) { } } +/** + * Mark current offset in APDU buffer + * + */ void gpg_io_mark() { G_gpg_vstate.io_mark = G_gpg_vstate.io_offset; } +/** + * Shift empty space in APDU buffer + * + * @param[in] len space length + * + */ void gpg_io_inserted(unsigned int len) { G_gpg_vstate.io_offset += len; G_gpg_vstate.io_length += len; } +/** + * Discard APDU buffer values + * Set Length, Offset and Mark to 0 + * + * @param[in] clear request to fully zeroed the buffer + * + */ void gpg_io_discard(int clear) { G_gpg_vstate.io_length = 0; G_gpg_vstate.io_offset = 0; @@ -63,6 +86,10 @@ void gpg_io_discard(int clear) { } } +/** + * Clear (zeroed) the APDU buffer + * + */ void gpg_io_clear() { explicit_bzero(G_gpg_vstate.work.io_buffer, GPG_IO_BUFFER_LENGTH); } @@ -71,6 +98,12 @@ void gpg_io_clear() { /* INSERT data to be sent */ /* ----------------------------------------------------------------------- */ +/** + * Move APDU buffer content after a hole + * + * @param[in] sz hole length + * + */ static void gpg_io_hole(unsigned int sz) { LEDGER_ASSERT((G_gpg_vstate.io_length + sz) <= GPG_IO_BUFFER_LENGTH, "Bad hole!"); memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset + sz, @@ -79,18 +112,37 @@ static void gpg_io_hole(unsigned int sz) { G_gpg_vstate.io_length += sz; } +/** + * Insert a data buffer into the APDU buffer + * + * @param[in] buff data buffer + * @param[in] len buffer length + * + */ void gpg_io_insert(unsigned char const *buff, unsigned int len) { gpg_io_hole(len); memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, buff, len); G_gpg_vstate.io_offset += len; } +/** + * Insert a u32 value into the APDU buffer + * + * @param[in] v32 value to insert + * + */ void gpg_io_insert_u32(unsigned int v32) { gpg_io_hole(4); U4BE_ENCODE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset, v32); G_gpg_vstate.io_offset += 4; } +/** + * Insert a u24 value into the APDU buffer + * + * @param[in] v24 value to insert + * + */ void gpg_io_insert_u24(unsigned int v24) { gpg_io_hole(3); G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v24 >> 16; @@ -98,17 +150,38 @@ void gpg_io_insert_u24(unsigned int v24) { G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 2] = v24 >> 0; G_gpg_vstate.io_offset += 3; } + +/** + * Insert a u16 value into the APDU buffer + * + * @param[in] v16 value to insert + * + */ void gpg_io_insert_u16(unsigned int v16) { gpg_io_hole(2); U2BE_ENCODE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset, v16); G_gpg_vstate.io_offset += 2; } + +/** + * Insert a u8 value into the APDU buffer + * + * @param[in] v8 value to insert + * + */ void gpg_io_insert_u8(unsigned int v8) { gpg_io_hole(1); G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] = v8; G_gpg_vstate.io_offset += 1; } +/** + * Insert a TAG into the APDU buffer + * (To handle TLV) + * + * @param[in] T tag to insert + * + */ void gpg_io_insert_t(unsigned int T) { if (T & 0xFF00) { gpg_io_insert_u16(T); @@ -117,6 +190,14 @@ void gpg_io_insert_t(unsigned int T) { } } +/** + * Insert a TAG/LENGTH into the APDU buffer + * (To handle TLV) + * + * @param[in] T tag to insert + * @param[in] L length to insert + * + */ void gpg_io_insert_tl(unsigned int T, unsigned int L) { gpg_io_insert_t(T); if (L < 128) { @@ -129,6 +210,15 @@ void gpg_io_insert_tl(unsigned int T, unsigned int L) { } } +/** + * Insert a TAG/LENGTH/VALUE into the APDU buffer + * (To handle TLV) + * + * @param[in] T tag to insert + * @param[in] L length to insert + * @param[in] V data to insert + * + */ void gpg_io_insert_tlv(unsigned int T, unsigned int L, unsigned char const *V) { gpg_io_insert_tl(T, L); gpg_io_insert(V, L); @@ -138,6 +228,12 @@ void gpg_io_insert_tlv(unsigned int T, unsigned int L, unsigned char const *V) { /* FECTH data from received buffer */ /* ----------------------------------------------------------------------- */ +/** + * Read a u32 value from the APDU buffer + * + * @return value retrieved + * + */ unsigned int gpg_io_fetch_u32() { unsigned int v32; v32 = U4BE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset); @@ -145,6 +241,12 @@ unsigned int gpg_io_fetch_u32() { return v32; } +/** + * Read a u24 value from the APDU buffer + * + * @return value retrieved + * + */ unsigned int gpg_io_fetch_u24() { unsigned int v24; v24 = ((G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset + 0] << 16) | @@ -154,6 +256,12 @@ unsigned int gpg_io_fetch_u24() { return v24; } +/** + * Read a u16 value from the APDU buffer + * + * @return value retrieved + * + */ unsigned int gpg_io_fetch_u16() { unsigned int v16; v16 = U2BE(G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_offset); @@ -161,6 +269,12 @@ unsigned int gpg_io_fetch_u16() { return v16; } +/** + * Read a u8 value from the APDU buffer + * + * @return value retrieved + * + */ unsigned int gpg_io_fetch_u8() { unsigned int v8; v8 = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; @@ -168,6 +282,13 @@ unsigned int gpg_io_fetch_u8() { return v8; } +/** + * Read a TAG from the APDU buffer + * (To handle TLV) + * + * @param[out] T read tag + * + */ void gpg_io_fetch_t(unsigned int *T) { *T = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; G_gpg_vstate.io_offset++; @@ -177,6 +298,13 @@ void gpg_io_fetch_t(unsigned int *T) { } } +/** + * Read a LENGTH from the APDU buffer + * (To handle TLV) + * + * @param[out] L read length + * + */ void gpg_io_fetch_l(unsigned int *L) { *L = G_gpg_vstate.work.io_buffer[G_gpg_vstate.io_offset]; @@ -196,16 +324,40 @@ void gpg_io_fetch_l(unsigned int *L) { } } +/** + * Read a TAG/LENGTH from the APDU buffer + * (To handle TLV) + * + * @param[out] T read tag + * @param[out] L read length + * + */ void gpg_io_fetch_tl(unsigned int *T, unsigned int *L) { gpg_io_fetch_t(T); gpg_io_fetch_l(L); } +/** + * Read a buffer from the APDU buffer and write it in NVRam + * (To handle TLV) + * + * @param[in] buffer NVRAM address + * @param[in] len buffer length + * + */ void gpg_io_fetch_nv(unsigned char *buffer, int len) { nvm_write(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); G_gpg_vstate.io_offset += len; } +/** + * Read a buffer from the APDU buffer + * (To handle TLV) + * + * @param[out] buffer data buffer + * @param[in] len buffer length + * + */ int gpg_io_fetch(unsigned char *buffer, int len) { if (buffer) { memmove(buffer, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, len); @@ -220,6 +372,12 @@ int gpg_io_fetch(unsigned char *buffer, int len) { #define MAX_OUT GPG_APDU_LENGTH +/** + * APDU Receive/transmit + * + * @param[in] flag io buffer flag + * + */ void gpg_io_do(unsigned int io_flags) { unsigned int rx = 0; diff --git a/src/gpg_mse.c b/src/gpg_mse.c index ebd4d72..83d79ac 100644 --- a/src/gpg_mse.c +++ b/src/gpg_mse.c @@ -17,6 +17,13 @@ #include "gpg_vars.h" +/** + * Set a new MSE configuration + * + * @param[in] crt selected key + * @param[in] ref new operation type + * + */ static void gpg_mse_set(int crt, int ref) { if (crt == KEY_AUT) { if (ref == 0x02) { @@ -37,11 +44,21 @@ static void gpg_mse_set(int crt, int ref) { } } +/** + * Reset MSE config + * + */ void gpg_mse_reset() { gpg_mse_set(KEY_AUT, 0x03); gpg_mse_set(KEY_DEC, 0x02); } +/** + * APDU handler to Manage Security Environment + * + * @return Status Word + * + */ int gpg_apdu_mse() { int crt, ref; diff --git a/src/gpg_pin.c b/src/gpg_pin.c index 60aa810..7f74d3c 100644 --- a/src/gpg_pin.c +++ b/src/gpg_pin.c @@ -18,6 +18,14 @@ #include "gpg_vars.h" #include "gpg_ux.h" +/** + * Get Pin structure from reference ID value + * + * @param[in] pinref PinCode reference ID + * + * @return Pin structure, or NULL if invalid + * + */ gpg_pin_t *gpg_pin_get_pin(int pinref) { switch (pinref) { case PIN_ID_PW1: @@ -31,6 +39,14 @@ gpg_pin_t *gpg_pin_get_pin(int pinref) { return NULL; } +/** + * Get Pin index from reference ID value + * + * @param[in] pinref PinCode reference ID + * + * @return Pin index + * + */ static int gpg_pin_get_state_index(unsigned int pinref) { switch (pinref) { case PIN_ID_PW1: @@ -45,6 +61,16 @@ static int gpg_pin_get_state_index(unsigned int pinref) { return -1; } +/** + * Compare the PinCode hash and handle the associated counter + * + * @param[in] pin PinCode reference to check + * @param[in] pin_val PinCode value + * @param[in] pin_len PinCode length + * + * @return Status Word + * + */ static int gpg_pin_check_internal(gpg_pin_t *pin, const unsigned char *pin_val, int pin_len) { unsigned int counter; cx_err_t error = CX_INTERNAL_ERROR; @@ -75,6 +101,16 @@ static int gpg_pin_check_internal(gpg_pin_t *pin, const unsigned char *pin_val, return error; } +/** + * Check the PinCode value and set verification status + * + * @param[in] pin PinCode reference to check + * @param[in] pin_val PinCode value + * @param[in] pin_len PinCode length + * + * @return Status Word + * + */ int gpg_pin_check(gpg_pin_t *pin, int pinID, const unsigned char *pin_val, unsigned int pin_len) { int sw = SW_UNKNOWN; gpg_pin_set_verified(pinID, 0); @@ -85,6 +121,16 @@ int gpg_pin_check(gpg_pin_t *pin, int pinID, const unsigned char *pin_val, unsig return sw; } +/** + * Set the PinCode value in NVRam + * + * @param[in] pin PinCode reference to set + * @param[in] pin_val PinCode value + * @param[in] pin_len PinCode length + * + * @return Status Word + * + */ int gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len) { cx_sha256_t sha256; cx_err_t error = CX_INTERNAL_ERROR; @@ -103,6 +149,13 @@ int gpg_pin_set(gpg_pin_t *pin, unsigned char *pin_val, unsigned int pin_len) { return SW_OK; } +/** + * Change the Pin verification status + * + * @param[in] pinID PinCode ID to change + * @param[in] verified new status + * + */ void gpg_pin_set_verified(int pinID, int verified) { int idx; idx = gpg_pin_get_state_index(pinID); @@ -111,6 +164,14 @@ void gpg_pin_set_verified(int pinID, int verified) { } } +/** + * Check if the selected Pin is verified + * + * @param[in] pinID PinCode ID to check + * + * @return 0 or 1 (false or true) + * + */ int gpg_pin_is_verified(int pinID) { int idx; idx = gpg_pin_get_state_index(pinID); @@ -120,10 +181,24 @@ int gpg_pin_is_verified(int pinID) { return 0; } +/** + * Check if the selected Pin is blocked + * + * @param[in] pin PinCode reference to check + * + * @return 0 or 1 (false or true) + * + */ int gpg_pin_is_blocked(gpg_pin_t *pin) { return pin->counter == 0; } +/** + * APDU handler to Verify PinCode + * + * @return Status Word + * + */ int gpg_apdu_verify() { int sw = SW_UNKNOWN; gpg_pin_t *pin; @@ -196,6 +271,12 @@ int gpg_apdu_verify() { return SW_WRONG_DATA; } +/** + * APDU handler to Change PinCode + * + * @return Status Word + * + */ int gpg_apdu_change_ref_data() { int sw = SW_UNKNOWN; gpg_pin_t *pin; @@ -237,6 +318,12 @@ int gpg_apdu_change_ref_data() { return sw; } +/** + * APDU handler to Reste PinCode or Counter + * + * @return Status Word + * + */ int gpg_apdu_reset_retry_counter() { int sw = SW_UNKNOWN; gpg_pin_t *pin_pw1; diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 82d4b24..ae80d9d 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -58,12 +58,24 @@ const unsigned char gpg_oid_sha512[] = {0x30, 0x04, 0x40}; +/** + * Reset PW1 verified status + * + */ static void gpg_pso_reset_PW1() { if (N_gpg_pstate->PW_status[0] == 0) { gpg_pin_set_verified(PIN_ID_PW1, 0); } } +/** + * Perform a Digital Signature + * + * @param[in] sigKey signing key + * + * @return Status Word + * + */ static int gpg_sign(gpg_key_t *sigkey) { cx_err_t error = CX_INTERNAL_ERROR; if (sigkey->attributes.value[0] == KEY_ID_RSA) { @@ -180,6 +192,12 @@ static int gpg_sign(gpg_key_t *sigkey) { return error; } +/** + * APDU handler to Perform Security Operation + * + * @return Status Word + * + */ int gpg_apdu_pso() { unsigned int t, l, ksz; cx_err_t error = CX_INTERNAL_ERROR; @@ -387,6 +405,12 @@ int gpg_apdu_pso() { return error; } +/** + * APDU handler to Internal Authentication + * + * @return Status Word + * + */ int gpg_apdu_internal_authenticate() { // --- PSO:AUTH --- if (G_gpg_vstate.kslot->aut.UIF[0]) { diff --git a/src/gpg_select.c b/src/gpg_select.c index 32b5207..80d3ec2 100644 --- a/src/gpg_select.c +++ b/src/gpg_select.c @@ -20,6 +20,12 @@ const unsigned char C_MF[] = {0x3F, 0x00}; const unsigned char C_ATR[] = {0x2F, 0x02}; +/** + * APDU handler to Select the card + * + * @return Status Word + * + */ int gpg_apdu_select() { int sw = SW_UNKNOWN; diff --git a/src/gpg_ux.c b/src/gpg_ux.c index a175f9e..98b271b 100644 --- a/src/gpg_ux.c +++ b/src/gpg_ux.c @@ -18,6 +18,10 @@ #include "usbd_ccid_if.h" +/** + * Reset CCID + * + */ void ui_CCID_reset(void) { io_usb_ccid_set_card_inserted(0); io_usb_ccid_set_card_inserted(1); diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index c26692b..918436d 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -39,6 +39,14 @@ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int bu /* ------------------------------- Helpers UX ------------------------------- */ +/** + * Display popup message on screen + * + * @param[in] msg1 1st part of the message + * @param[in] msg2 2nd part of the message + * @param[in] menu_display next page display callback + * + */ void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { explicit_bzero(&G_gpg_vstate.ui_dogsays[0], sizeof(ux_menu_entry_t)); G_gpg_vstate.ui_dogsays[0].callback = menu_display; @@ -95,11 +103,25 @@ const bagl_element_t ui_uifconfirm_action[] = { G_gpg_vstate.menu}, }; +/** + * UIF page display + * + * @param[in] value unused + * + */ void ui_menu_uifconfirm_display(unsigned int value) { UNUSED(value); UX_DISPLAY(ui_uifconfirm_action, (void *) ui_uifconfirm_predisplay); } +/** + * UIF page display preparation callback + * + * @param[in] element selected element to display + * + * @return Error code + * + */ unsigned int ui_uifconfirm_predisplay(const bagl_element_t *element) { explicit_bzero(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu)); @@ -140,6 +162,15 @@ unsigned int ui_uifconfirm_predisplay(const bagl_element_t *element) { return 1; } +/** + * UIF page Action callback + * + * @param[in] button_mask selected button + * @param[in] button_mask_counter unused + * + * @return Error code + * + */ unsigned int ui_uifconfirm_action_button(unsigned int button_mask, unsigned int button_mask_counter) { UNUSED(button_mask_counter); @@ -216,6 +247,14 @@ const bagl_element_t ui_pinconfirm_action[] = { G_gpg_vstate.menu}, }; +/** + * Pin Confirm display preparation callback + * + * @param[in] element selected element to display + * + * @return Error code + * + */ unsigned int ui_pinconfirm_predisplay(const bagl_element_t *element) { if (element->component.userid == 1) { if ((G_gpg_vstate.io_p2 == PIN_ID_PW1) || (G_gpg_vstate.io_p2 == PIN_ID_PW2) || @@ -239,11 +278,26 @@ unsigned int ui_pinconfirm_predisplay(const bagl_element_t *element) { return 1; } +/** + * Pin Confirm page display + * + * @param[in] value unused + * + */ void ui_menu_pinconfirm_display(unsigned int value) { UNUSED(value); UX_DISPLAY(ui_pinconfirm_action, (void *) ui_pinconfirm_predisplay); } +/** + * Pin Confirm Action callback + * + * @param[in] button_mask selected button + * @param[in] button_mask_counter unused + * + * @return Error code + * + */ unsigned int ui_pinconfirm_action_button(unsigned int button_mask, unsigned int button_mask_counter) { UNUSED(button_mask_counter); @@ -317,6 +371,14 @@ const bagl_element_t ui_pinentry_action[] = { static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '<', 'A', 'V'}; +/** + * Pin Entry display preparation callback + * + * @param[in] element selected element to display + * + * @return Error code + * + */ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { if (element->component.userid == 1) { if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { @@ -368,6 +430,12 @@ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { return 1; } +/** + * Pin Entry page display + * + * @param[in] value indicate if pin is reset + * + */ void ui_menu_pinentry_display(unsigned int value) { if (value == 0) { explicit_bzero(G_gpg_vstate.ux_pinentry, sizeof(G_gpg_vstate.ux_pinentry)); @@ -377,6 +445,10 @@ void ui_menu_pinentry_display(unsigned int value) { UX_DISPLAY(ui_pinentry_action, (void *) ui_pinentry_predisplay); } +/** + * Pin Entry Validation callback + * + */ static void validate_pin() { unsigned int offset, len, sw = SW_UNKNOWN; gpg_pin_t *pin; @@ -452,6 +524,15 @@ static void validate_pin() { } } +/** + * Pin Entry page Action callback + * + * @param[in] button_mask selected button + * @param[in] button_mask_counter unused + * + * @return Error code + * + */ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter) { UNUSED(button_mask_counter); unsigned int offset = G_gpg_vstate.ux_pinLen; @@ -541,6 +622,15 @@ const ux_menu_entry_t ui_menu_tmpl_type[] = { {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; +/** + * Template page display preparation callback + * + * @param[in] entry selected menu to display + * @param[in] element selected element to display + * + * @return Eelement to display + * + */ const bagl_element_t *ui_menu_template_predisplay(const ux_menu_entry_t *entry, bagl_element_t *element) { if (element->component.userid == 0x20) { @@ -593,10 +683,22 @@ const bagl_element_t *ui_menu_template_predisplay(const ux_menu_entry_t *entry, return element; } +/** + * Template page display + * + * @param[in] value flow step + * + */ void ui_menu_template_display(unsigned int value) { UX_MENU_DISPLAY(value, ui_menu_template, ui_menu_template_predisplay); } +/** + * Template Action callback + * + * @param[in] value unused + * + */ void ui_menu_tmpl_set_action(unsigned int value) { UNUSED(value); LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); @@ -674,11 +776,23 @@ void ui_menu_tmpl_set_action(unsigned int value) { } } +/** + * Key Name Template Action callback + * + * @param[in] value selected key + * + */ void ui_menu_tmpl_key_action(unsigned int value) { G_gpg_vstate.ux_key = value; ui_menu_template_display(0); } +/** + * Key Type Template Action callback + * + * @param[in] value selected key + * + */ void ui_menu_tmpl_type_action(unsigned int value) { G_gpg_vstate.ux_type = value; ui_menu_template_display(1); @@ -693,6 +807,15 @@ const ux_menu_entry_t ui_menu_seedmode[] = { {ui_menu_settings, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; +/** + * Seed Mode page display preparation callback + * + * @param[in] entry selected menu to display + * @param[in] element selected element to display + * + * @return Eelement to display + * + */ const bagl_element_t *ui_menu_seedmode_predisplay(const ux_menu_entry_t *entry, bagl_element_t *element) { if (element->component.userid == 0x20) { @@ -707,10 +830,22 @@ const bagl_element_t *ui_menu_seedmode_predisplay(const ux_menu_entry_t *entry, return element; } +/** + * Seed Mode page display + * + * @param[in] value flow step + * + */ void ui_menu_seedmode_display(unsigned int value) { UX_MENU_DISPLAY(value, ui_menu_seedmode, ui_menu_seedmode_predisplay); } +/** + * Seed Mode toggle callback + * + * @param[in] value selected seed mode + * + */ static void toggle_seed(unsigned int value) { if (value != 128) { return; @@ -746,6 +881,12 @@ const ux_menu_entry_t ui_seed_warning[] = { {NULL, toggle_seed, 128, &C_icon_validate_14, "Disable", NULL, 0, 0}, UX_MENU_END}; +/** + * Seed Mode Action callback + * + * @param[in] value selected mode + * + */ void ui_menu_seedmode_action(unsigned int value) { if (value == 0) { // Request deactivate @@ -772,10 +913,25 @@ const ux_menu_entry_t ui_menu_pinmode[] = { {ui_menu_settings, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; +/** + * Pin Mode page display + * + * @param[in] value flow step + * + */ void ui_menu_pinmode_display(unsigned int value) { UX_MENU_DISPLAY(value, ui_menu_pinmode, ui_menu_pinmode_predisplay); } +/** + * Pin Mode page display preparation callback + * + * @param[in] entry selected menu to display + * @param[in] element selected element to display + * + * @return element to display + * + */ const bagl_element_t *ui_menu_pinmode_predisplay(const ux_menu_entry_t *entry, bagl_element_t *element) { if (element->component.userid == 0x20) { @@ -811,6 +967,12 @@ const ux_menu_entry_t ui_trust_warning[] = { {NULL, ui_menu_pinmode_action, 127, &C_icon_validate_14, "Select", NULL, 61, 40}, UX_MENU_END}; +/** + * Pin Mode Action callback + * + * @param[in] value selected mode + * + */ void ui_menu_pinmode_action(unsigned int value) { unsigned char s; value = value & 0x7FFF; @@ -886,6 +1048,15 @@ void ui_menu_uifmode_display(unsigned int value) { UX_MENU_DISPLAY(value, ui_menu_uifmode, ui_menu_uifmode_predisplay); } +/** + * UIF page display preparation callback + * + * @param[in] entry selected menu to display + * @param[in] element selected element to display + * + * @return element to display + * + */ const bagl_element_t *ui_menu_uifmode_predisplay(const ux_menu_entry_t *entry, bagl_element_t *element) { if (element->component.userid == 0x20) { @@ -916,6 +1087,12 @@ const bagl_element_t *ui_menu_uifmode_predisplay(const ux_menu_entry_t *entry, return element; } +/** + * UIF Action callback + * + * @param[in] value selected key + * + */ void ui_menu_uifmode_action(unsigned int value) { unsigned char *uif; unsigned char new_uif; @@ -954,6 +1131,12 @@ const ux_menu_entry_t ui_menu_reset[] = { {NULL, ui_menu_reset_action, 0, NULL, "Yes", NULL, 0, 0}, UX_MENU_END}; +/** + * Reset Action callback + * + * @param[in] value unused + * + */ void ui_menu_reset_action(unsigned int value) { UNUSED(value); unsigned char magic[4]; @@ -1001,6 +1184,15 @@ const ux_menu_entry_t ui_menu_main[] = { {NULL, (void *) os_sched_exit, 0, &C_icon_dashboard, "Quit app", NULL, 50, 29}, UX_MENU_END}; +/** + * Main page display preparation callback + * + * @param[in] entry selected menu to display + * @param[in] element selected element to display + * + * @return Eelement to display + * + */ const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, bagl_element_t *element) { if (entry == &ui_menu_main[0]) { @@ -1026,12 +1218,22 @@ const bagl_element_t *ui_menu_main_predisplay(const ux_menu_entry_t *entry, } return element; } +/** + * Main page display + * + * @param[in] value flow step + * + */ void ui_menu_main_display(unsigned int value) { UX_MENU_DISPLAY(value, ui_menu_main, ui_menu_main_predisplay); } /* --- INIT --- */ +/** + * home page definition + * + */ void ui_init(void) { ui_menu_main_display(0); // setup the first screen changing diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index c1c5f85..86ed952 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -26,6 +26,7 @@ /* ----------------------------------------------------------------------- */ /* --- NanoX UI layout --- */ /* ----------------------------------------------------------------------- */ + void ui_menu_tmpl_set_action(unsigned int value); void ui_menu_tmpl_key_action(unsigned int value); void ui_menu_tmpl_type_action(unsigned int value); @@ -51,6 +52,13 @@ UX_STEP_CB(ux_menu_popup_1_step, UX_FLOW(ux_flow_popup, &ux_menu_popup_1_step); +/** + * Display popup message on screen + * + * @param[in] msg1 1st part of the message + * @param[in] msg2 2nd part of the message + * + */ void ui_info(const char *msg1, const char *msg2) { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s. %s", msg1, msg2); ux_flow_init(0, ux_flow_popup, NULL); @@ -75,6 +83,10 @@ UX_FLOW(ux_flow_uifconfirm, &ux_menu_uifconfirm_3_step, &ux_menu_uifconfirm_2_step); +/** + * UIF page display preparation callback + * + */ void ui_menu_uifconfirm_predisplay() { switch (G_gpg_vstate.io_ins) { case INS_INTERNAL_AUTHENTICATE: @@ -103,10 +115,24 @@ void ui_menu_uifconfirm_predisplay() { } } +/** + * UIF page display + * + * @param[in] value flow step + * + */ void ui_menu_uifconfirm_display(unsigned int value) { ui_flow_display(ux_flow_uifconfirm, value); } +/** + * UIF Confirmation Action callback + * + * @param[in] confirm indicate if the user press 'Confirm' or 'Cancel' + * + * @return Error code + * + */ unsigned int ui_uifconfirm_action(unsigned int value) { unsigned int sw = SW_SECURITY_UIF_ISSUE; @@ -165,6 +191,10 @@ UX_FLOW(ux_flow_pinconfirm, &ux_menu_pinconfirm_2_step, &ux_menu_pinconfirm_3_step); +/** + * Pin Confirm page display preparation callback + * + */ void ui_menu_pinconfirm_predisplay() { if ((G_gpg_vstate.io_p2 == PIN_ID_PW1) || (G_gpg_vstate.io_p2 == PIN_ID_PW2) || (G_gpg_vstate.io_p2 == PIN_ID_PW3)) { @@ -178,11 +208,25 @@ void ui_menu_pinconfirm_predisplay() { } } +/** + * Pin Confirm page display + * + * @param[in] value flow step + * + */ void ui_menu_pinconfirm_display(unsigned int value) { UNUSED(value); ux_flow_init(0, ux_flow_pinconfirm, NULL); } +/** + * Pin Confirm Confirmation Action callback + * + * @param[in] confirm indicate if the user press 'Confirm' or 'Cancel' + * + * @return Error code + * + */ unsigned int ui_pinconfirm_action(unsigned int value) { unsigned int sw = SW_UNKNOWN; @@ -250,6 +294,14 @@ const bagl_element_t ui_pinentry_action[] = { static const char C_pin_digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '<', 'A', 'V'}; +/** + * Pin Entry page display preparation callback + * + * @param[in] element selected element to display + * + * @return Error code + * + */ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { if (element->component.userid == 1) { if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { @@ -301,6 +353,12 @@ unsigned int ui_pinentry_predisplay(const bagl_element_t *element) { return 1; } +/** + * Pin Entry page display + * + * @param[in] value indicate if pin is reset + * + */ void ui_menu_pinentry_display(unsigned int value) { if (value == 0) { explicit_bzero(G_gpg_vstate.ux_pinentry, sizeof(G_gpg_vstate.ux_pinentry)); @@ -310,6 +368,10 @@ void ui_menu_pinentry_display(unsigned int value) { UX_DISPLAY(ui_pinentry_action, (void *) ui_pinentry_predisplay); } +/** + * Pin Entry Validation callback + * + */ static void validate_pin() { unsigned int offset, len, sw = SW_UNKNOWN; gpg_pin_t *pin; @@ -385,6 +447,15 @@ static void validate_pin() { } } +/** + * Pin Entry page Action callback + * + * @param[in] button_mask selected button + * @param[in] button_mask_counter unused + * + * @return Error code + * + */ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int button_mask_counter) { UNUSED(button_mask_counter); unsigned int offset = G_gpg_vstate.ux_pinLen; @@ -451,14 +522,28 @@ const char *const tmpl_key_getter_values[] = {LABEL_SIG, LABEL_DEC, LABEL_AUT}; const unsigned int tmpl_key_getter_values_map[] = {1, 2, 3}; -const char *tmpl_key_getter(unsigned int idx) { +/** + * Helper to get the key name + * + * @param[in] idx key index + * + * @return key name, or NULL if not found + * + */ +static const char *tmpl_key_getter(unsigned int idx) { if (idx < ARRAYLEN(tmpl_key_getter_values)) { return tmpl_key_getter_values[idx]; } return NULL; } -void tmpl_key_selector(unsigned int idx) { +/** + * Helper to select the key name and display the Template page + * + * @param[in] idx key index + * + */ +static void tmpl_key_selector(unsigned int idx) { if (idx < ARRAYLEN(tmpl_key_getter_values)) { idx = tmpl_key_getter_values_map[idx]; } else { @@ -486,14 +571,28 @@ const unsigned int tmpl_type_getter_values_map[] = {2048, CX_CURVE_SECP256R1, CX_CURVE_Ed25519}; -const char *tmpl_type_getter(unsigned int idx) { +/** + * Helper to get the key type + * + * @param[in] idx key index + * + * @return key type, or NULL if not found + * + */ +static const char *tmpl_type_getter(unsigned int idx) { if (idx < ARRAYLEN(tmpl_type_getter_values)) { return tmpl_type_getter_values[idx]; } return NULL; } -void tmpl_type_selector(unsigned int idx) { +/** + * Helper to select the key type and display the Template page + * + * @param[in] idx key index + * + */ +static void tmpl_type_selector(unsigned int idx) { if (idx < ARRAYLEN(tmpl_type_getter_values)) { idx = tmpl_type_getter_values_map[idx]; } else { @@ -546,6 +645,10 @@ UX_FLOW(ux_flow_template, &ux_menu_template_3_step, &ux_menu_template_4_step); +/** + * Template page display preparation callback + * + */ void ui_menu_template_predisplay() { switch (G_gpg_vstate.ux_key) { case 1: @@ -589,10 +692,21 @@ void ui_menu_template_predisplay() { } } +/** + * Template page display + * + * @param[in] value flow step + * + */ void ui_menu_template_display(unsigned int value) { ui_flow_display(ux_flow_template, value); } +/** + * Template Action callback + * + * @param[in] value unused + */ void ui_menu_tmpl_set_action(unsigned int value) { UNUSED(value); LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); @@ -696,14 +810,28 @@ UX_STEP_CB(ux_menu_seedmode_2_step, UX_FLOW(ux_flow_seedmode, &ux_menu_seedmode_1_step, &ux_menu_seedmode_2_step); +/** + * Seed Mode page display preparation callback + * + */ void ui_menu_seedmode_predisplay() { snprintf(CUR_SEED_MODE, sizeof(CUR_SEED_MODE), "%s", G_gpg_vstate.seed_mode ? "ON" : "OFF"); } +/** + * Seed Mode page display + * + * @param[in] value flow step + * + */ void ui_menu_seedmode_display(unsigned int value) { ui_flow_display(ux_flow_seedmode, value); } +/** + * Seed Mode toggle callback + * + */ static void toggle_seed() { if (G_gpg_vstate.seed_mode) { G_gpg_vstate.seed_mode = 0; @@ -746,6 +874,12 @@ UX_FLOW(ui_seed_disabling_flow, &ui_seed_warning_flow_cancel_step, &ui_seed_disabling_flow_confirm_step); +/** + * Seed Mode Action callback + * + * @param[in] value seed mode state + * + */ void ui_menu_seedmode_action(unsigned int value) { if (value == 1) { // Current value is 'enable' -> Confirm deactivate @@ -807,6 +941,10 @@ UX_FLOW(ux_flow_pinmode, &ux_menu_pinmode_4_step, &ux_menu_pinmode_5_step); +/** + * Pin Mode page display preparation callback + * + */ void ui_menu_pinmode_predisplay() { snprintf(ONSCR_BUFF, 5, "%s", PIN_MODE_SCREEN == G_gpg_vstate.pinmode ? "ON" : "OFF"); snprintf(CONFI_BUFF, 5, "%s", PIN_MODE_CONFIRM == G_gpg_vstate.pinmode ? "ON" : "OFF"); @@ -826,6 +964,12 @@ void ui_menu_pinmode_predisplay() { PIN_MODE_TRUST == N_gpg_pstate->config_pin[0] ? "(Default)" : ""); } +/** + * Pin Mode page display + * + * @param[in] value flow step + * + */ void ui_menu_pinmode_display(unsigned int value) { ui_flow_display(ux_flow_pinmode, value); } @@ -860,6 +1004,12 @@ UX_FLOW(ui_trust_selecting_flow, &ui_trust_warning_flow_cancel_step, &ui_trust_selecting_flow_confirm_step); +/** + * Pin Mode Action callback + * + * @param[in] value token indication the selected action + * + */ void ui_menu_pinmode_action(unsigned int value) { unsigned char s; @@ -956,16 +1106,32 @@ UX_FLOW(ux_flow_uif, &ux_menu_uif_3_step, &ux_menu_uif_4_step); +/** + * UIF page display preparation callback + * + */ void ui_menu_uifmode_predisplay() { snprintf(SIG_BUFF, sizeof(SIG_BUFF), "%s", G_gpg_vstate.kslot->sig.UIF[0] ? "ON" : "OFF"); snprintf(DEC_BUFF, sizeof(DEC_BUFF), "%s", G_gpg_vstate.kslot->dec.UIF[0] ? "ON" : "OFF"); snprintf(AUT_BUFF, sizeof(AUT_BUFF), "%s", G_gpg_vstate.kslot->aut.UIF[0] ? "ON" : "OFF"); } +/** + * UIF page display + * + * @param[in] value flow step + * + */ void ui_menu_uifmode_display(unsigned int value) { ui_flow_display(ux_flow_uif, value); } +/** + * UIF Confirmation Action callback + * + * @param[in] value indicate the targeted key + * + */ void ui_menu_uifmode_action(unsigned int value) { unsigned char *uif; unsigned char new_uif; @@ -1009,10 +1175,22 @@ UX_STEP_CB(ux_menu_reset_2_step, bn, ui_menu_reset_action(0), {"YES!", "Reset th UX_FLOW(ux_flow_reset, &ux_menu_reset_1_step, &ux_menu_reset_2_step); +/** + * Reset page display + * + * @param[in] value flow step + * + */ void ui_menu_reset_display(unsigned int value) { ux_flow_init(value, ux_flow_reset, NULL); } +/** + * Reset Action callback + * + * @param[in] value unused + * + */ void ui_menu_reset_action(unsigned int value) { UNUSED(value); unsigned char magic[4]; @@ -1031,6 +1209,14 @@ void ui_menu_reset_action(unsigned int value) { const char *const settings_getter_values[] = {"Key template", "Seed mode", "PIN mode", "UIF mode", "Reset", "Back"}; +/** + * Helper to retrieve page title + * + * @param[in] idx page index + * + * @return page title, or NULL + * + */ const char *settings_getter(unsigned int idx) { if (idx < ARRAYLEN(settings_getter_values)) { return settings_getter_values[idx]; @@ -1038,6 +1224,12 @@ const char *settings_getter(unsigned int idx) { return NULL; } +/** + * Settings page display + * + * @param[in] idx page index + * + */ void settings_selector(unsigned int idx) { switch (idx) { case 0: @@ -1061,6 +1253,12 @@ void settings_selector(unsigned int idx) { } } +/** + * Settings page display + * + * @param[in] value flow step + * + */ void ui_menu_settings_display(unsigned int value) { ux_menulist_init_select(G_ux.stack_count - 1, settings_getter, settings_selector, value); } @@ -1112,6 +1310,10 @@ UX_FLOW(ux_flow_slot, &ux_menu_slot_4_step, &ux_menu_slot_5_step); +/** + * Slot page display preparation callback + * + */ void ui_menu_slot_predisplay() { snprintf(SLOT1, sizeof(SLOT1), @@ -1130,10 +1332,22 @@ void ui_menu_slot_predisplay() { 3 == G_gpg_vstate.slot + 1 ? "+" : " "); } +/** + * Slot page display + * + * @param[in] value flow step + * + */ void ui_menu_slot_display(unsigned int value) { ui_flow_display(ux_flow_slot, value); } +/** + * Slot Action callback + * + * @param[in] value token indication the selected action + * + */ void ui_menu_slot_action(unsigned int value) { unsigned char s; @@ -1177,6 +1391,12 @@ UX_STEP_CB(ux_menu_info_2_step, UX_FLOW(ux_flow_info, &ux_menu_info_1_step, &ux_menu_info_2_step); +/** + * Info page display + * + * @param[in] value flow step + * + */ void ui_menu_info_display(unsigned int value) { UNUSED(value); ux_flow_init(0, ux_flow_info, NULL); @@ -1210,6 +1430,10 @@ UX_FLOW(ux_flow_main, &ux_menu_main_4_step, &ux_menu_main_5_step); +/** + * Main page display preparation callback + * + */ void ui_menu_main_predisplay() { explicit_bzero(G_gpg_vstate.ux_buff1, sizeof(G_gpg_vstate.ux_buff1)); memmove(G_gpg_vstate.ux_buff1, (void *) (N_gpg_pstate->name.value), 20); @@ -1230,6 +1454,12 @@ void ui_menu_main_predisplay() { G_gpg_vstate.slot + 1); } +/** + * Main page display + * + * @param[in] value flow step + * + */ void ui_menu_main_display(unsigned int value) { // reserve a display stack slot if none yet if (G_ux.stack_count == 0) { @@ -1241,6 +1471,10 @@ void ui_menu_main_display(unsigned int value) { /* --- INIT --- */ +/** + * home page definition + * + */ void ui_init(void) { ui_menu_main_display(0); } diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index 2af475a..70b8653 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -31,32 +31,39 @@ /* ----------------------------------------------------------------------- */ /* --- NBGL UI layout --- */ /* ----------------------------------------------------------------------- */ -void ui_menu_settings(); -void ui_menu_slot_action(); +static void ui_menu_settings(); +static void ui_menu_slot_action(); static void settings_ctrl_cb(int token, uint8_t index); static void ui_settings_template(void); static void ui_settings_seed(void); static void ui_settings_pin(void); -// contexts for background and modal pages +// context for background and modal pages static nbgl_layout_t layoutCtx = {0}; -enum { - TOKEN_SETTINGS_TEMPLATE = FIRST_USER_TOKEN, - TOKEN_SETTINGS_SEED, - TOKEN_SETTINGS_PIN, - TOKEN_SETTINGS_UIF, - TOKEN_SETTINGS_RESET, -}; - /* ------------------------------- Helpers UX ------------------------------- */ +/** + * Display popup message on screen + * + * @param[in] msg1 1st part of the message + * @param[in] msg2 2nd part of the message + * + */ static void ui_info(const char* msg1, const char* msg2, nbgl_callback_t cb, bool isSuccess) { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), "%s\n%s", msg1, msg2); nbgl_useCaseStatus((const char*) G_gpg_vstate.menu, isSuccess, cb); }; +/** + * Display Setting page header + * + * @param[in] title page title + * @param[in] back_token token for back button + * @param[in] touch_cb action callback + * + */ static void ui_setting_header(const char* title, uint8_t back_token, nbgl_layoutTouchCallback_t touch_cb) { @@ -87,7 +94,10 @@ void app_quit(void) { os_sched_exit(-1); } -// home page definition +/** + * home page definition + * + */ void ui_init(void) { char name[32]; unsigned int serial = U4BE(G_gpg_vstate.kslot->serial, 0); @@ -129,6 +139,13 @@ enum { TOKEN_SLOT_BACK, }; +/** + * Slot Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void slot_cb(int token, uint8_t index) { switch (token) { case TOKEN_SLOT_BACK: @@ -151,7 +168,11 @@ static void slot_cb(int token, uint8_t index) { } } -void ui_menu_slot_action(void) { +/** + * Slot Navigation callback + * + */ +static void ui_menu_slot_action(void) { nbgl_layoutRadioChoice_t choices = {0}; nbgl_layoutButton_t buttonInfo = {0}; static char* names[GPG_KEYS_SLOTS] = {0}; @@ -191,6 +212,7 @@ void ui_menu_slot_action(void) { // ----------------------------------------------------------- /* ------------------------------- TEMPLATE UX ------------------------------- */ + enum { TOKEN_TEMPLATE_SIG = FIRST_USER_TOKEN, TOKEN_TEMPLATE_DEC, @@ -222,6 +244,14 @@ static const char* const keyTypeTexts[] = {LABEL_RSA2048, LABEL_SECP256R1, LABEL_Ed25519}; +/** + * Determine the selected key type from its attributes + * + * @param[in] key token describing the selected key + * + * @return token describing the selected key type + * + */ static uint32_t _getKeyType(const uint8_t key) { uint8_t* attributes = NULL; uint32_t token = 0; @@ -290,6 +320,13 @@ static uint32_t _getKeyType(const uint8_t key) { return token; } +/** + * Key Template Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void template_key_cb(int token, uint8_t index) { LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); gpg_key_t* dest = NULL; @@ -384,6 +421,13 @@ static void template_key_cb(int token, uint8_t index) { ui_settings_template(); } +/** + * Template Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void template_cb(int token, uint8_t index) { UNUSED(index); static nbgl_layoutRadioChoice_t choices = {0}; @@ -411,6 +455,10 @@ static void template_cb(int token, uint8_t index) { } } +/** + * Template Navigation callback + * + */ static void ui_settings_template(void) { nbgl_layoutBar_t bar = {0}; uint32_t i; @@ -458,11 +506,18 @@ static void ui_settings_template(void) { } /* --------------------------------- SEED UX --------------------------------- */ + enum { TOKEN_SEED = FIRST_USER_TOKEN, TOKEN_SEED_BACK, }; +/** + * Seed Mode Confirmation callback + * + * @param[in] confirm indicate if the user press 'Confirm' or 'Cancel' + * + */ void seed_confirm_cb(bool confirm) { if (confirm) { G_gpg_vstate.seed_mode = 0; @@ -473,6 +528,13 @@ void seed_confirm_cb(bool confirm) { } } +/** + * Seed Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void seed_cb(int token, uint8_t index) { switch (token) { case TOKEN_SEED_BACK: @@ -494,6 +556,10 @@ static void seed_cb(int token, uint8_t index) { } } +/** + * Seed Navigation callback + * + */ static void ui_settings_seed(void) { static nbgl_layoutSwitch_t option = {0}; @@ -517,6 +583,12 @@ enum { TOKEN_PIN_BACK, }; +/** + * Trust Mode Confirmation callback + * + * @param[in] confirm indicate if the user press 'Confirm' or 'Cancel' + * + */ void trust_cb(bool confirm) { if (confirm) { G_gpg_vstate.pinmode = G_gpg_vstate.pinmode_req; @@ -526,6 +598,13 @@ void trust_cb(bool confirm) { } } +/** + * Pin Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void pin_cb(int token, uint8_t index) { const char* err = NULL; switch (token) { @@ -582,6 +661,10 @@ static void pin_cb(int token, uint8_t index) { } } +/** + * Pin Navigation callback + * + */ static void ui_settings_pin(void) { static nbgl_layoutRadioChoice_t choices = {0}; nbgl_layoutButton_t buttonInfo = {0}; @@ -624,6 +707,7 @@ static void ui_settings_pin(void) { } /* --------------------------------- UIF UX ---------------------------------- */ + enum { TOKEN_UIF_SIG = FIRST_USER_TOKEN, TOKEN_UIF_DEC, @@ -631,6 +715,13 @@ enum { TOKEN_UIF_BACK, }; +/** + * UIF Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void uif_cb(int token, uint8_t index) { unsigned char* uif = NULL; switch (token) { @@ -657,6 +748,10 @@ static void uif_cb(int token, uint8_t index) { } } +/** + * UIF Navigation callback + * + */ static void ui_settings_uif(void) { static nbgl_layoutSwitch_t option = {0}; uint8_t nbOptions = 0; @@ -711,10 +806,18 @@ static void ui_settings_uif(void) { } /* -------------------------------- RESET UX --------------------------------- */ + enum { TOKEN_RESET = FIRST_USER_TOKEN, }; +/** + * Reset Navigation callback + * + * @param[in] page selected page to display + * @param[in] content describe the widgets to display on the page + * + */ static bool reset_nav_cb(uint8_t page, nbgl_pageContent_t* content) { UNUSED(page); explicit_bzero(content, sizeof(nbgl_pageContent_t)); @@ -728,6 +831,13 @@ static bool reset_nav_cb(uint8_t page, nbgl_pageContent_t* content) { return true; } +/** + * Reset Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void reset_ctrl_cb(int token, uint8_t index) { UNUSED(index); unsigned char magic[4] = {0, 0, 0, 0}; @@ -743,6 +853,14 @@ static void reset_ctrl_cb(int token, uint8_t index) { /* ------------------------------- SETTINGS UX ------------------------------- */ +enum { + TOKEN_SETTINGS_TEMPLATE = FIRST_USER_TOKEN, + TOKEN_SETTINGS_SEED, + TOKEN_SETTINGS_PIN, + TOKEN_SETTINGS_UIF, + TOKEN_SETTINGS_RESET, +}; + enum { SETTINGS_PAGE_PARAMS, SETTINGS_PAGE_INFO, @@ -754,6 +872,14 @@ enum { #else #define VERSION_STR "App " XSTR(APPVERSION) #endif + +/** + * Settings Navigation callback + * + * @param[in] page selected page to display + * @param[in] content describe the widgets to display on the page + * + */ static bool settings_nav_cb(uint8_t page, nbgl_pageContent_t* content) { bool ret = false; @@ -793,6 +919,13 @@ static bool settings_nav_cb(uint8_t page, nbgl_pageContent_t* content) { return ret; } +/** + * Settings Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void settings_ctrl_cb(int token, uint8_t index) { UNUSED(index); switch (token) { @@ -820,8 +953,11 @@ static void settings_ctrl_cb(int token, uint8_t index) { } } -// settings menu definition -void ui_menu_settings() { +/** + * Settings menu definition + * + */ +static void ui_menu_settings() { nbgl_useCaseSettings(APPNAME, SETTINGS_PAGE_PARAMS, SETTINGS_PAGE_NB, @@ -832,6 +968,13 @@ void ui_menu_settings() { } /* ------------------------------ PIN CONFIRM UX ----------------------------- */ + +/** + * Pin Confirmation callback + * + * @param[in] confirm indicate if the user press 'Confirm' or 'Cancel' + * + */ void pin_confirm_cb(bool confirm) { gpg_pin_set_verified(G_gpg_vstate.io_p2, confirm); @@ -841,6 +984,12 @@ void pin_confirm_cb(bool confirm) { ui_init(); } +/** + * Pin Confirmation page display + * + * @param[in] value PinCode ID to confirm + * + */ void ui_menu_pinconfirm_display(unsigned int value) { snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), @@ -851,13 +1000,20 @@ void ui_menu_pinconfirm_display(unsigned int value) { } /* ------------------------------ PIN ENTRY UX ----------------------------- */ + enum { TOKEN_PIN_ENTRY_BACK = FIRST_USER_TOKEN, }; static void ui_menu_pinentry_cb(void); -static void validate_pin(const uint8_t* pinentry, uint8_t length) { +/** + * Pin Entry Validation callback + * + * @param[in] value PinCode ID to confirm + * + */ +static void pinentry_validate_cb(const uint8_t* pinentry, uint8_t length) { unsigned int sw = SW_UNKNOWN; unsigned int len1 = 0; unsigned char* pin1 = NULL; @@ -952,6 +1108,13 @@ static void validate_pin(const uint8_t* pinentry, uint8_t length) { } } +/** + * Pin Entry Action callback + * + * @param[in] token button Id pressed + * @param[in] index widget index on the page + * + */ static void pinentry_cb(int token, uint8_t index) { UNUSED(index); if (token == TOKEN_PIN_ENTRY_BACK) { @@ -962,14 +1125,20 @@ static void pinentry_cb(int token, uint8_t index) { } } -void ui_menu_pinentry_display(unsigned int value) { +/** + * Pin Entry page display + * + * @param[in] step Pin Entry step + * + */ +void ui_menu_pinentry_display(unsigned int step) { uint8_t minLen; char line[10]; // Init the page title explicit_bzero(G_gpg_vstate.line, sizeof(G_gpg_vstate.line)); if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { - switch (value) { + switch (step) { case 0: // Default or initial case snprintf(line, sizeof(line), "Current"); @@ -983,7 +1152,7 @@ void ui_menu_pinentry_display(unsigned int value) { default: break; } - G_gpg_vstate.ux_step = value; + G_gpg_vstate.ux_step = step; } else { snprintf(line, sizeof(line), "Enter"); } @@ -1001,10 +1170,14 @@ void ui_menu_pinentry_display(unsigned int value) { TOKEN_PIN_ENTRY_BACK, false, TUNE_TAP_CASUAL, - validate_pin, + pinentry_validate_cb, pinentry_cb); } +/** + * Pin Entry Navigation callback + * + */ static void ui_menu_pinentry_cb(void) { unsigned int value = 0; @@ -1016,6 +1189,13 @@ static void ui_menu_pinentry_cb(void) { } /* ------------------------------ UIF CONFIRM UX ----------------------------- */ + +/** + * UIF Confirmation callback + * + * @param[in] confirm indicate if the user press 'Confirm' or 'Cancel' + * + */ void uif_confirm_cb(bool confirm) { unsigned int sw = SW_SECURITY_UIF_ISSUE; @@ -1037,6 +1217,12 @@ void uif_confirm_cb(bool confirm) { ui_init(); } +/** + * UIF page display + * + * @param[in] step unused + * + */ void ui_menu_uifconfirm_display(unsigned int value) { UNUSED(value); From d97b0ea3b4a3a3de526526acd9d0b81f247581bf Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 21 Mar 2024 12:07:07 +0100 Subject: [PATCH 70/75] Minor code optimization to ease readability - Remove useless parameter for 'ui_info' - Remove useless functions 'gpg_init_ux' and 'io_seproxyhal_display' - Add constant definition - Unique function 'app_reset' instead of duplicate code --- src/gpg_init.c | 10 +++------- src/gpg_types.h | 3 ++- src/gpg_ux.c | 25 +++++++++++++++++++++++++ src/gpg_ux.h | 2 ++ src/gpg_ux_nanos.c | 45 +++++++++++++++++---------------------------- src/gpg_ux_nanox.c | 17 +++-------------- src/gpg_ux_nbgl.c | 12 ++---------- 7 files changed, 54 insertions(+), 60 deletions(-) diff --git a/src/gpg_init.c b/src/gpg_init.c index ee9d35d..454cf59 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -24,7 +24,7 @@ /* -- A Kind of Magic -- */ /* ----------------------*/ -const unsigned char C_MAGIC[8] = {'G', 'P', 'G', 'C', 'A', 'R', 'D', '3'}; +const unsigned char C_MAGIC[MAGIC_LENGTH] = {'G', 'P', 'G', 'C', 'A', 'R', 'D', '3'}; /* ----------------------*/ /* --ECC OID -- */ /* ----------------------*/ @@ -374,9 +374,9 @@ const unsigned char C_sha256_PW2[] = { void gpg_init() { explicit_bzero(&G_gpg_vstate, sizeof(gpg_v_state_t)); // first init ? - if (memcmp((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)) != 0) { + if (memcmp((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, MAGIC_LENGTH) != 0) { gpg_install(STATE_ACTIVATE); - nvm_write((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, sizeof(C_MAGIC)); + nvm_write((void *) (N_gpg_pstate->magic), (void *) C_MAGIC, MAGIC_LENGTH); explicit_bzero(&G_gpg_vstate, sizeof(gpg_v_state_t)); } @@ -389,10 +389,6 @@ void gpg_init() { // seed conf G_gpg_vstate.seed_mode = 1; // ux conf - gpg_init_ux(); -} - -void gpg_init_ux() { G_gpg_vstate.ux_type = -1; G_gpg_vstate.ux_key = -1; } diff --git a/src/gpg_types.h b/src/gpg_types.h index 99b6146..1a693d8 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -41,6 +41,7 @@ #define GPG_MIN_PW1_LENGTH 6 #define GPG_MIN_PW3_LENGTH 8 +#define MAGIC_LENGTH 8 #define AID_LENGTH 16 #define HISTO_LENGTH 15 #define HISTO_OFFSET_STATE 12 // 3rd byte from last (buffer size is 15) @@ -136,7 +137,7 @@ typedef struct gpg_key_slot_s { struct gpg_nv_state_s { /* magic */ - unsigned char magic[8]; + unsigned char magic[MAGIC_LENGTH]; /* pin mode */ unsigned char config_pin[1]; diff --git a/src/gpg_ux.c b/src/gpg_ux.c index 98b271b..eca47c5 100644 --- a/src/gpg_ux.c +++ b/src/gpg_ux.c @@ -16,6 +16,8 @@ * limitations under the License. *****************************************************************************/ +#include "gpg_vars.h" +#include "gpg_ux.h" #include "usbd_ccid_if.h" /** @@ -26,3 +28,26 @@ void ui_CCID_reset(void) { io_usb_ccid_set_card_inserted(0); io_usb_ccid_set_card_inserted(1); } + +/** + * Exit app + * + */ +void app_quit(void) { + // exit app here + os_sched_exit(0); +} + +/** + * Reset app + * + */ +void app_reset(void) { + unsigned char magic[MAGIC_LENGTH]; + + explicit_bzero(magic, MAGIC_LENGTH); + nvm_write((void*) (N_gpg_pstate->magic), magic, MAGIC_LENGTH); + gpg_init(); + ui_CCID_reset(); + ui_init(); +} diff --git a/src/gpg_ux.h b/src/gpg_ux.h index 38b56fe..19effc8 100644 --- a/src/gpg_ux.h +++ b/src/gpg_ux.h @@ -34,6 +34,8 @@ #define LABEL_Ed25519 "Ed25519" void ui_CCID_reset(void); +void app_quit(void); +void app_reset(void); void ui_init(void); void ui_menu_pinconfirm_display(unsigned int value); void ui_menu_pinentry_display(unsigned int value); diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 918436d..4c31f23 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -47,10 +47,10 @@ unsigned int ui_pinentry_action_button(unsigned int button_mask, unsigned int bu * @param[in] menu_display next page display callback * */ -void ui_info(const char *msg1, const char *msg2, const void *menu_display, unsigned int value) { +void ui_info(const char *msg1, const char *msg2, const void *menu_display) { explicit_bzero(&G_gpg_vstate.ui_dogsays[0], sizeof(ux_menu_entry_t)); G_gpg_vstate.ui_dogsays[0].callback = menu_display; - G_gpg_vstate.ui_dogsays[0].userid = value; + G_gpg_vstate.ui_dogsays[0].userid = 0; G_gpg_vstate.ui_dogsays[0].line1 = msg1; G_gpg_vstate.ui_dogsays[0].line2 = msg2; @@ -471,7 +471,7 @@ static void validate_pin() { sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display, 0); + ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display); } else { ui_menu_main_display(0); } @@ -496,7 +496,7 @@ static void validate_pin() { sizeof(G_gpg_vstate.menu), " %d tries remaining", pin->counter); - ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display, 0); + ui_info(WRONG_PIN, G_gpg_vstate.menu, ui_menu_main_display); return; } offset = 1 + G_gpg_vstate.work.io_buffer[0]; @@ -508,7 +508,7 @@ static void validate_pin() { gpg_io_discard(1); gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); gpg_io_do(IO_RETURN_AFTER_TX); - ui_info(PIN_DIFFERS, EMPTY, ui_menu_main_display, 0); + ui_info(PIN_DIFFERS, EMPTY, ui_menu_main_display); } else { sw = gpg_pin_set(gpg_pin_get_pin(G_gpg_vstate.io_p2), G_gpg_vstate.work.io_buffer + offset + 1, @@ -749,7 +749,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { break; } if (attributes.value[0] == 0) { - ui_info(INVALID_SELECTION, TEMPLATE_TYPE, ui_menu_template_display, 0); + ui_info(INVALID_SELECTION, TEMPLATE_TYPE, ui_menu_template_display); return; } @@ -770,9 +770,9 @@ void ui_menu_tmpl_set_action(unsigned int value) { if (dest != NULL) { nvm_write(dest, NULL, sizeof(gpg_key_t)); nvm_write(&dest->attributes, &attributes, sizeof(attributes)); - ui_info(OK, EMPTY, ui_menu_template_display, 0); + ui_info(OK, EMPTY, ui_menu_template_display); } else { - ui_info(INVALID_SELECTION, TEMPLATE_KEY, ui_menu_template_display, 0); + ui_info(INVALID_SELECTION, TEMPLATE_KEY, ui_menu_template_display); } } @@ -981,7 +981,7 @@ void ui_menu_pinmode_action(unsigned int value) { case 128: if (G_gpg_vstate.pinmode != N_gpg_pstate->config_pin[0]) { if (G_gpg_vstate.pinmode == PIN_MODE_TRUST) { - ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display, 0); + ui_info(DEFAULT_MODE, NOT_ALLOWED, ui_menu_pinmode_display); return; } // set new mode @@ -999,7 +999,7 @@ void ui_menu_pinmode_action(unsigned int value) { break; } if ((gpg_pin_is_verified(PIN_ID_PW1) == 0) && (gpg_pin_is_verified(PIN_ID_PW2) == 0)) { - ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display, 0); + ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display); return; } G_gpg_vstate.pinmode = value; @@ -1012,7 +1012,7 @@ void ui_menu_pinmode_action(unsigned int value) { break; } if (!gpg_pin_is_verified(PIN_ID_PW3)) { - ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display, 0); + ui_info(PIN_ADMIN, NOT_VERIFIED, ui_menu_pinmode_display); return; } // Confirm request @@ -1024,7 +1024,7 @@ void ui_menu_pinmode_action(unsigned int value) { break; default: value = 0; - ui_info(INVALID_SELECTION, EMPTY, ui_menu_pinmode_display, 0); + ui_info(INVALID_SELECTION, EMPTY, ui_menu_pinmode_display); break; } ui_menu_pinmode_display(value); @@ -1107,7 +1107,7 @@ void ui_menu_uifmode_action(unsigned int value) { uif = &G_gpg_vstate.kslot->aut.UIF[0]; break; default: - ui_info(INVALID_SELECTION, EMPTY, ui_menu_uifmode_display, 0); + ui_info(INVALID_SELECTION, EMPTY, ui_menu_uifmode_display); return; } if (uif[0] == 0) { @@ -1117,7 +1117,7 @@ void ui_menu_uifmode_action(unsigned int value) { new_uif = 0; nvm_write(&uif[0], &new_uif, 1); } else /*if (uif[0] == 2 )*/ { - ui_info(UIF_LOCKED, EMPTY, ui_menu_uifmode_display, 0); + ui_info(UIF_LOCKED, EMPTY, ui_menu_uifmode_display); return; } ui_menu_uifmode_display(value); @@ -1139,15 +1139,8 @@ const ux_menu_entry_t ui_menu_reset[] = { */ void ui_menu_reset_action(unsigned int value) { UNUSED(value); - unsigned char magic[4]; - magic[0] = 0; - magic[1] = 0; - magic[2] = 0; - magic[3] = 0; - nvm_write((void *) (N_gpg_pstate->magic), magic, 4); - gpg_init(); - ui_CCID_reset(); - ui_menu_main_display(0); + + app_reset(); } /* ------------------------------- SETTINGS UX ------------------------------- */ @@ -1181,7 +1174,7 @@ const ux_menu_entry_t ui_menu_main[] = { {NULL, NULL, 0, NULL, "", "", 0, 0}, {ui_menu_settings, NULL, 0, NULL, "Settings", NULL, 0, 0}, {ui_menu_info, NULL, 0, NULL, "About", NULL, 0, 0}, - {NULL, (void *) os_sched_exit, 0, &C_icon_dashboard, "Quit app", NULL, 50, 29}, + {NULL, (void *) app_quit, 0, &C_icon_dashboard, "Quit app", NULL, 50, 29}, UX_MENU_END}; /** @@ -1240,8 +1233,4 @@ void ui_init(void) { UX_CALLBACK_SET_INTERVAL(1000); } -void io_seproxyhal_display(const bagl_element_t *element) { - io_seproxyhal_display_default((bagl_element_t *) element); -} - #endif // defined(HAVE_BAGL) && defined(TARGET_NANOS) diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 86ed952..8280098 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -1193,15 +1193,8 @@ void ui_menu_reset_display(unsigned int value) { */ void ui_menu_reset_action(unsigned int value) { UNUSED(value); - unsigned char magic[4]; - magic[0] = 0; - magic[1] = 0; - magic[2] = 0; - magic[3] = 0; - nvm_write((void *) (N_gpg_pstate->magic), magic, 4); - gpg_init(); - ui_CCID_reset(); - ui_menu_main_display(0); + + app_reset(); } /* ------------------------------- SETTINGS UX ------------------------------- */ @@ -1421,7 +1414,7 @@ UX_STEP_CB(ux_menu_main_3_step, pb, ui_menu_settings_display(0), {&C_icon_coggle UX_STEP_CB(ux_menu_main_4_step, pb, ui_menu_info_display(0), {&C_icon_certificate, "About"}); -UX_STEP_CB(ux_menu_main_5_step, pb, os_sched_exit(0), {&C_icon_dashboard_x, "Quit app"}); +UX_STEP_CB(ux_menu_main_5_step, pb, app_quit(), {&C_icon_dashboard_x, "Quit app"}); UX_FLOW(ux_flow_main, &ux_menu_main_1_step, @@ -1479,8 +1472,4 @@ void ui_init(void) { ui_menu_main_display(0); } -void io_seproxyhal_display(const bagl_element_t *element) { - io_seproxyhal_display_default((bagl_element_t *) element); -} - #endif // defined(HAVE_BAGL) && (defined(TARGET_NANOX) || defined(TARGET_NANOS2)) diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index 70b8653..4a90294 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -89,11 +89,6 @@ static void ui_setting_header(const char* title, // ----------------------- HOME PAGE ------------------------- // ----------------------------------------------------------- -void app_quit(void) { - // exit app here - os_sched_exit(-1); -} - /** * home page definition * @@ -840,15 +835,12 @@ static bool reset_nav_cb(uint8_t page, nbgl_pageContent_t* content) { */ static void reset_ctrl_cb(int token, uint8_t index) { UNUSED(index); - unsigned char magic[4] = {0, 0, 0, 0}; if (token != TOKEN_RESET) { return; } - nvm_write((void*) (N_gpg_pstate->magic), magic, sizeof(magic)); - gpg_init(); - ui_CCID_reset(); - ui_init(); + + app_reset(); } /* ------------------------------- SETTINGS UX ------------------------------- */ From 37f7ab8571d589e5fa2601a164cabf01df0d7eff Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 21 Mar 2024 12:11:21 +0100 Subject: [PATCH 71/75] Replace multiple 'if' by 'switch/case' --- src/gpg_pso.c | 281 +++++++++++++++++++++++++------------------------- 1 file changed, 142 insertions(+), 139 deletions(-) diff --git a/src/gpg_pso.c b/src/gpg_pso.c index ae80d9d..360c720 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -78,72 +78,72 @@ static void gpg_pso_reset_PW1() { */ static int gpg_sign(gpg_key_t *sigkey) { cx_err_t error = CX_INTERNAL_ERROR; - if (sigkey->attributes.value[0] == KEY_ID_RSA) { - cx_rsa_private_key_t *key = NULL; - unsigned int ksz, l; - ksz = U2BE(sigkey->attributes.value, 1) >> 3; - switch (ksz) { - case 2048 / 8: - key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa2048; - break; - case 3072 / 8: - key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa3072; - break; + cx_rsa_private_key_t *rsa_key = NULL; + unsigned int ksz, l; + cx_ecfp_private_key_t *ecfp_key = NULL; + unsigned int s_len, i, rs_len, info; + unsigned char *rs; + + switch (sigkey->attributes.value[0]) { + case KEY_ID_RSA: + ksz = U2BE(sigkey->attributes.value, 1) >> 3; + switch (ksz) { + case 2048 / 8: + rsa_key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa2048; + break; + case 3072 / 8: + rsa_key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa3072; + break; #ifdef WITH_SUPPORT_RSA4096 - case 4096 / 8: - key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa4096; - break; + case 4096 / 8: + rsa_key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa4096; + break; #endif - default: + default: + break; + } + if ((rsa_key == NULL) || (rsa_key->size != ksz)) { + error = SW_CONDITIONS_NOT_SATISFIED; break; - } - if ((key == NULL) || (key->size != ksz)) { - return SW_CONDITIONS_NOT_SATISFIED; - } - - // sign - if (ksz < G_gpg_vstate.io_length) { - return SW_WRONG_LENGTH; - } - l = ksz - G_gpg_vstate.io_length; - memmove(G_gpg_vstate.work.io_buffer + l, - G_gpg_vstate.work.io_buffer, - G_gpg_vstate.io_length); - memset(G_gpg_vstate.work.io_buffer, 0xFF, l); - G_gpg_vstate.work.io_buffer[0] = 0; - G_gpg_vstate.work.io_buffer[1] = 1; - G_gpg_vstate.work.io_buffer[l - 1] = 0; - CX_CHECK(cx_rsa_decrypt_no_throw(key, - CX_PAD_NONE, - CX_NONE, - G_gpg_vstate.work.io_buffer, - ksz, - G_gpg_vstate.work.io_buffer, - &ksz)); - // send - gpg_io_discard(0); - gpg_io_inserted(ksz); - gpg_pso_reset_PW1(); - return SW_OK; - } - if ((sigkey->attributes.value[0] == KEY_ID_ECDSA) || - (sigkey->attributes.value[0] == KEY_ID_EDDSA)) { - cx_ecfp_private_key_t *key; - size_t ksz; - unsigned int s_len, i, rs_len, info; - unsigned char *rs; + } - key = &sigkey->priv_key.ecfp; + // sign + if (ksz < G_gpg_vstate.io_length) { + error = SW_WRONG_LENGTH; + break; + } + l = ksz - G_gpg_vstate.io_length; + memmove(G_gpg_vstate.work.io_buffer + l, + G_gpg_vstate.work.io_buffer, + G_gpg_vstate.io_length); + memset(G_gpg_vstate.work.io_buffer, 0xFF, l); + G_gpg_vstate.work.io_buffer[0] = 0; + G_gpg_vstate.work.io_buffer[1] = 1; + G_gpg_vstate.work.io_buffer[l - 1] = 0; + CX_CHECK(cx_rsa_decrypt_no_throw(rsa_key, + CX_PAD_NONE, + CX_NONE, + G_gpg_vstate.work.io_buffer, + ksz, + G_gpg_vstate.work.io_buffer, + &ksz)); + // send + gpg_io_discard(0); + gpg_io_inserted(ksz); + gpg_pso_reset_PW1(); + error = SW_OK; + break; -// sign #define RS (G_gpg_vstate.work.io_buffer + (GPG_IO_BUFFER_LENGTH - 256)) - if (sigkey->attributes.value[0] == KEY_ID_ECDSA) { - ksz = (unsigned int) gpg_curve2domainlen(key->curve); - if ((ksz == 0) || (key->d_len != ksz)) { - return SW_CONDITIONS_NOT_SATISFIED; + case KEY_ID_ECDSA: + ecfp_key = &sigkey->priv_key.ecfp; + ksz = (unsigned int) gpg_curve2domainlen(ecfp_key->curve); + if ((ksz == 0) || (ecfp_key->d_len != ksz)) { + error = SW_CONDITIONS_NOT_SATISFIED; + break; } s_len = 256; - CX_CHECK(cx_ecdsa_sign_no_throw(key, + CX_CHECK(cx_ecdsa_sign_no_throw(ecfp_key, CX_RND_TRNG, CX_NONE, G_gpg_vstate.work.io_buffer, @@ -168,27 +168,33 @@ static int gpg_sign(gpg_key_t *sigkey) { rs_len = rs[1]; rs += 2; } - } else { + error = SW_OK; + break; + + case KEY_ID_EDDSA: + ecfp_key = &sigkey->priv_key.ecfp; ksz = 256; - CX_CHECK(cx_eddsa_sign_no_throw(key, + CX_CHECK(cx_eddsa_sign_no_throw(ecfp_key, CX_SHA512, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length, RS, ksz)); - CX_CHECK(cx_ecdomain_parameters_length(key->curve, &ksz)); + CX_CHECK(cx_ecdomain_parameters_length(ecfp_key->curve, &ksz)); ksz *= 2; gpg_io_discard(0); gpg_io_insert(RS, ksz); - } + error = SW_OK; + break; - // send - gpg_pso_reset_PW1(); - return SW_OK; + default: + // --- PSO:CDS NOT SUPPORTED + error = SW_REFERENCED_DATA_NOT_FOUND; + break; } - // --- PSO:CDS NOT SUPPORTED - return SW_REFERENCED_DATA_NOT_FOUND; + end: + gpg_pso_reset_PW1(); return error; } @@ -199,8 +205,14 @@ static int gpg_sign(gpg_key_t *sigkey) { * */ int gpg_apdu_pso() { - unsigned int t, l, ksz; cx_err_t error = CX_INTERNAL_ERROR; + unsigned int t, l, ksz; + unsigned int cnt, pad_byte; + unsigned int msg_len; + unsigned int curve; + cx_aes_key_t *aes_key = NULL; + cx_rsa_private_key_t *rsa_key = NULL; + cx_ecfp_private_key_t *ecfp_key = NULL; // UIF HANDLE switch (G_gpg_vstate.io_p1p2) { @@ -229,26 +241,20 @@ int gpg_apdu_pso() { // --- PSO:ENC --- switch (G_gpg_vstate.io_p1p2) { - // --- PSO:CDS --- - case PSO_CDS: { - unsigned int cnt; - int sw = SW_UNKNOWN; - sw = gpg_sign(&G_gpg_vstate.kslot->sig); + case PSO_CDS: + error = gpg_sign(&G_gpg_vstate.kslot->sig); cnt = G_gpg_vstate.kslot->sig_count + 1; nvm_write(&G_gpg_vstate.kslot->sig_count, &cnt, sizeof(unsigned int)); - return sw; - } - // --- PSO:ENC --- - case PSO_ENC: { - unsigned int msg_len; - cx_aes_key_t *key = NULL; - key = &G_gpg_vstate.kslot->AES_dec; - if (!(key->size != CX_AES_128_KEY_LEN)) { + break; + + case PSO_ENC: + aes_key = &G_gpg_vstate.kslot->AES_dec; + if (!(aes_key->size != CX_AES_128_KEY_LEN)) { return SW_CONDITIONS_NOT_SATISFIED; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; ksz = GPG_IO_BUFFER_LENGTH - 1; - CX_CHECK(cx_aes_no_throw(key, + CX_CHECK(cx_aes_no_throw(aes_key, CX_ENCRYPT | CX_CHAIN_CBC | CX_LAST, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, msg_len, @@ -258,44 +264,43 @@ int gpg_apdu_pso() { gpg_io_discard(0); G_gpg_vstate.work.io_buffer[0] = PAD_AES; gpg_io_inserted(1 + ksz); - return SW_OK; - } + error = SW_OK; + break; - // --- PSO:DEC --- - case PSO_DEC: { - unsigned int msg_len; - unsigned int pad_byte; + case PSO_DEC: pad_byte = gpg_io_fetch_u8(); switch (pad_byte) { - // --- PSO:DEC:RSA - case PAD_RSA: { - cx_rsa_private_key_t *key = NULL; + case PAD_RSA: if (G_gpg_vstate.mse_dec->attributes.value[0] != KEY_ID_RSA) { - return SW_CONDITIONS_NOT_SATISFIED; + error = SW_CONDITIONS_NOT_SATISFIED; + break; } ksz = U2BE(G_gpg_vstate.mse_dec->attributes.value, 1) >> 3; - key = NULL; switch (ksz) { case 2048 / 8: - key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa2048; + rsa_key = + (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa2048; break; case 3072 / 8: - key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa3072; + rsa_key = + (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa3072; break; #ifdef WITH_SUPPORT_RSA4096 case 4096 / 8: - key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa4096; + rsa_key = + (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa4096; break; #endif } - if ((key == NULL) || (key->size != ksz)) { - return SW_CONDITIONS_NOT_SATISFIED; + if ((rsa_key == NULL) || (rsa_key->size != ksz)) { + error = SW_CONDITIONS_NOT_SATISFIED; + break; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; CX_CHECK(cx_rsa_decrypt_no_throw( - key, + rsa_key, CX_PAD_PKCS1_1o5, CX_NONE, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, @@ -305,19 +310,18 @@ int gpg_apdu_pso() { // send gpg_io_discard(0); gpg_io_inserted(ksz); - return SW_OK; - } + error = SW_OK; + break; - // --- PSO:DEC:AES - case PAD_AES: { - cx_aes_key_t *key; - key = &G_gpg_vstate.kslot->AES_dec; - if (!(key->size != CX_AES_128_KEY_LEN)) { - return SW_CONDITIONS_NOT_SATISFIED; + case PAD_AES: + aes_key = &G_gpg_vstate.kslot->AES_dec; + if (!(aes_key->size != CX_AES_128_KEY_LEN)) { + error = SW_CONDITIONS_NOT_SATISFIED; + break; } msg_len = G_gpg_vstate.io_length - G_gpg_vstate.io_offset; ksz = GPG_IO_BUFFER_LENGTH; - CX_CHECK(cx_aes_no_throw(key, + CX_CHECK(cx_aes_no_throw(aes_key, CX_DECRYPT | CX_CHAIN_CBC | CX_LAST, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, msg_len, @@ -326,81 +330,80 @@ int gpg_apdu_pso() { // send gpg_io_discard(0); gpg_io_inserted(ksz); - return SW_OK; - } - - // --- PSO:DEC:ECDH - case PAD_ECDH: { - cx_ecfp_private_key_t *key; - unsigned int curve; + error = SW_OK; + break; + case PAD_ECDH: if (G_gpg_vstate.mse_dec->attributes.value[0] != KEY_ID_ECDH) { - return SW_CONDITIONS_NOT_SATISFIED; + error = SW_CONDITIONS_NOT_SATISFIED; + break; } - key = &G_gpg_vstate.mse_dec->priv_key.ecfp; + ecfp_key = &G_gpg_vstate.mse_dec->priv_key.ecfp; gpg_io_fetch_l(&l); gpg_io_fetch_tl(&t, &l); if (t != 0x7f49) { - return SW_WRONG_DATA; + error = SW_WRONG_DATA; + break; } gpg_io_fetch_tl(&t, &l); if (t != 0x86) { - return SW_WRONG_DATA; + error = SW_WRONG_DATA; + break; } curve = gpg_oid2curve(G_gpg_vstate.mse_dec->attributes.value + 1, G_gpg_vstate.mse_dec->attributes.length - 1); - if (key->curve != curve) { - return SW_CONDITIONS_NOT_SATISFIED; + if (ecfp_key->curve != curve) { + error = SW_CONDITIONS_NOT_SATISFIED; + break; } if (curve == CX_CURVE_Curve25519) { - unsigned int i; - - for (i = 0; i <= 31; i++) { - G_gpg_vstate.work.io_buffer[512 + i] = - (G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset)[31 - i]; + for (cnt = 0; cnt <= 31; cnt++) { + G_gpg_vstate.work.io_buffer[512 + cnt] = + (G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset)[31 - cnt]; } G_gpg_vstate.work.io_buffer[511] = 0x02; - CX_CHECK(cx_ecdh_no_throw(key, + CX_CHECK(cx_ecdh_no_throw(ecfp_key, CX_ECDH_X, G_gpg_vstate.work.io_buffer + 511, 65, G_gpg_vstate.work.io_buffer + 256, 160)); - CX_CHECK(cx_ecdomain_parameters_length(key->curve, &ksz)); + CX_CHECK(cx_ecdomain_parameters_length(ecfp_key->curve, &ksz)); - for (i = 0; i <= 31; i++) { - G_gpg_vstate.work.io_buffer[128 + i] = - G_gpg_vstate.work.io_buffer[287 - i]; + for (cnt = 0; cnt <= 31; cnt++) { + G_gpg_vstate.work.io_buffer[128 + cnt] = + G_gpg_vstate.work.io_buffer[287 - cnt]; } ksz = 32; } else { CX_CHECK( - cx_ecdh_no_throw(key, + cx_ecdh_no_throw(ecfp_key, CX_ECDH_X, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, 65, G_gpg_vstate.work.io_buffer + 128, 160)); - CX_CHECK(cx_ecdomain_parameters_length(key->curve, &ksz)); + CX_CHECK(cx_ecdomain_parameters_length(ecfp_key->curve, &ksz)); } // send gpg_io_discard(0); gpg_io_insert(G_gpg_vstate.work.io_buffer + 128, ksz); - return SW_OK; - } + error = SW_OK; + break; // --- PSO:DEC:xx NOT SUPPORTED default: - return SW_REFERENCED_DATA_NOT_FOUND; + error = SW_REFERENCED_DATA_NOT_FOUND; + break; } - } + break; //--- PSO:yy NOT SUPPORTED --- default: - return SW_REFERENCED_DATA_NOT_FOUND; + error = SW_REFERENCED_DATA_NOT_FOUND; + break; } - return SW_REFERENCED_DATA_NOT_FOUND; end: return error; } From 45512ca770705a046b85229fa7a9ee235e638b67 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 21 Mar 2024 12:11:53 +0100 Subject: [PATCH 72/75] Fix pytools ECC key attribute name --- pytools/gpgapp/gpgcard.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/pytools/gpgapp/gpgcard.py b/pytools/gpgapp/gpgcard.py index 9e08884..df42b22 100644 --- a/pytools/gpgapp/gpgcard.py +++ b/pytools/gpgapp/gpgcard.py @@ -926,9 +926,6 @@ def decode_attributes(self, key: str) -> str: if not attributes or len(attributes) == 0: return "" - if attributes[0] not in set(iter(PubkeyAlgo)): - return "" - if attributes[0] == PubkeyAlgo.RSA: if attributes[5] == 0: fmt = "standard (e, p, q)" @@ -944,14 +941,12 @@ def decode_attributes(self, key: str) -> str: return ret if attributes[0] == PubkeyAlgo.ECDSA: - ret = "ECDSA" + return "ECDSA" if attributes[0] == PubkeyAlgo.ECDH: - ret = "ECDH" + return "ECDH" if attributes[0] == PubkeyAlgo.EDDSA: - ret = "EDDSA" - else: - ret = "" - return ret + return "EDDSA" + return "" def decode_key(self, key: str) -> dict: From 2ec0a05bc81e8b2fe745cef9dd59ddf5abb991ac Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 21 Mar 2024 12:31:32 +0100 Subject: [PATCH 73/75] Update version to 2.2.2 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index da59afa..90076c4 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ APPNAME = OpenPGP # Application version APPVERSION_M = 2 APPVERSION_N = 2 -APPVERSION_P = 1 +APPVERSION_P = 2 APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" SPECVERSION:="3.3.1" From d13a12d2c94dd8e96aea5c3ad2fe21ac58a9ee27 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 21 Mar 2024 14:02:00 +0100 Subject: [PATCH 74/75] Fix DO_GEN_FEATURES empty during restore --- pytools/gpgapp/gpgcard.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pytools/gpgapp/gpgcard.py b/pytools/gpgapp/gpgcard.py index df42b22..897f5b4 100644 --- a/pytools/gpgapp/gpgcard.py +++ b/pytools/gpgapp/gpgcard.py @@ -236,7 +236,9 @@ def get_all(self) -> None: self.data.login = self._get_data(DataObject.DO_LOGIN).decode("utf-8") self.data.url = self._get_data(DataObject.DO_URL).decode("utf-8") self.data.histo_bytes = self._get_data(DataObject.DO_HIST) - self.data.hw_features = int(self._get_data(DataObject.DO_GEN_FEATURES)[0]) + data = self._get_data(DataObject.DO_GEN_FEATURES) + if data: + self.data.hw_features = data[0] data = self._get_data(DataObject.DO_CARDHOLDER_DATA) tags = self._decode_tlv(data) From 665c893102872a9d0162fb417b576fb6df03a23e Mon Sep 17 00:00:00 2001 From: Ledger App Tester Bot Date: Mon, 8 Apr 2024 14:18:37 +0000 Subject: [PATCH 75/75] [auto] Update screenshot --- .../stax/test_menu_settings/00000.png | Bin 10511 -> 10324 bytes .../stax/test_menu_settings/00004.png | Bin 10511 -> 10324 bytes .../stax/test_menu_settings/00006.png | Bin 10511 -> 10324 bytes .../stax/test_menu_settings/00010.png | Bin 10511 -> 10324 bytes .../stax/test_menu_settings/00013.png | Bin 10511 -> 10324 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/snapshots/stax/test_menu_settings/00000.png b/tests/snapshots/stax/test_menu_settings/00000.png index 06ac168e405d55a4cd9f0cdf4668fb2094ee536a..9a586a44e03071a563e818168327e3e3c908b8e2 100644 GIT binary patch literal 10324 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 C0y@qB literal 10511 zcmdUVdpwi<|Njz|5J`oQ4vJdNsmvjj?hrx_vz!|-a|lB@q`Rh+4q{H>4zt@Ba+t#$ zBdW2LF>DS=Si+!x{XTxb$K!i{AK(4qdOWV{eZ5`p!|VBaKA*4m{Y!R# z$ZS>K3Ic&-tS+2$1c5d@0fEH++9C$rF}80m1A#Q@R_81($2{kZaWe4D!liF9m17_$ zF{d-&B&`iL?ebajRpQ_c*6s3tiECO|&#&zlWMu69aci4BF2P)9>AJ!`@lzMiTn()T zOLbn_&^{|_!%BfbXSch7y40&c_bj|O$o<(aroJgj;3 zk?a$*Sary%I&!AsXv!xF&H>>u6t(6N<$)k<=FT8;Z*39BTo%~dU@t48Z8E>5B)?vY zZ`+|MJ5gA-I(0~0!q07g9a6~W`>kC}E3RNSRXixHLROeiqe)|DB;tCD(Z^6}2d9@y z0!MvM*z&{d%kT`IKqpiz?ft8?H~D3)yaFnVQWluQn1U(X74|R3p)$=2sBq}g(0kXR z#dZzOD_58vad}F(O2|xiTxtm^sBb%yYr!p}hKSvkb6a>$Wx-;vj_^l0iVXD!g$ zNJVE_d71FoC|I74J|T)_;ODxhCp^)O;PeU-c)jt;+`WeQp-$7fn?9Rs^2fx*U)X5c z=d-4hctQ)gD<0jRW;IgLKY#wb>2ce}ri!VP2|hcX+-*vF^c0QogRVt@d#Dz+~9TJiEL>wQZZRmsNT!9U8v*Y4g*HC6KX`Z7T=+0m8` z#dYH$_12{m6BE^7NEw062tK++Y(miI_JiQ!nVgF_WXqikG{2jC)g^KLb63u_@<>kF zrql<8Z@w=CZ|pMqYcvUoO{cpfJe-}|Y<8kwG=6)^YV`0)J4l@JxB0pn zYn(S~lT7p$fmB;1@16F3YcPM2U2jpIF!c(xkE4amwG=6VP}yb3`lOtaMq{~>I_~51 zjjDt9jW%rG0*(znKdNMeqRuCnm<~2%A;TDvc4L|!+;d0g()Vol z0hPx+l;Wh4z}B`lBxx#0fD2TPewT6c=Ej>0W-;5|dN`y$y2Lk?jJ}*`pW#Rvqo8>? zJcpzYx-<{X=rfHxp^xHuhsZ=sEbgwn<OBPJKt!i3(uM zHJGKMrhk(mJEAMiZYnYOamoma z8CzSqy#@7tmXbl5`gYC#I^!)H$;@fIEKBPdXGMI2ptg-TH6N{zZ@oW6@r)>%oS~cF zT}&6}7ujt24P=p$<_~7<_44G;=zZOGTDs}ZzXo{U?6opj%l)rGw|Z8!u&;ElG%14S z6+O=UE1>%SgxgaS_t-&9BWeWyWJ)2Va;0^zc*nim)~T?Q(pU5!O2 zC}#sZ4L$-tXz7p@wbD9~I4Fo0&MwEPA&O*W%9G3Bo*9O=who=TaYz{!zY$CZ*0ema zc?Wi&S|Y2|rh&=HDbZ`Zgu$|6`N6v@Iwz~fLh6~Ed6&c9NTWSMo@4i%{CG8!6C9vR zuFj_6D-Z&zC?V9?C0s=yB!JWy!A6-K@tNVaYHk2*lsG#mxU*q4Mz%B}fhQE5Loi*m zqK?n>+SGeGTaQ#+3(%wTjde_6_=FBTULO{@JA_HE)vn~;43P1kgyoW`Az$rO#~Bsu zRqZK15AEH|W_NJSA=S=mswTGIuw|u!zpR3O0Xs;jgB@X>TQI5Qd)6-+Ry{$%tkOoI zb3Ucol)oI)4(26 z*PH&tW7DYp8!=dccGbJ;S_lg9yn*Hw@j5(scMbGo{+&#+hLt=&PELHI)Tx72n=tQE za})dyTBT8zCnhAKWn7tFA?;&Z%OR>T;Zkza@vzJ!a$)vyXYV{}0CTb_!kL_p^-;vY zp+j{ygGM5lo1P&XBge-jt08D{db?wzeGc6zrzB5uvx5R0iaB`S*6;)ja>~~|C~rEg zFTE`3OTy9Oz#C=->?Y!Ne`YbTh?-kTJRikfmXj`wc8^UDvHFO#cE>fy^?@0NTYZl7 z(!l}u+<=OutyEUT+S_EcP4s!kMqDkkzIxOP7u$3sOsus zt@`*6{>LCH8{TOHm$3MVk{qL_kRHaqSNdrbH^F;|8Zj5Xo>UBr! z4EXZmA~roJ$G@IA@-hI(a|}vtv%!mjl&Rrb{G*;C)wjx`-DD~zNI?|#QgvJiuR@kp zgS{x}mMEn&$Ff|4&`fd`TQnV>&ss9MOi@)`F-J0inIEHk-*Ak%2+6aXJ~!z8c(rdW zxb(aadU>t@$z+)G4&OuOG%kK5o=$eVnz`>obs%=&N;D!262g@R35)Yqr&i-|=1FA+ zSE3S$E6!)9ePqCcgb@(&3HS0wh~(K*L$@IOszObDe%0vrmxEvI9$ugg^tx7Is||L( ztBy3Fyhf;Z6j zy(BogU?rD*k#c==R`2;rJ0F1wm6PUm>?}^Kz*O$XX_4&wPyeQti#WfpOVP7UT-oP6 z;c<)FhTMlZ${cPxfC>%`1|Mvd-c`?Cq`a%{J@i!R^@Bo9TN(vi1)GBAv!WPYD9x~^ z9%yjp8aKJlTM0-35o**^HSz4xrIR;g-(#-+y?v!u~9M zmh`1L@xcSDXr&(yPH~fuzi-cN8J_$c%e`j8w_-0%=PwM9xVU|%?hd*;c#jGA{G#XN zwb7fhKThk5kyqEG(DW6$$Pv`6rjPWkFv;wHR^y0UMN9MgRUCTkY~%g%3JMc2~d&_^T!?vBqj>$H-Y+piTbxCDON zm+na3<^5UPC!a+ct3WbWZJeEv^-Mgzdu;!$*x+CJ>io8HAU~-AFEX7h9j*}|QXsjY zj$Y*m>7&#L8WD(Nvc3=ib4!P~_;@XBZ##X^BD*AzL0pVq3wpe8S0lGXk9i|V`VIH? zGR;sD!VF^4rFBQtTffXQ|Ip&h&x)N7Z@dzG8EKSD{!)E<-+7fzYuZ4$6Jji}PBR5e zUde?NP*Kg@t)ie(w9X81Cf(6Ou7THLaO7(AKC859@EG`B;T!M{%ct@E{N^$Q&^qsd zbSrOy!F9r_dP=q{j8ezNV0*vSaEbVoLd6A4Q$?soph{2WvB0yq2p996ZVn2IFm0=} z$XB0cDHwQcS%!jm2jSQ@;Nz@8B~uCW)8pS8yeM2NHM9=~9_29s9Vdc&vs^ufxRP_5 zI@&d;teTq)T%fyxW!k}zowAbPMK89NEzJ(5l~M>MryYC=Vcy@D>*CHX)C7RQm3@d@ z1ALiBdoku+`O}SMwAAW=1eG4q=jy{SMRZ=qaKw)h4bBKRc6>RG8;XeWZVau5z#-_} zILnz>&qNtO3?Q^q3KMS?99jQD|EdfAsphim>y2IEaZv{wXvmi>`3abjlCByX2K^F{ zyfu(d(c&(+4_95;MBmXRhs3w5F2Q7S#plxgZI$BQYWx8DL4&bpKngC#13x>Q6QH@4 zJ15^8rXsV3SPiJR%WV%qF}OIKPp`A<^sui385 zP>D%_G*0Rd?d&W~$SF$icSjJ4G=rE+VJEX927g|~MI>x1ur-c*i>1K!oR8k>o%u5V z$gyXkFB>fTtyA~7)l;0Q{Ir9o0F1uK-b^QW@xQws2U;_fTY0%RuH{VA!Gwg4{9hw4 zsk-c58om)x&&lzFE8r_t-ft+B6;_*!?Bdo?L`(|nGB&TP< zE~ms?&x{Q!5qgQSOS8H58K@WyP!VY*uwdj(G(vacr)UEh5?vc{2ti;sadr0gga>S! zo!96KB|zFJq#UUodeN&*E3j7ydcP;?eDpFe!A%O|6A^VQPGK4)X01i#qp!5+lVzbX zAJhDM-|(9ysGo6M`d|6KLUO$OPLc#@>XZ2k(Eo^GvW|g2aOv;(aWlT4cE7cBM;}FP z4{1=$L+yS4nrri40`YnSH~lIGk$?~C5Cc8=@=Iha#h5G=47m%}Egj+KnaGvpWe00Z zhxC$}d#~L_XCi}g&TH)yw+N`*@bh(6lC$$5kH;gp*3qGuksT)if$}lZIMoe({G{4r ze_p>~YT>n+PoSa^Ko*eU9b&yh8s+#|7OTh5G~F>=C3ik$Du$>JiW%{*dAX(y@7;y@ zB1~{lm=32I62A-@_J!0RCHI4!h87iIn{`Vin9yh97{_-gQQU;=?b8V4`EooyD5tv_ z7=q(FelzT7;BS9w(PI^k#e=ax2bmK z1El9M3>1p-IPVK{ZsiHQ>JCRZC}fgfZ>vrAxwfl{+7*6fC`u6>a;lHStqQeID+b$~ zkODXox#56yJ_{Sj@S-lqZM)q*R?8E*W*U;_HhIa3v-l&JX1=ySqw^u#6z}S7ISLRR zSV5?C8EqaA@IvOJcYDmu%{Q`68`|;#d&?cx{Vm2sWg9^7TJDVyISFk%>19{vy0H+5 zy^(Fr1kYCLLzIac1Y4bHR*9Kqv&(9noSiu+62$e$t-5dnMAEnN5qCG#16i2c`ClH- z*#*?wveEk7UrK`Ls9*`jXju8u47P|xYY>(Gt^?o~Y!h7l~W zZUoGYxNjHQ2a1XEAR!Wl6U1F!i=I=P#$v_Drq8G>{uc-D!6@Ve+bl7F&Gq%)f$lrR z)N8(?4J`jPcI6AF1d>v^d{zkM7+R)$m7+Yo^5^|#2x(LK`~83p%AEfQcpSu` zDPl;7WaoR;mITxhCpmHMq0y35KrDP*Qb8sX3}~DUN< zCB^v+_A(U11)AXT@%eV2zM2fpovhj~o8HK3>y!)^0=P zi~smM{{tNKf2qNfBn9jc*wKfDZ}=txk7!IBw#&dc&(4;niM_2pAD;*ysy?t8m8={T z{PS9QvR)tUMp6pHCZfoMK7zF(x}-KRN84l9M@#EcxYX%Pxpwv3zV200x*q9HWht9s z@?&+?NH(QVH?PEQ=&eAMOgIK|Vgd+FiZ7Z0?{yPxP@NEjrYr zrDR_jgE+=P<@QYjm{}f68Z&Et0|LL2DYaZdhpM@`&)2E)<*hpIkPV+oF z?oFT$5K^CaIJabkCjf9ZPe%1|56~k`&H$i>z)nu9tgN&%adxg_auN~~3q~!yw~_tn zIB|>>c704Tx7$sYg~D7`>_50E^v%oO1%NY35m29Gz#HfH&qQ8-_WE;PYtyVMT zpcNk9#JI-bpr$Pp(Qqg|3ON*aQpI??WO-LwcHNKKP2^pr73?xz)0a52i6d#IYmf&c z!6}7r%(CIxu>kL1RW^pBY~TeK)4D1;#-78ZA%qSyCG-o@bTzn-4_IhI2{6TUa{%)z zuD0s7df4U~&c~)aH8@63b~L{Tsq{L06#7Edw%&H1P#uuy5&oNkaTicNdm@OzB{3mw z@@~0gc~1G4N_jKvGv)3l)j$XuTiCv^;m{W&}jR0Y6WfPYVsX0Q&K)sjnNLE%V6-OmExl(r384Pud$6K5# zT3qUw4Ex%nyJ#oVTvFxHa3jf4vnQ@>J`H{VhxbZ3{B`toM zo&!+g=qFPrwaJcGEGJt$R!Mv5x8cKAp+;l((pscmF-PxwEF~S+#F|j|G)zs0$mFvm zoAz($4Q8~9-P#`i&OQRvyy0Ii5dMd1{_n$E{whD86-bDm*c%Q5nZ3_S0!U{~die*HJfaLSPaKpsrZ(FO~1TVVW)P;=Cvlc{mRS!7g3*>z zZ~skZ)7E2V)gFogDv;>GkosKT2O$3%Z~xR0jmSn1b3&AyI8Z^eE-e8_Ya>H17@)4q zWL3kOELN=S&CF<*VIp$P-Wc7k3h>eMgTC>dfFE)|i`-vM6NpyJjJ%9tCIwU<#U@Mr zA`j8=uJBQGaw3uwMq*~voOS=ltVXT^NeKvGHCAj$ z<<|^&?DB+v`pv-WZ?<;of>U0#j{SrxNO+v_zNcY;Kx+d8(w)6(V`TkGx4B7;P#4>c z+Vt#Tc;>^YlaKsJQk||}D-0e@=`E@K0Eay6C4R8lGzQSQ43bsaa1U|A7qik|%DW6d zOHBeG-bayPNl`hJSt%ip-=t%Qi9rSW})S67~_IJcgW| z^XzbVe6SzDzVP_jrUcYokY^1b>y?`Bl$;1~KfgZBDw+lr#p(JU&HE4rrWSlaB+(XY zoUFXu_T9pP0lPOpPzJT-XN*bCXZ_&%m*yQoq_HLg9FUrTLbpIr5Bc(rKOXvSR;KIEnDu$vUR^i;Qo_wykM5_jvpUVUyhr)S)$Dfn z&U~2EE`R66DkGK5D0kxZU0E}&MEgIFb@xUD(OqN_o#9X%_R#~qXm0|arn{!+7GPQ~ z(*w`j)msiF-SHRDe>!C0?yxJ9>n4H0{XA~uC1ulv>re>o=gDmU-D}QdLu9Xl+if$M zXKEWQ{<(LmW_k-aya0XwQBuS23G2&-KHH4>T2S-YE#|{NtzPH{%*v+-S91Pt{{)QX zq&C|SCSkY7t#A+XfKjC7P$who3Oz9Y(d3<^#Z3ihhesWI27cc|_kPOfg1WMfRE)tKj zhK8KHlt0Z{aCI(^3mYPV)PsGXJ8&))?C$nst>8#w_Ts*a?vn4ywdC9i9zB<5Ju^V` zw&xVKw2TCMLQHhpzCB7JT(J;6TKp-nP5hS7^94`-;=A|3n{uricgsS2Mv4~ZCS#XV z_kJ<$pDnsaF8@F%C!6fN`(_tc>xoMc zQTs&$wdFS>h^v-e~{Qdi0Zy+|E0gz(W(%fcWq~B(P-NALghv$wj zoX$TP6dmg91?LZ~8nb@|bFFu|jxH@8S#Td4l!*MNC2_lPbmsfI82-&~V&!;6_RF-b zP%8koWOi0x^)6i#$-}N{BBwdy)x-rb9C&H{V!Bur=B*Ur(sKjf8rlcXW#kCr*Ds8v z_?=1ciyp@jWh=1a^a!xylB@Npo@$E7!@*lA?9j%d--)q2MwJe`s}&5#Cc#Cb{)HStNP~dXMFBuDV{c~NW|y8P)a1X$VzayW vcYwL8e)OQKU2Ohs0}k@vnN%OHZOnxke=sh7Sq~g^1X)?yovS$Gef$3aEArm8u$}LX;p?MF}ya#L)2F`aJLY_Pf@%*8BYN?B`o={>aL@R&wXM?%{VH$8lcw zuUK8$xA(|i5D2u-^zsE85NOw95Qy*3J$%53uJxNT5J*Yd^n%f~uxIn5^I4^DNbi@z z=)Q5vyUgz?s42jO9r$ed&~XaC10OO$3YUfR4>^X~ZGGm~h47v&Ot-qGUfi=M+w|U? zCECO7@F|c()3#FsA4p9iUhsEOK9RV?0+OJ!d%&O@`yD{r3ry4dgMmX_l^}L!O|Qq0uD?p4=JewStkT~> zn3^e0^F_#fUnCToOc|et!d*^!xz(3Fy|Erf&M#|TxUQPrQ-;J0rxhvfAIqnQD4u!1y+g~S||H6ZQKqc91&x`nmnOL)H0N@F)=Y6ggG#=!n>;C=$>QDQ$mGe)Q{&RANg1jP3ex_ zYKs=ES|eP{L`%rAd1X|t2~P?{?CK^mez&BJ$n2rPxR+jxq|ROd?!iYx3UfCl^Xg1K zJqlCvnadyNg+-LyKFj!AJ@c&LYGI9b{ZNVVet}gRI26jQ0Es#Z(h*;o2O4r}hI~HY z)`vh5YT932P3PKZ=KIj#PPX8PUre^=Nt;iGeidKdqK8jDM_pbG4F7NnuRXE7meU18 zOHs8IXUF~hi|@li=BB2oiJK`W^=^1rM`~QbW-dp^7B0;c3x9ECy{W~r`;&LBZ_d}^ z^S+nQ;$C3!Fu4@9M}^;(z#JT(7jkS-S6d{Y>s?q!t-7pc)=|1e_iCogn!nNc6{e2eCR zLBgkLIw$JwI=>e`wYoomaqpD{T|CQ*g^GhnesA+} z1^Rrx;m+TV`M*x$U#cYUNxx(d5K;NlQ@15d#9ddS4fiDcV$UNlg~>Rmr%sr9FPmG^ zo>4uu7RLDL3Y`SjU6V$BX#n=^l)gOrWSM`WwA-YSv8vg z?j$@5+@8o#!lKK`7A`Hk7=YL9cL`v9YOZIKKft3=-&)3eQmyVT@2a6svDxZ~?8SUu zjGtbjBf9&UU9d}Itelt-?e&9+I;NlCVn3p)UX0!N$a|Trn`fn6{-CfI##9;7v}6#Q z7q|z@QBK(Y?w1;8MkArh9*u>0H}a>0T_bAjcn_dZ5BfJrUk1He)z3H5Q@CicX+R%g z{~azr=2XdAIypgYaIGYU*Ek?7b(1^_u9{(y5geE7P6bipS~Hk;tsU|H*KpVACSMj3 zt}x$_ej@zJ9J0Kk=TDpT6L~Sd5++5D8231k%Bq8N2LNI@tNIq^G;_LJcxQ2%mU_rn zHL4E^x5van)x1BPO+cJzB+9D$vixEvHO>g9jC&1wf z$pUmTto}C5@6idLTM;{&e?dZfW9o`>Ol9XjT>N#dS{J&~p~A z@EWSp6r~WrtcDQl(~-UmIN@}54@1vrmHe1|#6g8?N{cX~RcnkNeNYJQOh57Z{uIJn z@sfpkIn9}n6QF?~@w=;Oc_!Q3Wl+1tC--|my@ZKdt-dIwP-!Gj+dpHMdr24O1ipVe zRVKJWo8ELXQD3-*K9!T()Y3WG7rR_i9Iy4pj;%buTJED=zl8B{BoWyMM&4&ibBXy} zK9yAWgTMQtP_iR=eu|jjBbF2$DZFGmuB1ro>BsBtBqkH=UO`vJ`tW!3!g9|-LY73T$FRdN?Eb$sP4CjJJzXjibIKX0E}X9*r^6 zoS|p0V62a%_3PyWN?mFNyegE_=JbTXYfFt#!@ASG$0UbtUat0mDQgXm9vMl^)#E1{ zAd9!_44E_5pJzqw_4CVPXph4k_`QSuwByQO>J5;sTCVhHeeQwalpb_Jz&g=$>;T1! zFOgnTDxY9OIeR@E8>FVKy#4JDwY}DR@?}7rFZOXHPSq|soR2jIu?Zb>Po_7-9+C(x z&E8P{%zm0H0BO3P(6p6xqFt1`N7kW?`^-vF zWB$0PF>NAp({~@DKomDU;pA-5&`$R2x^0My-#s?hDyB#cyfl$x4Xf4Rre}|>oZHu~ zjH5r`W4&Hj@SAkrnjVWJ%bz%opW7zEZHnYdv-jdsAZl!7}UR959>Zx{4r9V^20a8l7pBu3RCCI04sWb7Rquc5trr2O=s=yffLdBN!hPGN<3oJ#Ihn3RHBnS#snXu^;9?NyxnvjaY#V+V zqJvVQatPoms*uqYiPpivY?}^IpHZ1iB&G=E#N_&|DlwIYG*cW0&E0^7XVs6(0k`AVbY>uA z%?ecXSuRop7yZtC6b1d&|e~d5vk7uS6SY-Hy@^70g87z(ae~y zjCPCgFxcs=@8+xP1d=3UnIIBgLZpQ9sim!Jc&F#EP18@9+CYKVH0L}ukn>|H%m?#c z+hUHh$!o3>&~xc@J}2$kw>3nHIV2G8(qrp)Jwn4?+|TZ)C}m>l8~W$LS|YWCT)$ZP z*8Qv`1yf4cYC4Ri^kA5%FPAputYtVf^Q?g4nIU$jzCYZX^36!lM~a0VR$rHV=yamI zzb-y_!FdI8#x$L??$c8p10UVgvW~q?Ps`XFH4Qb$k6*WG=d9y0OG`@wgQ*ZhEoldyGcj71tNvy2=Wl}~ zEmXAF)`4@%p%6JeL&cy=gt-|nPdH|*&>PTe+|7c50(jJprcwKGf6rH$s%ZxyLO4Y%<1E(@F)HSklEtfw`Pvbg-_uBwL^F6swM z#&VMfa&*;xoEl$g4F^ha$QqmP;O_xB|F}Z8 zU%4Ksr!hz5;MvfvhIOZw7%kVIcgQ3529t-E#8IZEK@mX zR5GIlz4HRIqYQK`UjP96vuXeoT4{g_PO%QyL05P@6h_XhYvs^q;ol%q_me) zhdjbq_QD`Y%xn*2M}M$>>+miMueTxe6YwL;u0+)E&jY%XZ#Cy!Dyu<^(pz2}KFGg1|9@%yNUsp^8ki#9 zB;cWr?iqn@Hpf=I9J;BqmTxqb2hz|LC1c;uuIw+`s8 z)G{XR$i7de!+~RYeIn2L;oK?=pMHqMBguPDr#spP3#X+5*;J&yFKa4aO?31l%f47$ z(CBkT3u?H|ql>?G`qrj*UXCRDhc&~gTKvm7_M_|-onA?{=G$s|QAF2T^0`5Ujid}` z1s}}RRNW(bM3SRDK=P`THQ`8`GX}(g@XL&6~`-9$>&J_UcxBaBr<_ZzK;BP#u zJNPRFFfu{6$|-8j>oQlRFN!Bn(63$1q+m8{q7PqYVSK;5lFhqHy0zTZ#f{Fm1Y}aV z*nza-Y}iFd^e97Gv+`)G4H8@A?Pe;hoV^cMTB;lGu^GhnxS*lFQ+Z%Fw+ElVy!H02 z%-n&(y8%YG^6<_f*TzKc9aq^R9a81B;;C)!o;}%{#cq|-L13q5TCR(8uR_*OZPo31`(A?-Z*%crow z)%daei-Tf@tw>RpjaP<;<2E=UV##-(nKG5Ld#a}_^f?ILtMJBqZSswMVDdA*G2{P_ zy!+oIi2oAq@QcW#wMB|ND*V8Ka9zaBnr$bf@~G2A$V?lf{cFvnpkPoA0o<7SQfY6M z1(Tb6DC|ltVEsc!1O0-_4kSGIO`zr|-cs8>lA(BVU;27;qGE?l5eL_!JEvBgiji;Y3;I zTG|T>DGqu5{4n~eOk1Ad@W&vA1OcFBh`lF*98!8ygz>a0SYse?GmAXzoPEplbZpk5 zLSDaGlCxdpW?$}%XsOc-6#{7x738;&j|R5OJmdc z$<3JJv+DeRW#xX)C)G9+yV0oD@7AB&sFgVjn?=L_ot568zBes1%Nfk#?oP%0bZX##`XfR^E#cYCblZ@|;Ek zGNIL%!O0EwJ$5x3gKx*8jn2PVS$(?{HrKU2OO=iGCp{STZMz1>^%9WS{#Udk6+H^! z$M+;CJt$NP$h`*SP=3PO?joN&yM81US1HKV=>(HcKCC}>=XSlbkL*Z`FMp|qxViGL zZLb>z81)sBid4@@a96o z;#r+zVKe`Pt#4huQ{r@ZLd9i}My@s<1iuhFS$rO30Q&d0B>zVZx$}j!;>-?C)QlI1 z9Jsv`+Nrwi1BIok9{Z0qPXDD@?lfXqQViXslz=jzmQ@2hqdoomc^&P#cQ}igsn? znc8~IsCdxWX9WF6G$n_x4CSOZ!Va07du(?&$-|KzjLJ1^n^=l6$ZZSHXQ)JYIJ$1v zN=>?AWC&z6(T9b2Kb=@f6Qk_?hi|lZVV;{ipt1CZ?evs%HBmp+OWvsb*LiPGn2x01 zmT9}~qvN*5H|p{JHsn2>KlY*Y@v8EmbR#ZciYI;3PprNMdW+Vlemd^b(v85QR>ii5 zlZYww@Cj)VfyI2*0ry2)7lk=aw4v#N&~qcHnk&<~pKhMbmUyA0&hPNE@5ba>?yetS z>EpY^IQ6+QKw5zVXgXDVp_00I&vcbk4A7(qT$d2k^a$h5^2^MK4yDdwC^i`tv>_&krHrd@uFBYm*JU>E4XdQ?Sehj!62 zq_VWMf@Obb&u4veY!+|^ZbbwZd3@(^CVJx4C(O*0X|2)(P1-@tG$6)yG1SZYo+8K> z)}DaGPUX#jFUa1_K-vPmz?P7Zgzl4i;yXc3yZxas9&??2Tc#MPOOF8=q~}Tl{yd*dIHQcU z`0~AAp%=zrb^tX<$lclx+zYOdLVm)vHb~Gl zV|u+0y8pN+1zVg@_b4AuQL>`H_@k5Kn+&15h?sX$ktJ1}9C=8G>hW9-9yt^a6 zQelh6<6#cZgJYCLx`M7xr^fNlA@W)8mhe{Qvf^povJNtN-rCz|JC^VWl`foP;~hlR zdCft;eCr1jMh{k^Y&bP|dR2E=N0dcIOl1IMk2+;Zt=A&H^`mmn%QmI9#B(a`xbu7u zU)a97pL#V_=sEqdV}=m@%acb;=_TW@VQV0fn0p$*!t1)fdKHSNP8hvvHLOGOKYYI} zboljg^3vii^!#C~!@w-$-80=YC&t~uPaQ{SvT=uP1tqT+%THxrFO?CON0eNYJPmC1 z0T>>Y7xS`~bnU#HLEmpFU>H#34jbavba`;UsFDCk6nQt#^_A9O{F48r&3$CikU^*dV##JF;XUF?afsSEI?#AhwP-=x>Q7sVO&ZC&4v zy{lOh-xOyU02v8ta-E+@qvFm--mS*F8pGWFG|Y0WI)-=s9X76Tlm2ZF?)hbvH}PFZ z4#jKjLEf!>;&}YXX}m$$oviBFNZp=|w`~+@1A{7rbZGJ26#?Ykt5H#i?nH9Lo$8i* zA8^d$c=m7QYP#yI?5)!-@maIq-?z;_I~Yr_$Oh+jzfVzvn24};$Al*i_4Y&v#|QJD zKH8NeNjLv?U`#UUn7f18`)-L^QxjOz14+7z@8yrC@02c=UH=U)cdSb7x4v2K9-QI_ z@S}w4BZBcOGC6mz|5pB99R@$WV)(Wvv1>ML!}cxJK+bjfP@fmEAhoaM$b+sH>8(Ft z-S^26yK?SkKel^u99T5M?P#CZUIBXN2Qb70W_h!VyrDONi;eoSN&baS3WPuwfdlm9 zYW3}$*|4p!fN{AD+t_2}h>P&1wCWcAmje9%V>5Gj5! zUvYo5yfb6*l$7eSG zqqSqe?Gh(w`0hN+AxPj3=G78)>1aP8&&a)K=LhF9Cg`kl4&&pr7TbKewwPDdiHgOMZVFrK5bF9~1fI)u>N1%>LFE@ZWCTbhMqwrds$Z@f+=Ao9#_(LrW89iB8-ev@0MXc$=}~ zWOX_z*MN%Qu47oMB`@bVPyzHYk8D##4@2{k;vm8*=K){mw?}U(N_`83M_>O@))ezc z=-ez{XI<#qTX&%@<<`T=1=Xj`*B?dK^^pm6{rYIF*bd5V$Rm?)ON)Lpdm$f(%4I4k z!ur3-PyB;Y-r~4a>Zh5*B5joG6#db^wMX{Du;xLD%oDQ4FtA$?WNKn{q2dpC!v6t9 C0y@qB literal 10511 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 C0y@qB literal 10511 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 C0y@qB literal 10511 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 C0y@qB literal 10511 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 R7IqLj4;&?>grX$e{{UPlB&+}c diff --git a/doc/user/app-openpgp.rst b/doc/user/app-openpgp.rst new file mode 100644 index 0000000..8f4acfc --- /dev/null +++ b/doc/user/app-openpgp.rst @@ -0,0 +1,1686 @@ +.. + Ledger App OpenPGP. + (c) 2024 Ledger SAS. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +.. + ------------------------------------------------------------------------ + LaTex substitution Definition + ------------------------------------------------------------------------ + + + +License +======= + + | Ledger App OpenPGP. + | (c) 2024 Ledger SAS. + | + | Licensed under the Apache License, Version 2.0 (the "License"); + | you may not use this file except in compliance with the License. + | You may obtain a copy of the License at + | + | http://www.apache.org/licenses/LICENSE-2.0 + | + | Unless required by applicable law or agreed to in writing, software + | distributed under the License is distributed on an "AS IS" BASIS, + | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + | See the License for the specific language governing permissions and + | limitations under the License. + + +Introduction +============ + +GnuPG application for Ledger devices. + +This application implements "The OpenPGP card" specification revision 3.3. +This specification is available in doc directory at [G10CODE]_. + +The application supports: + +- RSA with key up to 4096 bits +- ECDSA with secp256k1, secp256r1, brainpool 256r1 and brainpool 256t1 curves +- EDDSA with Ed25519 curve +- ECDH with secp256k1, secp256r1, brainpool 256r1, brainpool 256t1 and curve25519 curves + +This release has known missing parts (see also [GPGADD]_): + +- Seed mode ON/OFF via apdu + + + +How to install GPG Application +============================== + +System Configuration +-------------------- + +You need to install CCID. +For Linux and MAC, the Ledger CCID interface is not supported by default by ``pcscd`` and must be manually added. + +Linux +~~~~~ + +You have to add your devices to ``/etc/libccid_Info.plist`` + +MAC +~~~ + +1. First it is necessary to disable SIP, that forbid editing files in ``/usr/``. +2. You have to add your devices to ``/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist`` +3. Enable SIP + +Note: See https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html + +Windows +~~~~~~~ + +TODO... + +Manual update of CCID +~~~~~~~~~~~~~~~~~~~~~ + +In case the devices ids are not set or not correct, please update the ``Info.plist`` file manually. +Remember there are 3 important nodes in this xml file, and the lines must be coherent between those nodes: + +- ifdVendorID +- ifdProductID +- ifdFriendlyName + +Thus, you must ensure (or add): + +- For Nanos: + + - ifdVendorID: 0x2C97 + - ifdProductID: 0x1009 + - ifdFriendlyName: Ledger Nano S + +- For Nanox: + + - ifdVendorID: 0x2C97 + - ifdProductID: 0x4009 + - ifdFriendlyName: Ledger Nano X + +- For Nanos+: + + - ifdVendorID: 0x2C97 + - ifdProductID: 0x5009 + - ifdFriendlyName: Ledger Nano S Plus + +- for Stax: + + - ifdVendorID: 0x2C97 + - ifdProductID: 0x6009 + - ifdFriendlyName: Ledger Stax + +Notes: + +- The 3 entry nodes must be added for each device. It can be easier to add new ones at the end of each list. +- A file `0001-plist.patch` is provided in this directory. + + +OpenPGP Card application explained +================================== + +Menu Overview +------------- + +The full menu layout is: + + | Select Slot + | \ *Choose:* + | Slot 1 #+ + | Slot 2 + | Slot 3 + | Set Default slot + | Settings + | Key Template + | Choose Key... + | Signature + | Decryption + | Authentication + | Choose Type... + | RSA 2048 + | RSA 3072 + | RSA 4096 + | NIST P256 + | ED25519 + | Set Template + | Seed mode *ON/OFF* + | PIN mode + | \ *Choose:* + | On Screen + | Confirm only #+ + | Trust + | Set as Default + | UIF mode + | UIF for Signature *ON/OFF* + | UIF for Decryption *ON/OFF* + | UIF for Authentication *ON/OFF* + | Reset + | About + | \ *OpenPGP Card* + | \ *(c) Ledger SAS* + | \ *Spec 3.3.1* + | \ *App 1.5.4* + +| Emphasis entries are not selectable and just provide information. +| A "**#**" after the entry label means default value on reset. +| A "**+**" after the entry label means current value. + + +Device Info +------------- + +The *Device Info* provides current user and slot information. The format is: + + | ```` + +with: + +- **name** is the one provided to ``gpg --card-edit``. See [GPGSC]_. +- **s** is the 32 bits card serial number. Note that the last three bits always encode the current slot value. +- **n** is the current slot, see below. + + +Select Slot +------------- + +For Nanos, this menu is only available on *XL* version. It is available on all other devices. + +A Slot is a set of 3 key pairs *Signature, Decryption, Authentication* as defined by gnupg specification. + +Usually a GPG card application only manages a single set. Ledger version enhances this and allows you to manage 3 key sets. + +The *Select Slot* menu allows you to select the slot you want to play with, and +to set the default slot when the application start. + +To change the current slot, display the slot you want and select it + +To change the default slot, first select it, and then select the *Set Default* entry. + + +Settings +-------- + +Key Template +~~~~~~~~~~~~ + +A key template is defined by the OpenGPG card application specification. +It describes the key to be generated with the ``generate`` command in ``gpg --card-edit`` + +To set up a new ECC template you have three choices: + +- The ``gpg --edit-card`` interactive setup (recommended) +- The ``gpg-connect-agent`` tool +- The device menu. + +**gpg --card-edit** + +This method suppose you have a recent GnuPG tool and that you correctly configured it. +See the dedicated section for that. + +In a terminal launch: + + | ``$ gpg --card-edit`` + | ``gpg/card>`` *admin* + | ``Admin commands are allowed`` + | + | ``gpg/card>`` *key-attr* + | ``Changing card key attribute for: Signature key`` + | ``Please select what kind of key you want:`` + | ``(1) RSA`` + | ``(2) ECC`` + | ``Your selection?`` *2* + | ``Please select which elliptic curve you want:`` + | ``(1) Curve 25519`` + | ``(4) NIST P-384`` + | ``Your selection?`` *1* + | ``The card will now be re-configured to generate a key of type: ed25519`` + | ``Note: There is no guarantee that the card supports the requested size.`` + | ``If the key generation does not succeed, please check the`` + | ``documentation of your card to see what sizes are allowed.`` + | ``Changing card key attribute for: Encryption key`` + | ``Please select what kind of key you want:`` + | ``(1) RSA`` + | ``(2) ECC`` + | ``Your selection?`` *2* + | ``Please select which elliptic curve you want:`` + | ``(1) Curve 25519`` + | ``(4) NIST P-384`` + | ``Your selection?`` *1* + | ``The card will now be re-configured to generate a key of type: cv25519`` + | ``Changing card key attribute for: Authentication key`` + | ``Please select what kind of key you want:`` + | ``(1) RSA`` + | ``(2) ECC`` + | ``Your selection?`` *2* + | ``Please select which elliptic curve you want:`` + | ``(1) Curve 25519`` + | ``(4) NIST P-384`` + | ``Your selection?`` *1* + | ``The card will now be re-configured to generate a key of type: ed25519`` + +To show the current template use the ``gpg --card-status`` command. + +**gpg-connect-agent** + +This method suppose you have correctly configured your GnuPG tool. +See the dedicated section for that. + +In a terminal launch: + + | ``gpg-connect-agent "SCD SETATTR KEY-ATTR --force 1 " /bye`` + | ``gpg-connect-agent "SCD SETATTR KEY-ATTR --force 2 18 " /bye`` + | ``gpg-connect-agent "SCD SETATTR KEY-ATTR --force 3 " /bye`` + +This 3 commands fix, in that order, the template for Signature, Decryption, Authentication keys. + +Supported curve name are: + +- secp256k1 with tag 19 +- nistp256 with tag 19 +- cv25519 (only for key 2) +- ed25519 with tag 22 (only for key 1 and 3) + +To show the current template use the ``gpg --card-status`` command. + +**Device menu** + +First under *Choose Key* menu, select the one of 3 keys for which you want to modify the template. +Then under "Choose Type", select the desired key template. +Finally select "Set Template" entry to set it. + +To show the current template use the ``gpg --card-status`` command. + +Seed mode +~~~~~~~~~ + +When generating new keys on the device, those keys can be generated randomly or in a deterministic way. +The deterministic way is specified in [GPGADD]_. +The current mode is displayed in the first sub menu. +To activate the seeded mode select *ON*, to deactivate the seeded mode select *OFF*. + +When the application starts, the seeded mode is always set to *ON* + +PIN mode +~~~~~~~~ + +Some operations require the user to enter his PIN code. +The default PIN values are: + +- user: ``123456`` +- admin: ``12345678`` + +The PIN entry can be done using 3 methods, named +*On Screen*, *Confirm only*, *Trust*. + +After each mode a *+* or *#* symbol may appear to tell which mode is the current one +and which one is the default when the application starts. +The default mode can be changed by first selecting the desired mode and then +selecting the *Set default* menu. + +Note: *Trust* can not be set as default mode. + +Before you can change the PIN mode, you need to verify the PIN on the client. To do this, +run ``gpg --card-edit``, then ``admin`` and finally ``verify`` on you PC. You will then +be asked to enter the current PIN. After doing so, you can change the PIN mode on your +device. + + +**On Screen** + +The PIN is entered on the device screen. For entering the PIN choose the +next digit by using the left or right button. When the digit you expect is displayed +select it by pressing both buttons at the same time. + +.. image:: pin_entry.png + :align: middle + +Once all digits are selected, validate the PIN by selecting the **'V'** (Validate) +letter + +.. image:: pin_validate.png + :align: middle + +If you want to change the previous digit select the **'C'** (Cancel) letter. + +.. image:: pin_cancel.png + :align: middle + +Finally if you want to abort the PIN entry, select the **'A'** (Abort) letter. + +.. image:: pin_abort.png + :align: middle + +**Confirm only** + +The user is requested, on the device screen, to confirm the PIN validation. +The PIN value is not required, the user just has to push the *REJECT* or *OK* button on the device. + +This is the default mode after application installation. + +.. image:: pin_confirm.png + :align: middle + +**Trust** + +Act as if the PIN is always validated. This is a dangerous mode which should only be +used in a highly secure environment. + +UIF mode +~~~~~~~~ + +By activating UIF mode for either signature, decryption or authentication, a user validation +will be ask by the device each time the related operation is performed. + +To activate or deactivate the UIF, select the operation to protect and press both button. +When activated, a '+' symbol appears after the operation name. + +Reset +~~~~~ + +Selecting the menu will erase all OpenPGP Card Application data and will +reset the application in its '*just installed*' state. + + + +OpenPGP Card application usage +============================== + +GPG +--- + +The OpenGPG Card application need at least version 2.1.19 for full support. +A version prior to 2.1.19 will fail when using ECC. + +You should test with a test key and make a backup of your +keyring before starting, except if your are sure about what you do. + +Configuration +~~~~~~~~~~~~~ + +In order to use a Ledger device with gpg it is needed to explicitly setup +the reader and the delegated PIN support. +Edit the file ``~/.gnupg/scdaemon.conf`` and add the following lines: + + | ``reader-port "Ledger Token"`` + | ``allow-admin`` + | ``enable-pinpad-varlen`` + +Note: ``enable-pinpad-varlen`` option is mandatory, else ``gpg`` could request +the PIN on the *host*, which is not supported by Ledger App. + +You can check ``the reader-port`` value by running the command line ``pcsc_scan``: + + | ``$ pcsc_scan`` + | ``Using reader plug'n play mechanism`` + | ``Scanning present readers...`` + | ``0: Ledger Nano S Plus [Nano S Plus] (0001) 00 00`` + | ``1: Alcor Micro AU9540 01 00`` + | + | ``Thu Jan 11 10:58:25 2024`` + | ``Reader 0: Ledger Nano S Plus [Nano S Plus] (0001) 00 00`` + | ``Event number: 0`` + | ``Card state: Card inserted, Exclusive Mode,`` + | ``ATR: 3B 00`` + | + | ``ATR: 3B 00`` + | ``+ TS = 3B --> Direct Convention`` + | ``+ T0 = 00, Y(1): 0000, K: 0 (historical bytes)`` + | ``Reader 1: Alcor Micro AU9540 01 00`` + | ``Event number: 0`` + | ``Card state: Card removed,`` + +Get/Set basic information +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``gpg --card-status`` command provides default card information. Just after +installation it should look like this: + + | ``$ gpg --card-status`` + | ``Reader ...........: Ledger Nano S Plus [Nano S Plus] (0001) 01 00`` + | ``Application ID ...: D2760001240103002C97AFB114290000`` + | ``Version ..........: 3.3`` + | ``Manufacturer .....: unknown`` + | ``Serial number ....: AFB11429`` + | ``Name of cardholder: [not set]`` + | ``Language prefs ...: [not set]`` + | ``Salutation .......:`` + | ``URL of public key: [not set]`` + | ``Login data .......: [not set]`` + | ``Signature PIN ....: not forced`` + | ``Key attributes ...: rsa2048 rsa2048 rsa2048`` + | ``Max. PIN lengths .: 12 12 12`` + | ``PIN retry counter: 3 0 3`` + | ``Signature counter: 0`` + | ``Signature key ....: [none]`` + | ``Encryption key....: [none]`` + | ``Authentication key: [none]`` + | ``General key info..: [none]`` + +You can set the user information with the ``gpg --card-edit`` subcommands. +For examples: + + | ``$ gpg --card-edit`` + | ``gpg/card>`` *admin* + | ``Admin commands are allowed`` + | + | ``gpg/card>`` *name* + | ``Cardholder's surname:`` *Doe* + | ``Cardholder's given name:`` *John* + | + | ``gpg/card>`` salutation + | ``salutation ((M)ale, (F)emale or space):`` *M* + | + | ``gpg/card>`` *list* + | + | ``Reader ...........: Ledger Nano S Plus [Nano S Plus] (0001) 01 00`` + | ``Application ID ...: D2760001240103002C97AFB114290000`` + | ``Version ..........: 3.3`` + | ``Manufacturer .....: unknown`` + | ``Serial number ....: AFB11429`` + | ``Name of cardholder: John Doe`` + | ``Language prefs ...: [not set]`` + | ``Salutation .......: Mr.`` + | ``URL of public key: [not set]`` + | ``Login data .......: [not set]`` + | ``Signature PIN ....: not forced`` + | ``Key attributes ...: rsa2048 rsa2048 rsa2048`` + | ``Max. PIN lengths .: 12 12 12`` + | ``PIN retry counter: 3 0 3`` + | ``Signature counter: 0`` + | ``Signature key ....: [none]`` + | ``Encryption key....: [none]`` + | ``Authentication key: [none]`` + | ``General key info..: [none]`` + +Notes: + +- Modifying the user information will prompt you to enter ``User PIN``. +- Setting user information is not required for using gpg client. + +Generate new key pair +~~~~~~~~~~~~~~~~~~~~~ + +For generating a new key pair follow those steps: + +- Select the desired slot +- Setup the desired key template for this slot +- Generate the new key set + +**Step 1** + +Starting from main menu: + +- Select *Select slot* menu +- Scroll to desired slot +- Select it +- Optionally set it as default by selecting *Set Default* menu +- Select *Back* to return to main menu. + +**Step 2** + +The default template for each three keys (*signature*, *decryption*, +*authentication*) is ``RSA 2048``. If you want another kind of key +you have to set the template before generating keys. + +WARNING: Changing the current template of a key automatically erases the associated one. + +Starting from main menu: + +- Select *Settings* +- Select *Key template* +- Select *Choose Key...* (a) +- Scroll and select which key you want to set the new template for +- Select *Choose type...* +- Scroll and select among the supported key types and sizes +- Select *Set template* +- Repeat this process from (a) if you want to modify another key template +- Select *Back* to return to main. + +**Step 3** + +Once the template has been set, it's possible to generate new key pairs with ``gpg``. + +WARNING: gpg will generate the 3 key pairs and +will overwrite any key already present in the selected slot. + +Here after is a detailed log of key generation of ECC keys, assuming +the key templates are ``NIST P256``. + +**Edit Card** + + | ``$ gpg --edit-card`` + | ``Reader ...........: Ledger Nano S Plus [Nano S Plus] (0001) 01 00`` + | ``Application ID ...: D2760001240103002C97AFB1142B0000`` + | ``Version ..........: 3.3`` + | ``Manufacturer .....: unknown`` + | ``Serial number ....: AFB1142B`` + | ``Name of cardholder: John Doe`` + | ``Language prefs ...: [not set]`` + | ``Salutation .......: Mr.`` + | ``URL of public key: [not set]`` + | ``Login data .......: [not set]`` + | ``Signature PIN ....: not forced`` + | ``Key attributes ...: nistp256 nistp256 nistp256`` + | ``Max. PIN lengths .: 12 12 12`` + | ``PIN retry counter: 3 0 3`` + | ``Signature counter: 0`` + | ``Signature key ....: [none]`` + | ``Encryption key....: [none]`` + | ``Authentication key: [none]`` + | ``General key info..: [none]`` + +**Switch to admin mode:** + + | ``gpg/card>`` *admin* + | ``Admin commands are allowed`` + +**Request new key generation without backup** + + | ``gpg/card>`` *generate* + | ``Make off-card backup of encryption key? (Y/n)`` *n* + +**Unlock user level ``81``** + + | ``Please unlock the card`` + | + | ``Number: 2C97 AFB1142B`` + | ``Holder: John Doe`` + | + | ``Use the reader's pinpad for input.`` + | ``OK`` + | ``Press any key to continue.`` + +**Set key validity** + + | ``Please specify how long the key should be valid.`` + | ``0 = key does not expire`` + | `` = key expires in n days`` + | ``w = key expires in n weeks`` + | ``m = key expires in n months`` + | ``y = key expires in n years`` + | ``Key is valid for? (0)`` *0* + | ``Key does not expire at all`` + | ``Is this correct? (y/N)`` *y* + +**Set user ID** + + | ``GnuPG needs to construct a user ID to identify your key.`` + | + | ``Real name:`` *John Doe* + | ``Email address:`` *john.doe@foo.com* + | ``Comment:`` + | ``You selected this USER-ID:`` + | ``"John Doe "`` + | + | ``Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?`` *O* + +**Unlock admin level ``83``** + + | ``Please enter the Admin PIN`` + | + | ``Number: 2C97 AFB1142B`` + | ``Holder: John Doe`` + | + | ``Use the reader's pinpad for input.`` + | ``OK`` + | ``Press any key to continue.`` + +**Unlock user level ``81``** + + | ``Please unlock the card`` + | + | ``Number: 2C97 AFB1142B`` + | ``Holder: John Doe`` + | ``Counter: 0`` + | + | ``Use the reader's pinpad for input.`` + | ``OK`` + | ``Press any key to continue.`` + +**Final confirmation** + + | ``Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?`` *O* + | ``gpg: key DF3FA4A33EF00E47 marked as ultimately trusted`` + | ``gpg: revocation certificate stored as 'xxxx/openpgp-revocs.d/89F772243C9A3E583CB59AB5DF3FA4A33EF00E47.rev'`` + | ``public and secret key created and signed.`` + +**Get information after key generation** + + | ``gpg/card>`` *list* + | + | ``Reader ...........: Ledger Nano S Plus [Nano S Plus] (0001) 01 00`` + | ``Application ID ...: D2760001240103002C97AFB1142B0000`` + | ``Version ..........: 3.3`` + | ``Manufacturer .....: unknown`` + | ``Serial number ....: AFB1142B`` + | ``Name of cardholder: John Doe`` + | ``Language prefs ...: [not set]`` + | ``Salutation .......: Mr.`` + | ``URL of public key: [not set]`` + | ``Login data .......: [not set]`` + | ``Signature PIN ....: not forced`` + | ``Key attributes ...: nistp256 nistp256 nistp256`` + | ``Max. PIN lengths .: 12 12 12`` + | ``PIN retry counter: 3 0 3`` + | ``Signature counter: 12`` + | ``Signature key ....: F844 38BB CA87 F9A7 6830 F002 F8A4 A353 3CBF CAA5`` + | ``created ....: 2017-08-22 15:59:36`` + | ``Encryption key....: B1D3 C9F2 C3C5 87CA 36A7 F02E E137 28E9 13B8 77E1`` + | ``created ....: 2017-08-22 15:59:36`` + | ``Authentication key: F87D EF02 9C38 C43D 41F0 6872 2345 A677 CE9D 8223`` + | ``created ....: 2017-08-22 15:59:36`` + | ``General key info..: pub nistp256/F8A4A3533CBFCAA5 2017-08-22 John Doe `` + | ``sec> nistp256/F8A4A3533CBFCAA5 created: 2017-08-22 expires: never`` + | ``card-no: 2C97 AFB1142B`` + | ``ssb> nistp256/2345A677CE9D8223 created: 2017-08-22 expires: never`` + | ``card-no: 2C97 AFB1142B`` + | ``ssb> nistp256/E13728E913B877E1 created: 2017-08-22 expires: never`` + | ``card-no: 2C97 AFB1142B`` + +At this point it's possible to check that the key has been generated on card with the following command: + + | ``$ gpg --list-secret-keys john.doe@foo.com`` + | ``gpg: checking the trustdb`` + | ``gpg: marginals needed: 3 completes needed: 1 trust model: pgp`` + | ``gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u`` + | + | ``sec> nistp256 2017-08-22 [SC]`` + | ``F84438BBCA87F9A76830F002F8A4A3533CBFCAA5`` + | ``Card serial no. = 2C97 AFB1142B`` + | ``uid [ultimate] John Doe `` + | ``ssb> nistp256 2017-08-22 [A]`` + | ``ssb> nistp256 2017-08-22 [E]`` + +Moving an existing key pair +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This section shows how to move an existing key onto the Ledger device. + +The key to transfer here is a RSA 4096 bits key: + + | ``$ gpg --list-secret-keys "RSA 4096"`` + | ``sec rsa4096 2017-04-26 [SC]`` + | ``FB6C6C75FB016635872ED3E49B93CB47F954FB53`` + | ``uid [ultimate] RSA 4096`` + | ``ssb rsa4096 2017-04-26 [E]`` + +In case of transfer it is not necessary to previously set the template. +It will be automatically changed. +When generating a new key, the 3 keys (*signature*, *decryption*, *authentication*) are automatically generated. +When transferring existing ones, it is possible to choose which one will be moved. + +**Edit Key** + + | ``$ gpg --edit-key "RSA 4096"`` + | ``gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.`` + | ``This is free software: you are free to change and redistribute it.`` + | ``There is NO WARRANTY, to the extent permitted by law.`` + | + | ``Secret key is available.`` + | + | ``sec rsa4096/9B93CB47F954FB53`` + | ``created: 2017-04-26 expires: never usage: SC`` + | ``trust: ultimate validity: ultimate`` + | ``ssb rsa4096/49EE12B0F5CBDF26`` + | ``created: 2017-04-26 expires: never usage: E`` + | ``[ultimate] (1). RSA 4096`` + +**Select the key to move, here the encryption one.** + + | ``gpg>`` *key 1* + | + | ``sec rsa4096/9B93CB47F954FB53`` + | ``created: 2017-04-26 expires: never usage: SC`` + | ``trust: ultimate validity: ultimate`` + | ``ssb* rsa4096/49EE12B0F5CBDF26`` + | ``created: 2017-04-26 expires: never usage: E`` + | ``[ultimate] (1). RSA 4096`` + +**Move** + + | ``gpg>`` *keytocard* + | ``Please select where to store the key:`` + | ``(2) Encryption key`` + | ``Your selection?`` *2* + +**Unlock admin level ``83``** + + | ``Please enter the Admin PIN`` + | + | ``Number: 2C97 1D49B409`` + | ``Holder:`` + | + | ``Use the reader's pinpad for input.`` + | ``OK`` + | ``Press any key to continue.`` + +**Unlock admin level ``83`` (maybe twice....)** + + | ``Please enter the Admin PIN`` + | + | ``Number: 2C97 1D49B409`` + | ``Holder:`` + | + | ``Use the reader's pinpad for input.`` + | ``OK`` + | ``Press any key to continue.`` + | + | ``sec rsa4096/9B93CB47F954FB53`` + | ``created: 2017-04-26 expires: never usage: SC`` + | ``trust: ultimate validity: ultimate`` + | ``ssb* rsa4096/49EE12B0F5CBDF26`` + | ``created: 2017-04-26 expires: never usage: E`` + | ``[ultimate] (1). RSA 4096`` + | + | ``gpg>`` *save* + | ``gpg>`` *quit* + +**check** + + | ``$ gpg --edit-key "RSA 4096"`` + | ``gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.`` + | ``This is free software: you are free to change and redistribute it.`` + | ``There is NO WARRANTY, to the extent permitted by law.`` + | + | ``Secret key is available.`` + | + | ``sec rsa4096/9B93CB47F954FB53`` + | ``created: 2017-04-26 expires: never usage: SC`` + | ``trust: ultimate validity: ultimate`` + | ``ssb rsa4096/49EE12B0F5CBDF26`` + | ``created: 2017-04-26 expires: never usage: E`` + | ``card-no: 2C97 7BB895B9`` + | ``[ultimate] (1). RSA 4096`` + +The encryption key is now associated with a card. + +Decrypting and Signing +~~~~~~~~~~~~~~~~~~~~~~ + +Decrypting and Signing will act exactly the same way as if keys were not on the card. +The only difference is ``gpg`` will request the PIN code instead of the passphrase. + + +SSH +--- + +Overview +~~~~~~~~ + +In order to use gpg for SSH authentication, an "authentication" is needed. +There are two solutions for that, either generate one on the device +or add an authentication sub-key to your existing master gpg key. + +Once done, it is necessary to configure ssh to point to the right key and +delegate the authentication to *gpg-ssh-agent* instead of *ssh-agent*. + +Generate new key on device +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The important thing to keep in mind here is there is no way to tell gpg to +only generate the authentication key. So generating this key will also +generate the two other under a new identity and will erase existing keys +on the current slot on the device. + +Nevertheless, if you want to use a different identity for ssh login, you can use +another slot on the device. See `OpenPGP Card application explained` +and `Generate new key pair`. + +Add sub-key +~~~~~~~~~~~ + +**Edit pgp key set** + + | ``$ gpg --expert --edit-key "john.doe@foo.com"`` + | ``gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.`` + | ``This is free software: you are free to change and redistribute it.`` + | ``There is NO WARRANTY, to the extent permitted by law.`` + | + | ``Secret key is available.`` + | + | ``sec rsa2048/831415DA94A9A15C`` + | ``created: 2017-08-25 expires: never usage: SC`` + | ``trust: ultimate validity: ultimate`` + | ``ssb rsa2048/8E95F2999EEC38C4`` + | ``created: 2017-08-25 expires: never usage: E`` + | ``[ultimate] (1). John Doe `` + +**Add sub key** + + | ``gpg>`` *addkey* + | + | ``Please select what kind of key you want:`` + | ``(3) DSA (sign only)`` + | ``(4) RSA (sign only)`` + | ``(5) Elgamal (encrypt only)`` + | ``(6) RSA (encrypt only)`` + | ``(7) DSA (set your own capabilities)`` + | ``(8) RSA (set your own capabilities)`` + | ``(10) ECC (sign only)`` + | ``(11) ECC (set your own capabilities)`` + | ``(12) ECC (encrypt only)`` + | ``(13) Existing key`` + | ``(14) Existing key from card`` + | ``Your selection?`` *8* + +**Toggle sign/encrypt OFF, Toggle authentication ON** + + | ``Possible actions for a RSA key: Sign Encrypt Authenticate`` + | ``Current allowed actions: Sign Encrypt`` + | + | ``(S) Toggle the sign capability`` + | ``(E) Toggle the encrypt capability`` + | ``(A) Toggle the authenticate capability`` + | ``(Q) Finished`` + | + | ``Your selection?`` *S* + | + | ``Possible actions for a RSA key: Sign Encrypt Authenticate`` + | ``Current allowed actions: Encrypt`` + | + | ``(S) Toggle the sign capability`` + | ``(E) Toggle the encrypt capability`` + | ``(A) Toggle the authenticate capability`` + | ``(Q) Finished`` + | + | ``Your selection?`` *E* + | + | ``Possible actions for a RSA key: Sign Encrypt Authenticate`` + | ``Current allowed actions:`` + | + | ``(S) Toggle the sign capability`` + | ``(E) Toggle the encrypt capability`` + | ``(A) Toggle the authenticate capability`` + | ``(Q) Finished`` + | + | ``Your selection?`` *A* + | + | ``Possible actions for a RSA key: Sign Encrypt Authenticate`` + | ``Current allowed actions: Authenticate`` + | + | ``(S) Toggle the sign capability`` + | ``(E) Toggle the encrypt capability`` + | ``(A) Toggle the authenticate capability`` + | ``(Q) Finished`` + | + | ``Your selection?`` *Q* + +**Set key options** + + | ``RSA keys may be between 1024 and 4096 bits long.`` + | ``What keysize do you want? (2048)`` *2048* + | ``Requested keysize is 2048 bits`` + | ``Please specify how long the key should be valid.`` + | ``0 = key does not expire`` + | `` = key expires in n days`` + | ``w = key expires in n weeks`` + | ``m = key expires in n months`` + | ``y = key expires in n years`` + | ``Key is valid for? (0)`` *0* + | ``Key does not expire at all`` + | ``Is this correct? (y/N)`` *y* + | ``Really create? (y/N)`` *y* + | ``We need to generate a lot of random bytes. It is a good idea to perform`` + | ``some other action (type on the keyboard, move the mouse, utilize the`` + | ``disks) during the prime generation; this gives the random number`` + | ``generator a better chance to gain enough entropy.`` + | + | ``sec rsa2048/831415DA94A9A15C`` + | ``created: 2017-08-25 expires: never usage: SC`` + | ``trust: ultimate validity: ultimate`` + | ``ssb rsa2048/8E95F2999EEC38C4`` + | ``created: 2017-08-25 expires: never usage: E`` + | ``ssb rsa2048/C20B90E12F68F035`` + | ``created: 2017-08-28 expires: never usage: A`` + | ``[ultimate] (1). John Doe `` + +**Select the key and move it** + + | ``gpg> key`` *2* + | + | ``sec rsa2048/831415DA94A9A15C`` + | ``created: 2017-08-25 expires: never usage: SC`` + | ``trust: ultimate validity: ultimate`` + | ``ssb rsa2048/8E95F2999EEC38C4`` + | ``created: 2017-08-25 expires: never usage: E`` + | ``ssb* rsa2048/C20B90E12F68F035`` + | ``created: 2017-08-28 expires: never usage: A`` + | ``[ultimate] (1). John Doe `` + | + | ``gpg>`` *keytocard* + | ``Please select where to store the key:`` + | ``(3) Authentication key`` + | ``Your selection?`` *3* + | + | ``sec rsa2048/831415DA94A9A15C`` + | ``created: 2017-08-25 expires: never usage: SC`` + | ``trust: ultimate validity: ultimate`` + | ``ssb rsa2048/8E95F2999EEC38C4`` + | ``created: 2017-08-25 expires: never usage: E`` + | ``ssb* rsa2048/C20B90E12F68F035`` + | ``created: 2017-08-28 expires: never usage: A`` + | ``[ultimate] (1). John Doe `` + | + | ``gpg>`` *save* + +Configure SSH and GPG +~~~~~~~~~~~~~~~~~~~~~ + +First, tell ``gpg-agent`` to enable ``ssh-auth`` feature by adding the following line to your ``.gpg-agent.conf``: + + ``enable-ssh-support`` + +Starting with ``gpg`` is necessary to add some configuration options to make the *pinentry* +work properly. Add the following line to ``~/.bashrc`` file: + + | ``export SSH_AUTH_SOCK=`gpgconf --list-dirs agent-ssh-socket``` + | ``export GPG_TTY=`tty``` + | ``gpgconf --launch gpg-agent`` + +It may be also necessary to setup the loopback pinentry options. + +Add the following line to your ``~/.gnupg/gpg-agent.conf``: + + ``allow-loopback-pinentry`` + +And add the following line to your ``~/.gnupg/gpg.conf``: + + ``pinentry-mode loopback`` + +Then export your authentication public key. First execute the command: + | ``gpg -k --with-subkey-fingerprint --with-keygrip john.doe@foo.com``. + + | ``pub rsa2048 2017-08-25 [SC]`` + | ``7886147C4C2E5CE2A4B1546C831415DA94A9A15C`` + | ``Keygrip = DE2B63C13AB92EBD2D05C1021A9DAA2D40ECB564`` + | ``uid [ultimate] John Doe `` + | ``sub rsa2048 2017-08-25 [E]`` + | ``789E56872A0D9A5AC8AF9C2F8E95F2999EEC38C4`` + | ``Keygrip = 9D7C2EF8D84E3B31371A09DFD9A4B3EF72AB4ACE`` + | ``sub rsa2048 2017-08-28 [A]`` + | ``2D0E4FFFAA448AA2770C7F02C20B90E12F68F035`` + | ``Keygrip = 6D60CB58D9D66EE09804E7FE460E865A91F5E41A`` + +Add the ``keygrip`` of the authentication key, the one identified by ``[A]``, to ``.gnupg/sshcontrol`` file: + + | ``$ echo 6D60CB58D9D66EE09804E7FE460E865A91F5E41A > .gnupg/sshcontrol`` + +Export your authentication key, identifier by its fingerprint, in a SSH compliant format. + + | ``$ gpg --export-ssh-key 2D0E4FFFAA448AA2770C7F02C20B90E12F68F035`` + | ``ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCIARKh0IZTHld+I6oA8nwrgnCUQE8f`` + | ``7X3pmI4ZwryT52fKhpcsQJsd3krodXrM//LiK8+m2ZRMneJ9iGlqqE7SCyZkNBj1GUm9s`` + | ``rK3Q5eoR6nU0s+sq17b/FAtQWHBJTqqaOtyA33hFj5twUtWZ6rokX9cNZrD1ne8kRVHDe`` + | ``3uEBsaY5PR1Tuko/GwywLyZu0SwfEobl/RPjL7P8rUSc7DTHpQMw8fjJFb4BNvIHAlaVC`` + | ``5FwZwkuogygaJdN/44MayHFmOZmzx9CAgYgLpTzen35+CcyhlqCqi+HjNlnHL2DDWd4iR`` + | ``d3Y6pY8LjS3xQkECc3Bhedptp17D+H9AVJt openpgp:0x2F68F035`` + +Finally copy the above export (``ssh-rsa AAAAB...Jt openpgp:0x2F68F035``) into the +``~/.ssh/authorized_keys`` file on your remote server. + +Now, if everything is correctly setup and running, an ``ssh-add -l`` should show your key: + + | ``$ ssh-add -l`` + | ``2048 SHA256:sLCzsoi5GAG2kJkG6hSp8gTLPxSvo/zNtsks2kQ7vTU cardno:2C979421A9E1 (RSA)`` + | ``2048 SHA256:sLCzsoi5GAG2kJkG6hSp8gTLPxSvo/zNtsks2kQ7vTU (none) (RSA)`` + +And you should be able to ssh to your remote server with your gpg key! + + +Backup and Restore +------------------ + +Introduction +~~~~~~~~~~~~ + +The OpenPGP card specification does not provide any mechanism for backuping you key. +Thus if you generate your keys on device and loose it, you definitively loose you private key. + +In order to avoid such extreme panic situation, a backup/restore mechanism is provided. +At any time you can backup a snapshot of your device data, including your private keys. +All public data are retrieve in clear form. The private key are stored +encrypted with a key derived from your seed, i.e. from your 24 BIP words. + +The backup/restore tool is located in ``pytools`` directory. + +See `Tools` later in this document for the tools details and usage. + +Restore without backup +~~~~~~~~~~~~~~~~~~~~~~ + +If you have seeded key but do not have done a backup and still have your keyring, there is a +solution to restore at least the key and their related information: serial and fingerprints. +All other information such as name, url, ... shall be set manually with ``gpg --card-edit``. + +**Step 1: Retrieve information** + +Run the command ``gpg --edit-key john.doe@foo.com``. + + | ``$ gpg --edit-key john.doe@foo.com`` + | ``gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.`` + | ``This is free software: you are free to change and redistribute it.`` + | ``There is NO WARRANTY, to the extent permitted by law.`` + | + | ``Secret key is available.`` + | + | ``sec ed25519/8451AAF7D43D1095`` + | ``created: 2018-10-10 expires: never usage: SC`` + | ``card-no: 2C97 FD6C11BE`` + | ``trust: ultimate validity: ultimate`` + | ``ssb ed25519/C5A8FB078520ABBB`` + | ``created: 2018-10-10 expires: never usage: A`` + | ``card-no: 2C97 FD6C11BE`` + | ``ssb cv25519/0953D871FC4B9EA4`` + | ``created: 2018-10-10 expires: never usage: E`` + | ``card-no: 2C97 FD6C11BE`` + | ``[ultimate] (1). John Doe `` + +The *usage* field tells you each key purpose: + +- **S** for signature, +- **C** for Certification (subkey signature), +- **A** for authentication, +- **E** for encryption. + +The *card-no* field provides you with the serial number of the card on which the key are stored. +You should have 3 or less keys with the same serial. These are the keys we want to restore. + +For each key you also have the key template (*rsa2048*, *rsa3072*, *rsa4096*, *ed2559*, *cv25519*) followed by the +short fingerprint, e.g. ``ed25519/8451AAF7D43D1095`` + +Please note the serial and the 3 key template names: ``FD6C11BE`` , ``ed25519:cv25519:ed25519``. +Take care of the order: ``SC:E:A``. + +To get the full fingerprint of each key, run (yes twice ``--fingerprint``): + + | ``$ gpg --fingerprint --fingerprint John`` + | ``pub ed25519 2018-10-10 [SC]`` + | ``2C68 8345 BDDA 0EDF B24D B4FB 8451 AAF7 D43D 1095`` + | ``uid [ultimate] John Doe `` + | ``sub ed25519 2018-10-10 [A]`` + | ``CEC5 9AE6 A766 14BC 3C6D 37D9 C5A8 FB07 8520 ABBB`` + | ``sub cv25519 2018-10-10 [E]`` + | ``DF15 7BD4 AC3B D1EE 9910 99C8 0953 D871 FC4B 9EA4`` + +Assemble the 3 full fingerprint, corresponding to the one identified previously, +in the the following order ``SC:E:A``: + +``2C688345BDDA0EDFB24DB4FB8451AAF7D43D1095:DF157BD4AC3BD1EE991099C80953D871FC4B9EA4: +CEC59AE6A76614BC3C6D37D9C5A8FB078520ABBB``. + +Note: If you only have one single key to restore you can omit the others. +For example, to only restore the authentication key: ``::CEC59AE6A76614BC3C6D37D9C5A8FB078520ABBB`` + +**Step 2: Restore** + +Plug your device and run the OpenPGP application. + +Finally run the following command: + + | ``python3 -m gpgcard.gpgcli --pinpad --set-template ed255519:cv25519:ed255519 --set-fingerprints`` + | ``'2C688345BDDA0EDFB24DB4FB8451AAF7D43D1095:DF157BD4AC3BD1EE991099C80953D871FC4B9EA4:CEC59AE6A76614BC3C6D37D9C5A8FB078520ABBB'`` + | ``--set-serial 'FD6C11BE' --seed-key`` + +Restore lost Keyring +~~~~~~~~~~~~~~~~~~~~ + +In case the local keyring files are lost, follow the recovery process hereafter. +Usually under ``~/.gnupg/``, the keyring files contain the Public keys and associated metadata. + +**Step 1: Retrieve key metadata** + +Check that your device is connected and recognised, and print out the *keygrips* and *creation timestamps* of your keys: + + | ``$ gpg --card-status --with-keygrip`` + | + | ``Reader ...........: Ledger Nano S Plus [Nano S Plus] (0001) 00 00`` + | ``Application ID ...: D2760001240103032C97E1A67CBF0000`` + | ``Application type .: OpenPGP`` + | ``Version ..........: 3.3`` + | ``Manufacturer .....: unknown`` + | ``Serial number ....: E1A67CBF`` + | ``Name of cardholder: [not set]`` + | ``Language prefs ...: [not set]`` + | ``Salutation .......: `` + | ``URL of public key : [not set]`` + | ``Login data .......: [not set]`` + | ``Signature PIN ....: not forced`` + | ``Key attributes ...: rsa2048 rsa2048 rsa2048`` + | ``Max. PIN lengths .: 12 12 12`` + | ``PIN retry counter : 3 0 3`` + | ``Signature counter : 4`` + | ``Signature key ....: FE93 6FEC 13BE BDAA A0C6 3E72 05DC 472D A6F6 A13B`` + | ``created ....: 2024-01-18 10:08:41`` + | ``keygrip ....: 348411953EBC6DE6416D40A7048F5C5795A956A2`` + | ``Encryption key....: CD29 B086 FE23 3DAD 3D51 B713 7E6F 425E 7A90 EE9E`` + | ``created ....: 2024-01-18 10:08:41`` + | ``keygrip ....: 1066E2EC6FB7F21738C010D62676CA64FDD5001F`` + | ``Authentication key: 218F 67FB 8577 1DF1 60C1 CFE0 4A6F EB8C 0F76 76FD`` + | ``created ....: 2024-01-18 10:08:41`` + | ``keygrip ....: 73921B6FC73851E61AE9A0196003BE9516B916A0`` + | ``General key info..: `` + +**Step 2: Import the Master key** + +First, import your master **Signature key** from the device. + +Because GPG key IDs are based in part on their creation time, +we need to set a fake system time to match the *created* time for the Signature key shown above. + +Convert the creation date format like so by removing punctuation, adding a “T†between the date and time, +and adding an exclamation mark to the end: + + | ``2024-01-18 10:08:41`` becomes ``20240118T100841!`` + +Add that to your GPG arguments like so to start importing the key. +When the menu pops up, pick the *Existing key from card* option. +Then, pick the key which has the **cert,sign** right enabled **(1)**, +and follow through the prompts to create your user ID. + + | ``$ gpg --faked-system-time "20240118T100841!" --full-generate-key`` + | ``gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.`` + | ``This is free software: you are free to change and redistribute it.`` + | ``There is NO WARRANTY, to the extent permitted by law.`` + | + | ``gpg: WARNING: running with faked system time: 2024-01-18 10:08:41`` + | ``Please select what kind of key you want:`` + | ``(1) RSA and RSA (default)`` + | ``(2) DSA and Elgamal`` + | ``(3) DSA (sign only)`` + | ``(4) RSA (sign only)`` + | ``(14) Existing key from card`` + | ``Your selection?`` *14* + | ``Serial number of the card: D2760001240103032C97E1A67CBF0000`` + | ``Available keys:`` + | ``(1) 348411953EBC6DE6416D40A7048F5C5795A956A2 OPENPGP.1 rsa2048 (cert,sign)`` + | ``(2) 1066E2EC6FB7F21738C010D62676CA64FDD5001F OPENPGP.2 rsa2048 (encr)`` + | ``(3) 73921B6FC73851E61AE9A0196003BE9516B916A0 OPENPGP.3 rsa2048 (sign,auth)`` + | ``Your selection?`` *1* + | ``Please specify how long the key should be valid.`` + | ``0 = key does not expire`` + | `` = key expires in n days`` + | ``w = key expires in n weeks`` + | ``m = key expires in n months`` + | ``y = key expires in n years`` + | ``Key is valid for? (0)`` + | ``Key does not expire at all`` + | ``Is this correct? (y/N)`` *y* + | + | ``GnuPG needs to construct a user ID to identify your key.`` + | + | ``Real name:`` *testkey* + | ``Email address:`` + | ``Comment:`` + | ``You selected this USER-ID:`` + | ``"testkey"`` + | + | ``Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?`` O + | ``gpg: xxxx/manual-tests/gnupg/trustdb.gpg: trustdb created`` + | ``gpg: key 05DC472DA6F6A13B marked as ultimately trusted`` + | ``gpg: directory 'xxxx/manual-tests/gnupg/openpgp-revocs.d' created`` + | ``gpg: revocation certificate stored as 'xxxx/manual-tests/gnupg/openpgp-revocs.d/FE936FEC13BEBDAAA0C63E7205DC472DA6F6A13B.rev'`` + | ``public and secret key created and signed.`` + | + | ``Note that this key cannot be used for encryption. You may want to use`` + | ``the command "--edit-key" to generate a subkey for this purpose.`` + | ``pub rsa2048 2024-01-18 [SC]`` + | ``FE936FEC13BEBDAAA0C63E7205DC472DA6F6A13B`` + | ``uid testkey`` + + +**Step 3: Import the Encryption subkey** + +Next, add the **encr** key as subkey of this master key. + +Use the ID of the master key that was printed in that final **pub rsa2048** block to start editing it, +along with the creation dates from ``card-status``. + +Note: Please ensure the creation date is the same, or update the command line accordingly! + + | ``$ gpg --faked-system-time "20240118T100841!" --edit-key FE936FEC13BEBDAAA0C63E7205DC472DA6F6A13B`` + | ``gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.`` + | ``This is free software: you are free to change and redistribute it.`` + | ``There is NO WARRANTY, to the extent permitted by law.`` + | + | ``gpg: WARNING: running with faked system time: 2024-01-18 10:08:41`` + | ``Secret key is available.`` + | + | ``gpg: checking the trustdb`` + | ``gpg: marginals needed: 3 completes needed: 1 trust model: pgp`` + | ``gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u`` + | ``sec rsa2048/05DC472DA6F6A13B`` + | ``created: 2024-01-18 expires: never usage: SC`` + | ``card-no: 2C97 E1A67CBF`` + | ``trust: ultimate validity: ultimate`` + | ``[ultimate] (1). testkey`` + | + | ``gpg>`` *addkey* + | ``Secret parts of primary key are stored on-card.`` + | ``Please select what kind of key you want:`` + | ``(3) DSA (sign only)`` + | ``(4) RSA (sign only)`` + | ``(5) Elgamal (encrypt only)`` + | ``(6) RSA (encrypt only)`` + | ``(14) Existing key from card`` + | ``Your selection?`` *14* + | ``Serial number of the card: D2760001240103032C97E1A67CBF0000`` + | ``Available keys:`` + | ``(1) 348411953EBC6DE6416D40A7048F5C5795A956A2 OPENPGP.1 rsa2048 (cert,sign)`` + | ``(2) 1066E2EC6FB7F21738C010D62676CA64FDD5001F OPENPGP.2 rsa2048 (encr)`` + | ``(3) 73921B6FC73851E61AE9A0196003BE9516B916A0 OPENPGP.3 rsa2048 (sign,auth)`` + | ``Your selection?`` *2* + | ``Please specify how long the key should be valid.`` + | ``0 = key does not expire`` + | `` = key expires in n days`` + | ``w = key expires in n weeks`` + | ``m = key expires in n months`` + | ``y = key expires in n years`` + | ``Key is valid for? (0)`` + | ``Key does not expire at all`` + | ``Is this correct? (y/N)`` *y* + | ``Really create? (y/N)`` *y* + | + | ``sec rsa2048/05DC472DA6F6A13B`` + | ``created: 2024-01-18 expires: never usage: SC`` + | ``card-no: 2C97 E1A67CBF`` + | ``trust: ultimate validity: ultimate`` + | ``ssb rsa2048/7E6F425E7A90EE9E`` + | ``created: 2024-01-18 expires: never usage: E`` + | ``card-no: 2C97 E1A67CBF`` + | ``[ultimate] (1). testkey`` + +**Step 4: Import the Authentication subkey** + +Finally, add the **sign,auth** key as subkey of this master key. + +Use the ID of the master key that was printed in that final **pub rsa2048** block to start editing it, +along with the creation dates from ``card-status``. + +Note: Please ensure the creation date is the same, or update the command line accordingly! + + | ``gpg>`` *addkey* + | ``Secret parts of primary key are stored on-card.`` + | ``Please select what kind of key you want:`` + | ``(3) DSA (sign only)`` + | ``(4) RSA (sign only)`` + | ``(5) Elgamal (encrypt only)`` + | ``(6) RSA (encrypt only)`` + | ``(14) Existing key from card`` + | ``Your selection?`` *14* + | ``Serial number of the card: D2760001240103032C97E1A67CBF0000`` + | ``Available keys:`` + | ``(1) 348411953EBC6DE6416D40A7048F5C5795A956A2 OPENPGP.1 rsa2048 (cert,sign)`` + | ``(2) 1066E2EC6FB7F21738C010D62676CA64FDD5001F OPENPGP.2 rsa2048 (encr)`` + | ``(3) 73921B6FC73851E61AE9A0196003BE9516B916A0 OPENPGP.3 rsa2048 (sign,auth)`` + | ``Your selection?`` *3* + | ``Please specify how long the key should be valid.`` + | ``0 = key does not expire`` + | `` = key expires in n days`` + | ``w = key expires in n weeks`` + | ``m = key expires in n months`` + | ``y = key expires in n years`` + | ``Key is valid for? (0)`` + | ``Key does not expire at all`` + | ``Is this correct? (y/N)`` *y* + | ``Really create? (y/N)`` *y* + | + | ``sec rsa2048/05DC472DA6F6A13B`` + | ``created: 2024-01-18 expires: never usage: SC`` + | ``card-no: 2C97 E1A67CBF`` + | ``trust: ultimate validity: ultimate`` + | ``ssb rsa2048/7E6F425E7A90EE9E`` + | ``created: 2024-01-18 expires: never usage: E`` + | ``card-no: 2C97 E1A67CBF`` + | ``ssb rsa2048/4A6FEB8C0F7676FD`` + | ``created: 2024-01-18 expires: never usage: SA`` + | ``card-no: 2C97 E1A67CBF`` + | ``[ultimate] (1). testkey`` + | + | ``gpg>`` *save* + | ``gpg>`` *quit* + +Now you should be able to see your imported key by running this command: + + | ``$ gpg --list-secret-keys --with-keygrip`` + | ``xxxx/manual-tests/gnupg/pubring.kbx`` + | ``-------------------------------------------------------------------`` + | ``sec> rsa2048 2024-01-18 [SC]`` + | ``FE936FEC13BEBDAAA0C63E7205DC472DA6F6A13B`` + | ``Keygrip = 348411953EBC6DE6416D40A7048F5C5795A956A2`` + | ``Card serial no. = 2C97 E1A67CBF`` + | ``uid [ultimate] testkey`` + | ``ssb> rsa2048 2024-01-18 [E]`` + | ``Keygrip = 1066E2EC6FB7F21738C010D62676CA64FDD5001F`` + | ``ssb> rsa2048 2024-01-18 [SA]`` + | ``Keygrip = 73921B6FC73851E61AE9A0196003BE9516B916A0`` + + + +Tools +===== + +There are 2 tools provided: + +- ``backup.py``: Backup and Restore of the configuration +- ``gpgcli.py``: General test tool + +If you encounter an error when performing the backup/restore, reload your scdaemon with +``gpgconf --reload scdaemon`` + +Backup tool +----------- + +The tool usage is the following: + + | ``$ ./backup.py --help`` + | ``usage: backup.py [-h] [--reader READER] [--slot {1,2,3}] [--pinpad] --adm-pin PIN --user-pin PIN [--restore] [--file FILE]`` + | + | ``Backup/Restore OpenPGP App configuration`` + | + | ``options:`` + | ``-h, --help show this help message and exit`` + | ``--reader READER PCSC reader name (default is 'Ledger')`` + | ``--slot {1,2,3} Select slot (1 to 3)`` + | ``--pinpad PIN validation will be delegated to pinpad`` + | ``--adm-pin PIN Admin PIN (if pinpad not used)`` + | ``--user-pin PIN User PIN (if pinpad not used)`` + | ``--restore Perform a Restore instead of Backup`` + | ``--file FILE Backup/Restore file (default is 'gpg_backup')`` + | + | ``Keys restore is only possible with SEED mode...`` + +To perform a backup, simply use the tool like this: + + | ``$ ./backup.py --adm-pin 12345678 --user-pin 123456`` + | ``Connect to card 'Ledger'...`` + | ``Configuration saved in file 'gpg_backup'.`` + + +Test command line tool +---------------------- + +A test tool is provided under the directory ``pytools``. +There may be some dependencies package to install. Thus, don't forget to use the command: + + | ``pip install -r requirements.txt`` + +This tool allows to execute lots of test with the device, like key generation, metadata modification, +or simply get the information on the configuration and keys. + +Its usage is: + + | ``$ ./gpgcli.py --help`` + | ``usage: gpgcli.py [-h] [--info] [--reader READER] [--apdu] [--slot {1,2,3}] [--reset] [--pinpad] --adm-pin PIN --user-pin PIN [--new-user-pin PIN] [--new-adm-pin PIN] [--reset-code RESET_CODE | --reset-pw1 RESET_PW1] [--serial SERIAL]`` + | ``[--salutation {Male,Female}] [--name NAME] [--url URL] [--login LOGIN] [--lang LANG] [--key-type {SIG,DEC,AUT}] [--key-action {Export,Generate,Read}] [--set-fingerprints SIG:DEC:AUT] [--set-templates SIG:DEC:AUT] [--seed-key]`` + | ``[--file FILE]`` + | + | ``Manage OpenPGP App on Ledger device`` + | + | ``options:`` + | ``-h, --help show this help message and exit`` + | ``--info Get and display card information`` + | ``--reader READER PCSC reader name (default is 'Ledger')`` + | ``--apdu Log APDU exchange`` + | ``--slot {1,2,3} Select slot (1 to 3)`` + | ``--reset Reset the application (all data will be erased)`` + | ``--pinpad PIN validation will be delegated to pinpad`` + | ``--adm-pin PIN Admin PIN (if pinpad not used)`` + | ``--user-pin PIN User PIN (if pinpad not used)`` + | ``--new-user-pin PIN Change User PIN`` + | ``--new-adm-pin PIN Change Admin PIN`` + | ``--reset-code RESET_CODE`` + | ``Update 'PW1 Resetting Code'`` + | ``--reset-pw1 RESET_PW1`` + | ``Reset the User PIN`` + | ``--serial SERIAL Update the 'serial' data (4 bytes)`` + | ``--salutation {Male,Female}`` + | ``Update 'salutation' data`` + | ``--name NAME Update 'name' data`` + | ``--url URL Update 'url' data`` + | ``--login LOGIN Update 'login' data`` + | ``--lang LANG Update 'lang' data`` + | ``--key-type {SIG,DEC,AUT}`` + | ``Select key type SIG:DEC:AUT (default is all)`` + | ``--key-action {Export,Generate,Read}`` + | ``Generate key pair or Read public key`` + | ``--set-fingerprints SIG:DEC:AUT`` + | ``Set fingerprints for selected 'key-type'`` + | ``If 'key-type' is not specified, set for all keys (SIG:DEC:AUT)`` + | ``Each fingerprint is 20 hex bytes long`` + | ``--set-templates SIG:DEC:AUT`` + | ``Set template identifier for selected 'key-type'`` + | ``If 'key-type' is not specified, set for all keys (SIG:DEC:AUT)`` + | ``Valid values are rsa2048, rsa3072, rsa4096, nistp256, ed25519, cv25519`` + | ``--seed-key Regenerate all keys, based on seed mode`` + | ``--file FILE Public Key export file (default is 'pubkey')`` + +Sample output to get Card information: + + | ``$ ./gpgcli.py --adm-pin 12345678 --user-pin 123456 --info`` + | ``Connect to card 'Ledger'...`` + | ``Verify PINs...`` + | ``Get card info...`` + | ``=============== Application Identifier ===============`` + | ``# AID : D2760001240103032C97E1A67CBF0000`` + | ``- RID : D276000124`` + | ``- Application : 01`` + | ``- Version : 3.3`` + | ``- Manufacturer : 2C97`` + | ``- Serial : E1A67CBF`` + | ``=============== Historical Bytes ===============`` + | ``- historical bytes : 0031c573c001800790000000000000`` + | ``=============== Max Extended Length ===============`` + | ``- Command : 254`` + | ``- Response : 254`` + | ``=============== PIN Info ===============`` + | ``- PW1 : UTF-8 (12 bytes), Error Counter=3, Validity=Several PSO:CDS`` + | ``- Reset Counter : UTF-8 (12 bytes), Error Counter=0`` + | ``- PW3 : UTF-8 (12 bytes), Error Counter=3`` + | ``=============== Extended Capabilities ===============`` + | ``- Secure Messaging : ✗`` + | ``- Get Challenge : ✓ (Max length: 254)`` + | ``- Key import : ✓`` + | ``- PW status : Changeable`` + | ``- Private DOs : ✓`` + | ``- Algo attributes : Changeable`` + | ``- PSO:DEC AES : ✓`` + | ``- Key Derived Format : ✗`` + | ``- Max Cert len : 2560`` + | ``- Max Special DO : 512`` + | ``- PIN 2 format : ✗`` + | ``- MSE : ✓`` + | ``=============== Hardware Features ===============`` + | ``- Display : ✗`` + | ``- Biometric sensor : ✗`` + | ``- Button/Keypad : ✓`` + | ``- LED : ✗`` + | ``- Loudspeaker : ✗`` + | ``- Microphone : ✗`` + | ``- Touchscreen : ✗`` + | ``- Battery : ✗`` + | ``=============== User Info ===============`` + | ``- Name : `` + | ``- Login : `` + | ``- URL : `` + | ``- Salutation : `` + | ``- Lang : `` + | ``=============== Slots Info ===============`` + | ``- Number of Slots : 3`` + | ``- Default Slot : 1`` + | ``- Selection by APDU : ✓`` + | ``- Selection by screen : ✓`` + | ``- Current : 1`` + | ``=============== Keys Info ===============`` + | ``- CDS counter : 8`` + | ``- RSA Pub Exponent : 0x010001`` + | ``SIG:`` + | ``- UIF : ✗`` + | ``- Fingerprint : fe936fec13bebdaaa0c63e7205dc472da6f6a13b`` + | ``- CA fingerprint : N/A`` + | ``- Creation date : 2024-01-18 10:08:41`` + | ``- Attribute : RSA-2048, Format: standard with modulus (n), Exponent size: 32`` + | ``- Certificate : `` + | ``- Key:`` + | ``* OS Target ID : 0x33100004`` + | ``* API Level : 12`` + | ``* Public exp size : 4`` + | ``* Public exp : 0x010001`` + | ``* Private key size: 1040`` + | ``DEC:`` + | ``- UIF : ✗`` + | ``- Fingerprint : cd29b086fe233dad3d51b7137e6f425e7a90ee9e`` + | ``- CA fingerprint : N/A`` + | ``- Creation date : 2024-01-18 10:08:41`` + | ``- Attribute : RSA-2048, Format: standard with modulus (n), Exponent size: 32`` + | ``- Certificate : `` + | ``- Key:`` + | ``* OS Target ID : 0x33100004`` + | ``* API Level : 12`` + | ``* Public exp size : 4`` + | ``* Public exp : 0x010001`` + | ``* Private key size: 1040`` + | ``AUT:`` + | ``- UIF : ✗`` + | ``- Fingerprint : 218f67fb85771df160c1cfe04a6feb8c0f7676fd`` + | ``- CA fingerprint : N/A`` + | ``- Creation date : 2024-01-18 10:08:41`` + | ``- Attribute : RSA-2048, Format: standard with modulus (n), Exponent size: 32`` + | ``- Certificate : `` + | ``- Key:`` + | ``* OS Target ID : 0x33100004`` + | ``* API Level : 12`` + | ``* Public exp size : 4`` + | ``* Public exp : 0x010001`` + | ``* Private key size: 1040`` + + +Annexes +======= + +Trouble/FAQ +----------- + +**Q:** It may happens the reader is no more visible with ``gpg`` tool, whereas it can be seen by ``pytools``. + +**R:** In such case (which seems to be linked to the PC configuration), one solution is to re-install the tool packages and libraries: + + | ``sudo apt remove --purge libpcsclite-dev scdaemon pcscd opensc pcsc-tool`` + | ``sudo apt autoremove`` + | ``sudo apt install libpcsclite-dev scdaemon pcscd opensc pcsc-tool`` + +**Q:** gpg-connection agent failed + +**R:** Check that you don't have multiple running agents. After setting-up all SSH stuff, try to fully logout/login + + | + +**Q:** It does not work at all, HELP ME!!! + +**R** Please keep calm and do not cry. +Add the following option to ``~/.gnupg/gpg-agent.conf`` + + | ``debug-level guru`` + | ``log-file /tmp/gpgagent.log`` + +Add the following option to ``~/.gnupg/scdaemon.conf`` + + | ``log-file /tmp/scd.log`` + | ``debug-level guru`` + | ``debug-all`` + +Make a nice issue report under github providing log and and command line you run. + +**WARNING**: This may reveal confidential information such as key values. Do your log with a test key. + + | + +**Q:** I'm having issue when using SSH, there is no pinpad prompt. +(``sign_and_send_pubkey: signing failed: agent refused operation``) + +**R:** You might need to add this command to your ``.bashrc`` or ``.zshrc``: + + | ``gpg-connect-agent updatestartuptty /bye >/dev/null`` + + + | + +**Q:** My mac is not able to see my ``Ledger Token`` + +**R:** For some reason, SC communication on Mac takes some times or mess it up sometimes. + +To troubleshot those issues, you can try to reload the ``scdaemon`` using this command: + + | ``gpgconf --reload scdaemon`` + | ``gpgconf --reload gpg-agent`` + +If not successful, you can try to trigger daemons to restart by sending a **SIGTERM** like so: + + | ``kill -TERM $(pgrep gpg-agent) $(pgrep scdaemon)``. + +Changing USB port might also help sometimes. Do not hesitate. + + | + +**Q:** My mac is **STILL** not able to see my ``Ledger Token`` + +**R:** This might be related to your CCID drivers. +You can manually install a more recent version from this +https://ccid.apdu.fr/files/ and install it this way: + + | ``CCID_VERSION=1.5.4`` + | ``wget https://ccid.apdu.fr/files/ccid-${CCID_VERSION}.tar.bz2`` + | ``tar xzvf ccid-${CCID_VERSION}.tar.bz2`` + | ``cd ccid-${CCID_VERSION}`` + | ``./MacOSX/configure`` + | ``make`` + | ``make install`` + +Installing the driver depends on ``libusb`` which can be installed using the following +``brew install libusb``. It also requires static linking against it, if you use +dynamic linking you will have the following output when using the ``./MacOSX/configure`` step: + + | ``/usr/local/Cellar/libusb/1.0.23/lib/libusb-1.0.0.dylib`` + | ``/usr/local/Cellar/libusb/1.0.23/lib/libusb-1.0.dylib`` + | ``*****************************`` + | ``Dynamic library libusb found in /usr/local/Cellar/libusb/1.0.23/lib`` + | ``*****************************`` + | ``Rename it to force a static link`` + +You can use the following: + + | ``LIBUSB_VERSION=1.0.23`` + | + | ``for f in /usr/local/Cellar/libusb/${LIBUSB_VERSION}/lib/*.dylib; do`` + | ``mv $f $f.fake`` + | ``done`` + | + | ``./MacOSX/configure`` + | + | ``for f in /usr/local/Cellar/libusb/${LIBUSB_VERSION}/lib/*.dylib.fake; do`` + | ``ORIG="$( echo $f | sed 's#.fake##g' )"`` + | ``mv $f ${ORIG}`` + | ``done`` + + +References +---------- + +.. [GPG] *The GNU Privacy Guard*, https://gnupg.org/ +.. [GPGSC] *The GnuPG Smartcard HOWTO*, https://gnupg.org/howtos/card-howto/en/smartcard-howto.html +.. [G10CODE] *The OpenPGP card application*, https://g10code.com/p-card.html +.. [GPGADD] *The OpenPGP card application add-on*, https://github.com/LedgerHQ/app-openpgp/blob/master/doc/developer/gpgcard-addon.rst diff --git a/doc/user/blue-app-openpgp-card.rst b/doc/user/blue-app-openpgp-card.rst deleted file mode 100644 index b1ceb0b..0000000 --- a/doc/user/blue-app-openpgp-card.rst +++ /dev/null @@ -1,1447 +0,0 @@ -.. - Copyright 2018 Cedric Mesnil , Ledger SAS - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -.. - ------------------------------------------------------------------------ - LaTex substitution Definition - ------------------------------------------------------------------------ - - - -License -======= - -Author: Cedric Mesnil - -License: - - | Copyright 2017 Cedric Mesnil , Ledger SAS - | - | Licensed under the Apache License, Version 2.0 (the "License"); - | you may not use this file except in compliance with the License. - | You may obtain a copy of the License at - | - | http://www.apache.org/licenses/LICENSE-2.0 - | - | Unless required by applicable law or agreed to in writing, software - | distributed under the License is distributed on an "AS IS" BASIS, - | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - | See the License for the specific language governing permissions and - | limitations under the License. - - - - -Introduction -============ - -GnuPG application for Ledger Blue and Nano S - -This application implements "The OpenPGP card" specification revision 3.1. This specification is available in doc directory and at https://g10code.com/p-card.html . - -The application supports: - - - RSA with key up to 4096 bits - - ECDSA with secp256k1, secp256r1, brainpool 256r1 and brainpool 256t1 curves - - EDDSA with Ed25519 curve - - ECDH with secp256k1, secp256r1, brainpool 256r1, brainpool 256t1 and - curve25519 curves - -This release has known missing parts (see also [GPGADD]) : - - - Ledger Blue support - - Seed mode ON/OFF via apdu - - - -How to install GPG Application -============================== - -Nano S / Blue -------------- - -For both, source and binary installation, use the most recent tag. - -From Binary -~~~~~~~~~~~~~ - -Use the "Ledger Manager" Chrome App. See https://www.ledgerwallet.com/apps/manager for details. - -As the "OpenPGP card" application is not fully compliant with UI and documentation guidelines, the application is in developer section: click on "Show developers items" on the bottom right corner to see it. - - - Launch the Ledger Manager. See `Ledger Manager `_ - and ` `_ - for details about installing and using the manager; - - Connect your Nano S or your Blue, enter your PIN, and stay on the - dashboard; - - Click on *show developer items* on the bottom right corner; - - Click on the green bottom arrow icon near the Ledger *Open PGP* logo; - - Confirm the installation when required on your device by pressing the - right button above the check mark; - - Quit the Ledger Manager - - -The application is ready to use! - - -From source -~~~~~~~~~~~~~ - -Building from sources requires the the Nano S SDK 1.4.2.1 on firmware 1.4.2. See https://github.com/LedgerHQ/nanos-secure-sdk - -Refer to the SDK documentation for the compiling/loading... - -System Configuration --------------------- - -You need to install CCID. -For Linux and MAC, the Ledger NanoS CCID interface is not supported -by default by pcscd and must be manually added for CCID versions earlier than 1.4.28. -The support of the NanoX is expected to be released as part of the upcoming version 1.4.32. - -For Windows.... - -Linux -~~~~~ - -If you are using an old version of CCID, you have to have to add the NanoS to /etc/libccid_Info.plist - - - In ifdVendorID add the entry 0x2C97 - - In ifdProductID add the entry 0x0001 - - In ifdFriendlyName add the entry Ledger Token - -These 3 entries must be added at the end of each list. - -For the NanoX : - - - In ifdVendorID add the entry 0x2C97 - - In ifdProductID add the entry 0x0004 - - In ifdFriendlyName add the entry Ledger Token - -MAC -~~~ - -1. First it is necessary to [disable SIP](https://developer.apple.com/library/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html) That doesn't allow the editing of files in /usr/. - -2. You have to add the Nano S to /usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist - - - - In ifdVendorID add the entry 0x2C97 - - In ifdProductID add the entry 0x0001 - - In ifdFriendlyName add the entry Ledger Token - -This 3 entries must be added at the end of each list. - -3. [Enable SIP](https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html) - -Windows -~~~~~~~ - -TODO - - - -Nano S OpenPGP Card application explained -========================================= - -Menu Overview -------------- - -The full menu layout is : - - -| \ *Device Info* -| Select Slot -| \ *Choose:* -| Slot 1 #+ -| Slot 2 -| Slot 3 -| Set Default -| Settings -| Key Template -| Choose Key... -| Signature -| Decryption -| Authentication -| Choose Type... -| RSA 2048 -| RSA 3072 -| RSA 4096 -| NIST P256 -| ED25519 -| Set Template -| Seed mode -| \ ** -| Set on -| Set off -| PIN mode -| UIF mode -| \ *Choose:* -| Host -| On Screen -| Confirm only #+ -| Trust -| Reset -| About -| \ *OpenPGP Card* -| \ *(c) Ledger SAS* -| \ *Spec 3.0* -| \ *App 1.0.1* - -| Emphasis entries are not selectable and just provide information. -| A "**#**" after the entry label means default value on reset. -| A "**+**" after the entry label means current value. - - - -Device Info -------------- - -The *Device Info* provides current user and slot information. The format is: - -| - -with: - - * **name** is the one provided to ``gpg --card-edit``. See [GPGSC]. - * **n** is the current slot, see below. - * **s** is the 32 bits card serial number. Note that the last three bits always -encode the current slot value. - - -Select Slot -------------- - -This menu is only available on ``XL`` version - -A Slot is a set of -three key pairs *Signature, Decryption, Authentication* as defined by gnupg -specification. - -Usually a GPG card application only manages a single set. Ledger version enhances -this and allows you to manage three key sets. - -The *Select Slot* menu allows you to select the slot you want to play with, and -to set the default slot when the application start. - -To change the current slot, display the slot you want and select it - -To change the default slot, first select it, and then select the *Set Default* -entry. - - -Settings --------- - -Key Template -~~~~~~~~~~~~ - -A key template is defined by the OpenGPG card application specification. It -describes the key to be generated with the ``generate`` command in -``gpg --card-edit`` - -To set up a new ECC template you have three choices: the ``gpg --edit-card`` -interactive setup, the ``gpg-connect-agent`` tool and the NanoS menu. - - -**gpg --card-edit** (recommended) - -This method suppose you have a recent GnuPG tool and that you correctly configured it. -See the dedicated section for that. - -In a terminal launch : - - | ``$ gpg --card-edit`` - | ``gpg/card> admin`` - | ``Admin commands are allowed`` - | ```` - | ``gpg/card> key-attr`` - | ``Changing card key attribute for: Signature key`` - | ``Please select what kind of key you want:`` - | ``(1) RSA`` - | ``(2) ECC`` - | ``Your selection? 2`` - | ``Please select which elliptic curve you want:`` - | ``(1) Curve 25519`` - | ``(4) NIST P-384`` - | ``Your selection? 1`` - | ``The card will now be re-configured to generate a key of type: ed25519`` - | ``Note: There is no guarantee that the card supports the requested size.`` - | ``If the key generation does not succeed, please check the`` - | ``documentation of your card to see what sizes are allowed.`` - | ``Changing card key attribute for: Encryption key`` - | ``Please select what kind of key you want:`` - | ``(1) RSA`` - | ``(2) ECC`` - | ``Your selection? 2`` - | ``Please select which elliptic curve you want:`` - | ``(1) Curve 25519`` - | ``(4) NIST P-384`` - | ``Your selection? 1`` - | ``The card will now be re-configured to generate a key of type: cv25519`` - | ``Changing card key attribute for: Authentication key`` - | ``Please select what kind of key you want:`` - | ``(1) RSA`` - | ``(2) ECC`` - | ``Your selection? 2`` - | ``Please select which elliptic curve you want:`` - | ``(1) Curve 25519`` - | ``(4) NIST P-384`` - | ``Your selection? 1`` - | ``The card will now be re-configured to generate a key of type: ed25519`` - -To show the current template use the ``gpg --card-status`` command. - -**gpg-connect-agent** - -This method suppose you have correctly configured your GnuPG tool. -See the dedicated section for that. - -In a terminal launch : - - | ``gpg-connect-agent "SCD SETATTR KEY-ATTR --force 1 " /bye`` - | ``gpg-connect-agent "SCD SETATTR KEY-ATTR --force 2 18 " /bye`` - | ``gpg-connect-agent "SCD SETATTR KEY-ATTR --force 3 " /bye`` - -This 3 commands fix, in that order, the template for Signature, Decryption, Authentication keys. - -Supported curve name are: - -- secp256k1 with tag 19 -- nistp256 with tag 19 -- cv25519 (only for key 2) -- ed25519 with tag 22 (only for key 1 and 3) - - -To show the current template use the ``gpg --card-status`` command. - -**NanoS menu** - -First under *Choose Key* menu, select the one of three keys for which you want to modify -the template. Then under "Choose Type", select the desired key template. -Finally select "Set Template" entry to set it. - -To show the current template use the ``gpg --card-status`` command. - -Seed mode -~~~~~~~~~ - -**WARNING** : SEED MODE IS EXPERIMENTAL - -When generating new keys on NanoS, those keys can be generated randomly -or in a deterministic way. The deterministic way is specified in [GPGADD]. -The current mode is displayed in the first sub menu. To activate the seeded - mode select *ON*, to deactivate the seeded mode select *OFF*. - -When the application starts, the seeded mode is always set to *OFF* - -**WARNING** : SEED MODE IS EXPERIMENTAL - -PIN mode -~~~~~~~~ - -Some operations require the user to enter his PIN code. -The default PIN values are: - - - user: ``123456`` - - admin: ``12345678`` - -The PIN entry can be done using four methods, named -"*Host*", "*On Screen*", "*Confirm only*", "*Trust*". - -After each mode a *+* or *#* symbol may appear to tell which mode is the current one -and which one is the default when the application starts. -The default mode can be changed by first selecting the desired mode and then -selecting the *Set default" menu. Note that *Trust* can not be set as default mode. - -Before you can change the PIN mode, you need to verify the PIN on the client. To do this, -run ``gpg --card-edit``, then ``admin`` and finally ``verify`` on you PC. You will then -be asked to enter the current PIN. After doing so, you can change the PIN mode on your -device. - - -Note that *On Screen*", "*Confirm only*" and "*Trust*" may not work if the -client application does not support it. In that case the "*Host*" should be -automatically used by the client in a transparent way. - -**Host** - -The PIN is entered on the external computer. - - -**On Screen** - -The PIN is entered on the Nano S or Blue screen. For entering the PIN choose the -next digit by using the left or right button. When the digit you expect is displayed -select it by pressing both buttons at the same time - -.. image:: pin_entry.png - :align: middle - - -Once all digits are selected, validate the PIN by selecting the **'V'** (Validate) -letter - -.. image:: pin_validate.png - :align: middle - - -If you want to change the previous digit select the **'C'** (Cancel) letter. - -.. image:: pin_cancel.png - :align: middle - - -Finally if you want to abort the PIN entry, select the **'A'** (Abort) letter. - -.. image:: pin_abort.png - :align: middle - - -**Confirm only** - -The user is requested, on the NanoS or Blue screen, to confirm -the PIN validation. The PIN value is not required, the user just has -to push the *REJECT* or *OK* button on the device. - -This is the default mode after application installation. - -.. image:: pin_confirm.png - :align: middle - - -**Trust** - -Act as if the PIN is always validated. This is a dangerous mode which should only be -used in a highly secure environment. - -UIF mode -~~~~~~~~ - - -By activating UIF mode for either signature, decryption or authentication, a user validation -will be ask by the device each time the related operation is performed. - -To activate or deactivate the UIF, select the operation to protect and press both button. -When activated, a '+' symbol appears after the operation name. - - -Reset -~~~~~ - -Selecting the menu will erase all OpenPGP Card Application data and will -reset the application in its '*just installed*' state. - - - -Nano S OpenPGP Card application usage -===================================== - - -GPG ---- - -The OpenGPG Card application need at least version 2.1.19 for full support. -A version prior to 2.1.19 will fail when using ECC. - -You should test with a test key and make a backup of your -keyring before starting, except if your are sure about what you do. - - -Configuration -~~~~~~~~~~~~~ - -In order to use a Ledger device with gpg it is needed to explicitly setup -the reader and the delegated PIN support. -Edit the file ~/.gnupg/scdaemon.conf and add the following lines: - - | ``reader-port "Ledger Token [Nano S] (0001) 01 00"`` - | ``allow-admin`` - | ``enable-pinpad-varlen`` - - -If you do not set the ``enable-pinpad-varlen`` option, even if Nano S is -configured in *On Screen* mode, gpg will keep requesting the PIN on the host. - -You can check ``the reader-port`` value by running the command line ``pcsc_scan``: - - | ``$ pcsc_scan `` - | ``PC/SC device scanner`` - | ``V 1.4.27 (c) 2001-2011, Ludovic Rousseau `` - | ``Compiled with PC/SC lite version: 1.8.14`` - | ``Using reader plug'n play mechanism`` - | ``Scanning present readers...`` - | ``0: Alcor Micro AU9560 00 00`` - | ``1: Ledger Token [Nano S] (0001) 01 00`` - | ``Reader 0: Alcor Micro AU9560 00 00`` - | ``Card state: Card removed, `` - | ``Reader 1: Ledger Token [Nano S] (0001) 01 00`` - | ``Card state: Card inserted, `` - | ``ATR: 3B 00`` - | ``+ TS = 3B --> Direct Convention`` - | ``+ T0 = 00, Y(1): 0000, K: 0 (historical bytes)`` - - - -Get/Set basic information -~~~~~~~~~~~~~~~~~~~~~~~~~ - -The ``gpg --card-status`` command provides default card information. Just after -installation it should look like this: - - | ``$ gpg --card-status`` - | ``Reader ...........: Ledger Token [Nano S] (0001) 01 00`` - | ``Application ID ...: D2760001240103002C97AFB114290000`` - | ``Version ..........: 3.0`` - | ``Manufacturer .....: unknown`` - | ``Serial number ....: AFB11429`` - | ``Name of cardholder: [not set]`` - | ``Language prefs ...: [not set]`` - | ``Sex ..............: unspecified`` - | ``URL of public key : [not set]`` - | ``Login data .......: [not set]`` - | ``Signature PIN ....: not forced`` - | ``Key attributes ...: rsa2048 rsa2048 rsa2048`` - | ``Max. PIN lengths .: 12 12 12`` - | ``PIN retry counter : 3 0 3`` - | ``Signature counter : 0`` - | ``Signature key ....: [none]`` - | ``Encryption key....: [none]`` - | ``Authentication key: [none]`` - | ``General key info..: [none]`` - -You can set the user information with the ``gpg --card-edit`` command and -``name``, ``url``, ``login``, ``lang``, ``sex`` subcommands. For example if you -want to set up your name: - - | ``$ gpg --card-edit`` - | ``gpg/card> admin`` - | ``Admin commands are allowed`` - | ```` - | ``gpg/card> name`` - | ``Cardholder's surname: Mesnil`` - | ``Cardholder's given name: Cedric`` - | ```` - | ``gpg/card> sex`` - | ``Sex ((M)ale, (F)emale or space): M`` - | ```` - | ``gpg/card> list`` - | ```` - | ``Reader ...........: Ledger Token [Nano S] (0001) 01 00`` - | ``Application ID ...: D2760001240103002C97AFB114290000`` - | ``Version ..........: 3.0`` - | ``Manufacturer .....: unknown`` - | ``Serial number ....: AFB11429`` - | ``Name of cardholder: Cedric Mesnil`` - | ``Language prefs ...: [not set]`` - | ``Sex ..............: unspecified`` - | ``URL of public key : [not set]`` - | ``Login data .......: [not set]`` - | ``Signature PIN ....: not forced`` - | ``Key attributes ...: rsa2048 rsa2048 rsa2048`` - | ``Max. PIN lengths .: 12 12 12`` - | ``PIN retry counter : 3 0 3`` - | ``Signature counter : 0`` - | ``Signature key ....: [none]`` - | ``Encryption key....: [none]`` - | ``Authentication key: [none]`` - | ``General key info..: [none]`` - - -Notes: - - * Modifying the user information will prompt you to enter ``User PIN``. - * Setting user information is not required for using gpg client. - - -Generate new key pair -~~~~~~~~~~~~~~~~~~~~~ - -For generating a new key pair follow those steps: - - - Select the desired NanoS OpenPGP Card application slot - - Setup the desired key template for this slot - - Generate the new key set - - -**Step 1** - -Starting from main menu: - - - Select *Select slot* menu - - Scroll to desired slot - - Select it - - Optionally set it as default by selecting *Set Default* menu - - Select *Back* to return to main menu. - - -**Step 2** - -The default template for each three keys (*signature*, *decryption*, -*authentication*) is ``RSA 2048``. If you want another kind of key -you have to set the template before generating keys. - -!WARNING!: changing the current template of a key automatically erases -the associated key. - -Starting from main menu: - - - Select *Settings* menu - - Select *Key template* menu - - Select *Choose Key...* menu (a) - - Scroll and select which key you want to set the new template for - - Select *Choose type...* menu - - Scroll and select among the supported key types and sizes - - Select *Set template* - - Repeat this process from (a) if you want to modify another key - template - - Select *Back* to return to main menu. - - -**Step 3** - -Once the template has been set, it's possible to generate new key pairs -with ``gpg``. - -!WARNING!: gpg will generate the three key pairs and -will overwrite any key already present in the selected slot. - -Here after is a detailed log of key generation of ECC keys, assuming -the three key templates are ``NIST P256``. - -**Edit Card** - - - | ``$ gpg2 --edit-card`` - | ``Reader ...........: Ledger Token [Nano S] (0001) 01 00`` - | ``Application ID ...: D2760001240103002C97AFB1142B0000`` - | ``Version ..........: 3.0`` - | ``Manufacturer .....: unknown`` - | ``Serial number ....: AFB1142B`` - | ``Name of cardholder: Cedric Mesnil`` - | ``Language prefs ...: [not set]`` - | ``Sex ..............: male`` - | ``URL of public key : [not set]`` - | ``Login data .......: [not set]`` - | ``Signature PIN ....: not forced`` - | ``Key attributes ...: nistp256 nistp256 nistp256`` - | ``Max. PIN lengths .: 12 12 12`` - | ``PIN retry counter : 3 0 3`` - | ``Signature counter : 0`` - | ``Signature key ....: [none]`` - | ``Encryption key....: [none]`` - | ``Authentication key: [none]`` - | ``General key info..: [none]`` - -**Switch to admin mode:** - - | ``gpg/card>`` *admin* - | ``Admin commands are allowed`` - -**Request new key generation without backup** - - | ``gpg/card>`` *generate* - | ``Make off-card backup of encryption key? (Y/n)`` **n** - -**Unlock user level ``81``** - - | ``Please unlock the card`` - | ```` - | ``Number: 2C97 AFB1142B`` - | ``Holder: Cedric Mesnil`` - | ```` - | ``Use the reader's pinpad for input.`` - | `` OK`` - | ``Press any key to continue. `` - -**Set key validity** - - | ``Please specify how long the key should be valid.`` - | `` 0 = key does not expire`` - | `` = key expires in n days`` - | `` w = key expires in n weeks`` - | `` m = key expires in n months`` - | `` y = key expires in n years`` - | ``Key is valid for? (0)`` *0* - | ``Key does not expire at all`` - | ``Is this correct? (y/N)``*y* - -**Set user ID** - - | ``GnuPG needs to construct a user ID to identify your key.`` - | ```` - | ``Real name: Cedric Mesnil`` - | ``Email address: cedric@ledger.fr`` - | ``Comment: `` - | ``You selected this USER-ID:`` - | `` "Cedric Mesnil "`` - | ```` - | ``Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?`` *O* - | ```` - | ``You selected this USER-ID:`` - | `` "Cedric Mesnil "`` - -**Unlock admin level ``83``** - - | ``Please enter the Admin PIN `` - | ```` - | ``Number: 2C97 AFB1142B`` - | ``Holder: Cedric Mesnil`` - | ```` - | ``Use the reader's pinpad for input.`` - | `` OK`` - | ``Press any key to continue.`` - -**Unlock user level ``82``** - - | ``Please unlock the card`` - | ```` - | ``Number: 2C97 AFB1142B`` - | ``Holder: Cedric Mesnil`` - | ``Counter: 8`` - | ```` - | ``Use the reader's pinpad for input.`` - | `` OK`` - | ``Press any key to continue.`` - -**Final confirmation** - - | ``Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?`` *O* - | ``gpg: key DF3FA4A33EF00E47 marked as ultimately trusted`` - | ``gpg: revocation certificate stored as '/home/gnuk/.gnupg/openpgp-revocs.d/89F772243C9A3E583CB59AB5DF3FA4A33EF00E47.rev'`` - | ``public and secret key created and signed.`` - -**Get information after key generation** - - | ``gpg/card> list`` - | ```` - | ``Reader ...........: Ledger Token [Nano S] (0001) 01 00`` - | ``Application ID ...: D2760001240103002C97AFB1142B0000`` - | ``Version ..........: 3.0`` - | ``Manufacturer .....: unknown`` - | ``Serial number ....: AFB1142B`` - | ``Name of cardholder: Cedric Mesnil`` - | ``Language prefs ...: [not set]`` - | ``Sex ..............: male`` - | ``URL of public key : [not set]`` - | ``Login data .......: [not set]`` - | ``Signature PIN ....: not forced`` - | ``Key attributes ...: nistp256 nistp256 nistp256`` - | ``Max. PIN lengths .: 12 12 12`` - | ``PIN retry counter : 3 0 3`` - | ``Signature counter : 12`` - | ``Signature key ....: F844 38BB CA87 F9A7 6830 F002 F8A4 A353 3CBF CAA5`` - | `` created ....: 2017-08-22 15:59:36`` - | ``Encryption key....: B1D3 C9F2 C3C5 87CA 36A7 F02E E137 28E9 13B8 77E1`` - | `` created ....: 2017-08-22 15:59:36`` - | ``Authentication key: F87D EF02 9C38 C43D 41F0 6872 2345 A677 CE9D 8223`` - | `` created ....: 2017-08-22 15:59:36`` - | ``General key info..: pub nistp256/F8A4A3533CBFCAA5 2017-08-22 cedric mesnilCedric Mesnil `` - | ``sec> nistp256/F8A4A3533CBFCAA5 created: 2017-08-22 expires: never `` - | `` card-no: 2C97 AFB1142B`` - | ``ssb> nistp256/2345A677CE9D8223 created: 2017-08-22 expires: never `` - | `` card-no: 2C97 AFB1142B`` - | ``ssb> nistp256/E13728E913B877E1 created: 2017-08-22 expires: never `` - | `` card-no: 2C97 AFB1142B`` - -**Say goodbye - - | ``gpg/card> quit``** - - - -At this point it's possible to check that the key has been generated on card with the following command: - - | ``$ gpg2 --list-secret-keys cedric@ledger`` - | ``gpg: checking the trustdb`` - | ```` - | ``sec> nistp256 2017-08-22 [SC]`` - | `` F84438BBCA87F9A76830F002F8A4A3533CBFCAA5`` - | `` Card serial no. = 2C97 AFB1142B`` - | ``uid [ultimate] cedric mesnilCedric Mesnil `` - | ``ssb> nistp256 2017-08-22 [A]`` - | ``ssb> nistp256 2017-08-22 [E]`` - - - -Moving existing key pair -~~~~~~~~~~~~~~~~~~~~~~~~ - -This section shows how to move an existing key onto the Ledger device. - -The key to transfer here is a RSA 4096 bits key: - - | ``$ gpg2 --list-secret-keys "RSA 4096"`` - | ``sec rsa4096 2017-04-26 [SC]`` - | `` FB6C6C75FB016635872ED3E49B93CB47F954FB53`` - | ``uid [ultimate] RSA 4096`` - | ``ssb rsa4096 2017-04-26 [E]`` - - -In case of transfer it is not necessary to previously set the template. -It will be automatically changed. -When generating a new key, the three keys (*signature*, *decryption*, -*authentication*)) are automatically generated. -When transferring existing ones, it is possible to choose which one will be -moved. - -**Edit Key** - - | ``$ gpg2 --edit-key "RSA 4096"`` - | ``gpg (GnuPG) 2.1.19; Copyright (C) 2017 Free Software Foundation, Inc.`` - | ``This is free software: you are free to change and redistribute it.`` - | ``There is NO WARRANTY, to the extent permitted by law.`` - | ```` - | ``Secret key is available.`` - | ```` - | ``sec rsa4096/9B93CB47F954FB53`` - | `` created: 2017-04-26 expires: never usage: SC `` - | `` trust: ultimate validity: ultimate`` - | ``ssb rsa4096/49EE12B0F5CBDF26`` - | `` created: 2017-04-26 expires: never usage: E `` - | ``[ultimate] (1). RSA 4096`` - -**Select the key to move, here the *encryption* one.** - - | ``gpg> `` *key 1* - | `` `` - | ``sec rsa4096/9B93CB47F954FB53`` - | `` created: 2017-04-26 expires: never usage: SC `` - | `` trust: ultimate validity: ultimate`` - | ``ssb* rsa4096/49EE12B0F5CBDF26`` - | `` created: 2017-04-26 expires: never usage: E `` - | ``[ultimate] (1). RSA 4096`` - -**Move** - - | ``gpg> `` **keytocard** - | ``Please select where to store the key:`` - | `` (2) Encryption key`` - | ``Your selection?`` *2* - -**Unlock admin level ``83``** - - | ``Please enter the Admin PIN`` - | ```` - | ``Number: 2C97 1D49B409`` - | ``Holder: `` - | ```` - | ``Use the reader's pinpad for input.`` - | `` OK`` - | ``Press any key to continue.`` - -**Unlock admin level ``83`` (maybe twice....)** - - | ``Please enter the Admin PIN`` - | ```` - | ``Number: 2C97 1D49B409`` - | ``Holder: `` - | ```` - | ``Use the reader's pinpad for input.`` - | `` OK`` - | ``Press any key to continue.`` - - | ``sec rsa4096/9B93CB47F954FB53`` - | `` created: 2017-04-26 expires: never usage: SC `` - | `` trust: ultimate validity: ultimate`` - | ``ssb* rsa4096/49EE12B0F5CBDF26`` - | `` created: 2017-04-26 expires: never usage: E `` - | ``[ultimate] (1). RSA 4096`` - -**Say goodbye with saving!** - - | ``gpg> `` *save* - -**check** - - | ``$ gpg2 --edit-keys cedric`` - | ``gpg: error reading key: No public key`` - | ``gnuk@Lulu:~$ /opt/gnupg2.1.19/bin/gpg2 --edit-key "RSA 4096"`` - | ``gpg (GnuPG) 2.1.19; Copyright (C) 2017 Free Software Foundation, Inc.`` - | ``This is free software: you are free to change and redistribute it.`` - | ``There is NO WARRANTY, to the extent permitted by law.`` - | ```` - | ``Secret key is available.`` - | ```` - | ``sec rsa4096/9B93CB47F954FB53`` - | `` created: 2017-04-26 expires: never usage: SC `` - | `` trust: ultimate validity: ultimate`` - | ``ssb rsa4096/49EE12B0F5CBDF26`` - | `` created: 2017-04-26 expires: never usage: E `` - | `` card-no: 2C97 7BB895B9`` - | ``[ultimate] (1). RSA 4096`` - | ```` - | ``gpg> `` *quit* - - -The encryption key is now associated with a card. - -Decrypting and Signing -~~~~~~~~~~~~~~~~~~~~~~ - - -Decrypting and Signing will act exactly the same way as if keys were not on -the card. The only difference is ``gpg`` will request the PIN code instead -of the passphrase. - - -SSH ---- - - -Overview -~~~~~~~~ - -In order to use gpg for SSH authentication, an "authentication" is needed. -There are two solutions for that, either generate one on the device -or add an authentication sub-key to your existing master gpg key. - -Once done, it is necessary to configure ssh to point to the right key and -delegate the authentication to *gpg-ssh-agent* instead of *ssh-agent*. - - -Generate new key on device -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The important thing to keep in mind here is there is no way to tell gpg to -only generate the authentication key. So generating this key will also -generate the two other under a new identity and will erase existing keys -on the current slot on the device. - -Nevertheless, if you want to use a different identity for ssh login, you can use -another slot on the device. See `Nano S OpenPGP Card application explained` -and `Generate new key pair`. - - -Add sub-key -~~~~~~~~~~~ - -**Edit pgp key set** - - | ``$ gpg --expert --edit-key cedric`` - | ``gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc.`` - | ``This is free software: you are free to change and redistribute it.`` - | ``There is NO WARRANTY, to the extent permitted by law.`` - - | ``Secret key is available.`` - - | ``sec rsa2048/831415DA94A9A15C`` - | `` created: 2017-08-25 expires: never usage: SC `` - | `` trust: ultimate validity: ultimate`` - | ``ssb rsa2048/8E95F2999EEC38C4`` - | `` created: 2017-08-25 expires: never usage: E `` - | ``[ultimate] (1). cedric`` - -**Add sub key** - - | ``gpg> *addkey*`` - - | ``Please select what kind of key you want:`` - | `` (3) DSA (sign only)`` - | `` (4) RSA (sign only)`` - | `` (5) Elgamal (encrypt only)`` - | `` (6) RSA (encrypt only)`` - | `` (7) DSA (set your own capabilities)`` - | `` (8) RSA (set your own capabilities)`` - | `` (10) ECC (sign only)`` - | `` (11) ECC (set your own capabilities)`` - | `` (12) ECC (encrypt only)`` - | `` (13) Existing key`` - | ``Your selection? 8`` - -**Toggle sign/encrypt OFF, Toggle authentication ON** - - | ``Possible actions for a RSA key: Sign Encrypt Authenticate `` - | ``Current allowed actions: Sign Encrypt `` - - | `` (S) Toggle the sign capability`` - | `` (E) Toggle the encrypt capability`` - | `` (A) Toggle the authenticate capability`` - | `` (Q) Finished`` - - | ``Your selection?`` *S* - - | ``Possible actions for a RSA key: Sign Encrypt Authenticate `` - | ``Current allowed actions: Encrypt `` - - | `` (S) Toggle the sign capability`` - | `` (E) Toggle the encrypt capability`` - | `` (A) Toggle the authenticate capability`` - | `` (Q) Finished`` - - | ``Your selection?`` *E* - - | ``Possible actions for a RSA key: Sign Encrypt Authenticate `` - | ``Current allowed actions: `` - - | `` (S) Toggle the sign capability`` - | `` (E) Toggle the encrypt capability`` - | `` (A) Toggle the authenticate capability`` - | `` (Q) Finished`` - - | ``Your selection?`` *A* - - | ``Possible actions for a RSA key: Sign Encrypt Authenticate `` - | ``Current allowed actions: Authenticate `` - - | `` (S) Toggle the sign capability`` - | `` (E) Toggle the encrypt capability`` - | `` (A) Toggle the authenticate capability`` - | `` (Q) Finished`` - - | ``Your selection? Q`` - -**Set key options** - - | ``RSA keys may be between 1024 and 4096 bits long.`` - | ``What keysize do you want? (2048)`` *2048* - | ``Requested keysize is 2048 bits`` - | ``Please specify how long the key should be valid.`` - | `` 0 = key does not expire`` - | `` = key expires in n days`` - | `` w = key expires in n weeks`` - | `` m = key expires in n months`` - | `` y = key expires in n years`` - | ``Key is valid for? (0)`` *0* - | ``Key does not expire at all`` - | ``Is this correct? (y/N)`` *y* - | ``Really create? (y/N)`` *y* - | ``We need to generate a lot of random bytes. It is a good idea to perform`` - | ``some other action (type on the keyboard, move the mouse, utilize the`` - | ``disks) during the prime generation; this gives the random number`` - | ``generator a better chance to gain enough entropy.`` - - | ``sec rsa2048/831415DA94A9A15C`` - | `` created: 2017-08-25 expires: never usage: SC `` - | `` trust: ultimate validity: ultimate`` - | ``ssb rsa2048/8E95F2999EEC38C4`` - | `` created: 2017-08-25 expires: never usage: E `` - | ``ssb rsa2048/C20B90E12F68F035`` - | `` created: 2017-08-28 expires: never usage: A `` - | ``[ultimate] (1). cedric`` - -**Select the key and move it** - - | ``gpg> key`` *2* - | ```` - | ``sec rsa2048/831415DA94A9A15C`` - | `` created: 2017-08-25 expires: never usage: SC `` - | `` trust: ultimate validity: ultimate`` - | ``ssb rsa2048/8E95F2999EEC38C4`` - | `` created: 2017-08-25 expires: never usage: E `` - | ``ssb* rsa2048/C20B90E12F68F035`` - | `` created: 2017-08-28 expires: never usage: A `` - | ``[ultimate] (1). cedric`` - | ```` - | ``gpg>`` *keytocard* - | ``Please select where to store the key:`` - | `` (3) Authentication key`` - | ``Your selection?`` *3* - | `` `` - | ``sec rsa2048/831415DA94A9A15C`` - | `` created: 2017-08-25 expires: never usage: SC `` - | `` trust: ultimate validity: ultimate`` - | ``ssb rsa2048/8E95F2999EEC38C4`` - | `` created: 2017-08-25 expires: never usage: E `` - | ``ssb* rsa2048/C20B90E12F68F035`` - | `` created: 2017-08-28 expires: never usage: A `` - | ``[ultimate] (1). cedric`` - - -**Save and Quit** - - | ``gpg>`` save - | ``$ `` - - - - -Configure SSH and GPG -~~~~~~~~~~~~~~~~~~~~~ - - -First, tell gpg-agent to enable ssh-auth feature by adding the following line -to your .gpg-agent.conf: - - ``enable-ssh-support`` - -Starting with gpg2 it necessary to add some configuration options to make the *pinentry* -work properly. Add the following line to ~/.bashrc file: - - | ``export SSH_AUTH_SOCK=`gpgconf --list-dirs agent-ssh-socket` `` - | ``export GPG_TTY=`tty` `` - | ``gpgconf --launch gpg-agent `` - - -It may be also necessary to setup the loopback pinentry options. - -Add the following line to your ~/.gnupg/gpg-agent.conf: - - ``allow-loopback-pinentry`` - -And add the following line to your ~/.gnupg/gpg.conf: - - ``pinentry-mode loopback`` - - -Then export your authentication public key. First execute the -``gpg -k --with-subkey-fingerprint --with-keygrip cedric`` command. - - - | ``pub rsa2048 2017-08-25 [SC]`` - | `` 7886147C4C2E5CE2A4B1546C831415DA94A9A15C`` - | `` Keygrip = DE2B63C13AB92EBD2D05C1021A9DAA2D40ECB564`` - | ``uid [ultimate] cedric`` - | ``sub rsa2048 2017-08-25 [E]`` - | `` 789E56872A0D9A5AC8AF9C2F8E95F2999EEC38C4`` - | `` Keygrip = 9D7C2EF8D84E3B31371A09DFD9A4B3EF72AB4ACE`` - | ``sub rsa2048 2017-08-28 [A]`` - | `` 2D0E4FFFAA448AA2770C7F02C20B90E12F68F035`` - | `` Keygrip = 6D60CB58D9D66EE09804E7FE460E865A91F5E41A`` - -Add the keygrip of the authentication key, the one identified by ``[A]``, -to .gnupg/sshcontrol file: - - | ``$ echo 6D60CB58D9D66EE09804E7FE460E865A91F5E41A > .gnupg/sshcontrol`` - -Export your authentication key, identifier by its fingerprint, in a SSH compliant format. - - | ``$ gpg --export-ssh-key 2D0E4FFFAA448AA2770C7F02C20B90E12F68F035`` - | ``ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCIARKh0IZTHld+I6oA8nwrgnCUQE8f`` - | ``7X3pmI4ZwryT52fKhpcsQJsd3krodXrM//LiK8+m2ZRMneJ9iGlqqE7SCyZkNBj1GUm9s`` - | ``rK3Q5eoR6nU0s+sq17b/FAtQWHBJTqqaOtyA33hFj5twUtWZ6rokX9cNZrD1ne8kRVHDe`` - | ``3uEBsaY5PR1Tuko/GwywLyZu0SwfEobl/RPjL7P8rUSc7DTHpQMw8fjJFb4BNvIHAlaVC`` - | ``5FwZwkuogygaJdN/44MayHFmOZmzx9CAgYgLpTzen35+CcyhlqCqi+HjNlnHL2DDWd4iR`` - | ``d3Y6pY8LjS3xQkECc3Bhedptp17D+H9AVJt openpgp:0x2F68F035`` - -Finally copy the above export (``ssh-rsa AAAAB...Jt openpgp:0x2F68F035``) into the -~/.ssh/authorized_keys file on your remote server. - - -Now, if everything is correctly setup and running, an ``ssh-add -l`` should show your key: - - | ``$ ssh-add -l`` - | ``2048 SHA256:sLCzsoi5GAG2kJkG6hSp8gTLPxSvo/zNtsks2kQ7vTU cardno:2C979421A9E1 (RSA)`` - | ``2048 SHA256:sLCzsoi5GAG2kJkG6hSp8gTLPxSvo/zNtsks2kQ7vTU (none) (RSA)`` - -And you should be able to ssh to your remote server with your gpg key! - - - -Backup and Restore ------------------- - -Introduction -~~~~~~~~~~~~ - -"The OpenPGP card" specification does not provide any mechanism for backuping you key. -Thus if you generate your keys on device and loose it, you definitively loose you private key. - -In order to avoid such extreme panic situation, a backup/restore mechanism is provided. -At any time you can backup a snapshot of your device data, including your private keys. -All public data are retrieve in clear form. The private key are stored -encrypted with a key derived from your seed, i.e. from your 24 BIP words. - -The backup/restore tool is located in ``pytools`` directory: - - | ``usage: gpgcli.py [-h] [--adm-pin PIN] [--backup] [--backup-keys] [--file FILE]`` - | `` [--pinpad] [--reader READER] [--reset] [--restore]`` - | `` [--set-serial SERIAL] [--set-fp SIG:DEC:AUT] [--seed-key]`` - | `` [--user-pin PIN]`` - | - | ``optional arguments:`` - | `` -h, --help show this help message and exit`` - | `` --adm-pin PIN Administrative PIN, if pinpad not used`` - | `` --backup Perform a full backup except the key`` - | `` --backup-keys Perform keys encrypted backup`` - | `` --file FILE basckup/restore file`` - | `` --pinpad PIN validation will be deledated to pinpad`` - | `` --reader READER PCSC reader`` - | `` --reset Reset the application. All data are erased`` - | `` --restore Perform a full restore except the key`` - | `` --set-serial SERIAL set the four serial bytes`` - | `` --set-fp SIG:DEC:AUT sig:dec:aut fingerprints, 20 bytes each in hexa`` - | `` --seed-key Regenerate all keys, based on seed mode`` - | `` --slot SLOT slot to backup`` - | `` --user-pin PIN User PIN, if pinpad not used`` - - -First you must either provide your pin codes or use the pinpad (onscreen pin). This is -done by giving either ``--adm-pin`` AND ``--user-pin`` or ``--pinpad``. Note that -using ``--xx-pin`` may compromise your pin codes. - -Then you must precise if you want a backup or a restore with ``--backup`` or ``--restore`` - -By default backup is performed without saving keys, assuming you use the seed mode. -If you also want to backup keys you have to pass the ``--backup-keys`` option. -In a general manner it is better to also save your keys with ``--backup-keys`` option. - -Note that backup and restore works on current slot, so you have to perform a backup per slot -even if some data are shared. You can precise the slot/backup to restore with ``--slot`` - -If you encounter an error when performing the backup/restore, reload your scdaemon with -``gpgconf --reload scdaemon`` - - -Backup and Restore example -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -First you must have the path of the `ledger-app-openpgp-card/pytools` in your PYTHONPATH. - -full backup command: - - | ``python3 -m gpgcard.gpgcli --backup --pinpad --backup-keys --file my_bck_file_name.pickle`` - -backup command without private keys: - - | ``python3 -m gpgcard.gpgcli --backup --pinpad --file my_bck_file_name.pickle`` - - -full restore command: - - | ``python3 -m gpgcard.gpgcli --restore --pinpad --file my_bck_file_name.pickle`` - - -full restore command with seed key generation: - - | ``python3 -m gpgcard.gpgcli --restore --pinpad --seed-key --file my_bck_file_name.pickle`` - - -Restore without backup -~~~~~~~~~~~~~~~~~~~~~~ - -If you have seeded key but do not have done a backup and still have your keyring, there is a -solution to restore at least the key and their related information: serial and fingerprints. -All other information such as name, url, ... shall be set manually with ``gpg --card-edit``. - - - -**Step 1: retrieve information** - -Run the command ``gpg --edit-key John``, replace John by your own key id. - - | ``$ gpg --edit-key John`` - | ``gpg: WARNING: unsafe permissions on homedir './test/ring'`` - | ``gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.`` - | ``This is free software: you are free to change and redistribute it.`` - | ``There is NO WARRANTY, to the extent permitted by law.`` - | - | ``Secret key is available.`` - | - | ``sec ed25519/8451AAF7D43D1095`` - | `` created: 2018-10-10 expires: never usage: SC `` - | `` card-no: 2C97 FD6C11BE`` - | `` trust: ultimate validity: ultimate`` - | ``ssb ed25519/C5A8FB078520ABBB`` - | `` created: 2018-10-10 expires: never usage: A `` - | `` card-no: 2C97 FD6C11BE`` - | ``ssb cv25519/0953D871FC4B9EA4`` - | `` created: 2018-10-10 expires: never usage: E `` - | `` card-no: 2C97 FD6C11BE`` - | ``[ultimate] (1). John Doe`` - | - | ``gpg> `` - | - - -The ``usage`` field tells you each key purpose: ``SC`` or ``S`` for signature, ``A`` for authentication, ``E`` for encryption. - -The ``card-no``field provides you with the serial number of the card on which the key are stored. -You should have three or less keys with the same serial. These are the keys we want to restore. - -For each key you also have the key template (rsa2048, rsa3072, rsa4096, ed2559, cv25519) followed by the -short fingerprint, e.g. ``ed25519/8451AAF7D43D1095`` - -Note the serial and the three key template names: ``FD6C11BE`` , ``ed25519:cv25519:ed25519``. -Take care of the order: ``SC:E:A``. - -Now type the ``quit`` command. - -To get the full fingerprint of each key, run (yes twice ``--fingerprint``): - -``gpg --fingerprint --fingerprint John``, - - - | ``$ gpg --fingerprint --fingerprint John`` - | ``gpg: WARNING: unsafe permissions on homedir './test/ring'`` - | ``pub ed25519 2018-10-10 [SC]`` - | `` 2C68 8345 BDDA 0EDF B24D B4FB 8451 AAF7 D43D 1095`` - | ``uid [ultimate] John Doe`` - | ``sub ed25519 2018-10-10 [A]`` - | `` CEC5 9AE6 A766 14BC 3C6D 37D9 C5A8 FB07 8520 ABBB`` - | ``sub cv25519 2018-10-10 [E]`` - | `` DF15 7BD4 AC3B D1EE 9910 99C8 0953 D871 FC4B 9EA4`` - -Assemble the three full fingerprint, corresponding to the one identified previously, -in the the following order ``SC:E:A`` : - -``2C688345BDDA0EDFB24DB4FB8451AAF7D43D1095:DF157BD4AC3BD1EE991099C80953D871FC4B9EA4: -CEC59AE6A76614BC3C6D37D9C5A8FB078520ABBB``. - -If you only have one key to restore you can omit the others, for example to only restore the authentication key : - -``::CEC59AE6A76614BC3C6D37D9C5A8FB078520ABBB`` - - -**Step 1: restore** - -Plug you Nano S and run the OpenPGP application. - -Finally run the following command : - - | ``python3 -m gpgcard.gpgcli --pinpad --set-template ed255519:cv25519:ed255519 --set-fingerprints `` - | `` '2C688345BDDA0EDFB24DB4FB8451AAF7D43D1095:DF157BD4AC3BD1EE991099C80953D871FC4B9EA4:CEC59AE6A76614BC3C6D37D9C5A8FB078520ABBB'`` - | `` --set-serial 'FD6C11BE' --seed-key `` - - - -Trouble/FAQ ------------ - -**Q:** pinentry failed with a strange canceled message: - -**R:** there is some problem with gpg2 and pinentry-gnome3. You may update your system -to use pinentry-gtk-2. Under Ubuntu-like OS, use ``update-alternatives --config pinentry`` - - | ```` - -**Q:** gpg-connection agent failed - -**R:** check that you don't have multiple running agents. After setting-up all SSH stuff, try to fully -logout/login - - | ```` - -**Q:** It does not work at all, HELP ME!!! - -**R** Please keep calm and do not cry. -Add the following option to ~/.gnupg/gpg-agent.conf - - | ``debug-level guru`` - | ``log-file /tmp/gpgagent.log`` - -Add the following option to ~/.gnupg/scdaemon.conf - - | ``log-file /tmp/scd.log`` - | ``debug-level guru`` - | ``debug-all`` - -Make a nice issue report under github providing log and and command line you run. - -**!*WARNING*!** : this may reveal confidential information such as key values. Do your log with a test key. - - | ```` - -**Q:** I'm having issue when using SSH, there is no pinpad prompt either on my host nor my Nano -(``sign_and_send_pubkey: signing failed: agent refused operation``) - -**R:** You might need to add this command to your .bashrc/.zshrc : - - | ``gpg-connect-agent updatestartuptty /bye >/dev/null`` - -Be aware that when using **Host** PIN mode, you will have to enter your PIN directly on your -computer and if you use a ncurses-like PIN entry program. In some cases, you will be prompted -to the first shell that uses the above command (at least on Mac). - - | ```` - -**Q:** My mac is not able to see my ``Ledger Token`` - -**R:** For some reason, SC communication on Mac takes some times or mess it up sometimes. - -To troubleshot those issues, you can try to reload the ``scdaemon`` using this command : - - | ``gpgconf --reload scdaemon`` - | ``gpgconf --reload gpg-agent`` - -If not successful, you can try to trigger daemons to restart by sending a **SIGTERM** like so : - - | ``kill -TERM $(pgrep gpg-agent) $(pgrep scdaemon)``. - -Changing USB port might also help sometimes. Do not hesitate. - - | ```` - -**Q:** My mac is **STILL* not able to see my ``Ledger Token`` - -**R:** This might be related to your CCID drivers. Mojave comes with the version ``1.4.27`` -pre-installed. You can manually install a more recent version from this -`website` and install it this way : - - | ``CCID_VERSION=1.4.30`` - | ``wget https://ccid.apdu.fr/files/ccid-${CCID_VERSION}.tar.bz2`` - | ``tar xzvf ccid-${CCID_VERSION}.tar.bz2`` - | ``cd ccid-${CCID_VERSION}`` - | ``./MacOSX/configure`` - | ``make`` - | ``make install`` - -Installing the driver depends on ``libusb`` which can be installed using the following -``brew install libusb``. It also requires static linking against it, if you use -dynamic linking you will have the following output when using the ``./MacOSX/configure`` step : - - | ``/usr/local/Cellar/libusb/1.0.23/lib/libusb-1.0.0.dylib`` - | ``/usr/local/Cellar/libusb/1.0.23/lib/libusb-1.0.dylib`` - | ``*****************************`` - | ``Dynamic library libusb found in /usr/local/Cellar/libusb/1.0.23/lib`` - | ``*****************************`` - | ``Rename it to force a static link`` - -You can use the following : - - | ``LIBUSB_VERSION=1.0.23`` - | ```` - | ``for f in /usr/local/Cellar/libusb/${LIBUSB_VERSION}/lib/*.dylib; do`` - | ``mv $f $f.fake`` - | ``done`` - | ```` - | ``./MacOSX/configure`` - | ```` - | ``for f in /usr/local/Cellar/libusb/${LIBUSB_VERSION}/lib/*.dylib.fake; do`` - | ``ORIG="$( echo $f | sed 's#.fake##g' )"`` - | ``mv $f ${ORIG}`` - | ``done`` - -Once installed, you should see the new driver installed using this command ```` : - - | ``SmartCards:`` - | ```` - | ``Readers:`` - | ```` - | ``Reader Drivers:`` - | ```` - | ``#01: org.debian.alioth.pcsclite.smartcardccid:1.4.27`` - | ``(/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle)`` - | ``#02: org.debian.alioth.pcsclite.smartcardccid:1.4.30`` - | ``(/usr/local/libexec/SmartCardServices/drivers/ifd-ccid.bundle)`` - | ```` - | ``Tokend Drivers:`` - | ```` - | ``SmartCard Drivers:`` - | ```` - | ``#01: com.apple.CryptoTokenKit.pivtoken:1.0`` - | ``(/System/Library/Frameworks/CryptoTokenKit.framework/PlugIns/pivtoken.appex)`` - | ```` - | ``Available SmartCards (keychain):`` - | ```` - | ``Available SmartCards (token):`` - -Annexes -======= - -References ----------- - -* [GPG] *The GNU Privacy Guard*, https://gnupg.org/ -* [GPGSC] *The GnuPG Smartcard HOWTO*, https://gnupg.org/howtos/card-howto/en/smartcard-howto.html -* [G10CODE] *The OpenPGP card application*, https://g10code.com/p-card.html -* [GPGADD] *The OpenPGP card application add-on*, https://github.com/LedgerHQ/blue-app-openpgp-card/blob/master/doc/gpgcard3.0-addon.rst diff --git a/doc/user/blue-app-openpgp-card.template b/doc/user/blue-app-openpgp-card.template deleted file mode 100644 index 5a5138d..0000000 --- a/doc/user/blue-app-openpgp-card.template +++ /dev/null @@ -1,275 +0,0 @@ -\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$,towside]{report} -$if(fontfamily)$ -\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} -$else$ -\usepackage{lmodern} -$endif$ -$if(linestretch)$ -\usepackage{setspace} -\setstretch{$linestretch$} -$endif$ - -\usepackage{amssymb,amsmath} -\usepackage{ifxetex,ifluatex} -\usepackage{fixltx2e} % provides \textsubscript -\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex - \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} - \usepackage[utf8]{inputenc} -$if(euro)$ - \usepackage{eurosym} -$endif$ -\else % if luatex or xelatex - \ifxetex - \usepackage{mathspec} - \else - \usepackage{fontspec} - \fi - \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} -$for(fontfamilies)$ - \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} -$endfor$ -$if(euro)$ - \newcommand{\euro}{€} -$endif$ -$if(mainfont)$ - \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} -$endif$ -$if(sansfont)$ - \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} -$endif$ -$if(monofont)$ - \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} -$endif$ -$if(mathfont)$ - \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} -$endif$ -$if(CJKmainfont)$ - \usepackage{xeCJK} - \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} -$endif$ -\fi -% use upquote if available, for straight quotes in verbatim environments -\IfFileExists{upquote.sty}{\usepackage{upquote}}{} -% use microtype if available -\IfFileExists{microtype.sty}{% -\usepackage{microtype} -\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts -}{} - -$if(geometry)$ -\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} -$endif$ - -\usepackage[unicode=true]{hyperref} -$if(colorlinks)$ -\PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref -$endif$ -\hypersetup{ -$if(title-meta)$ - pdftitle={$title-meta$}, -$endif$ -$if(author-meta)$ - pdfauthor={$author-meta$}, -$endif$ -$if(keywords)$ - pdfkeywords={$for(keywords)$$keywords$$sep$; $endfor$}, -$endif$ -$if(colorlinks)$ - colorlinks=true, - linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, - citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, - urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, -$else$ - pdfborder={0 0 0}, -$endif$ - breaklinks=true} -\urlstyle{same} % don't use monospace font for urls -$if(lang)$ -\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex - \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} -$if(babel-newcommands)$ - $babel-newcommands$ -$endif$ -\else - \usepackage{polyglossia} - \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} -$for(polyglossia-otherlangs)$ - \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} -$endfor$ -\fi -$endif$ -$if(natbib)$ -\usepackage{natbib} -\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} -$endif$ -$if(biblatex)$ -\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} -$for(bibliography)$ -\addbibresource{$bibliography$} -$endfor$ -$endif$ -$if(listings)$ -\usepackage{listings} -$endif$ -$if(lhs)$ -\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} -$endif$ -$if(highlighting-macros)$ -$highlighting-macros$ -$endif$ -$if(verbatim-in-note)$ -\usepackage{fancyvrb} -\VerbatimFootnotes % allows verbatim text in footnotes -$endif$ -$if(tables)$ -\usepackage{longtable,booktabs} -$endif$ -$if(graphics)$ -\usepackage{graphicx,grffile,float} -\makeatletter -\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} -\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} -\makeatother -% Scale images if necessary, so that they will not overflow the page -% margins by default, and it is still possible to overwrite the defaults -% using explicit options in \includegraphics[width, height, ...]{} -\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} -$endif$ -$if(links-as-notes)$ -% Make links footnotes instead of hotlinks: -\renewcommand{\href}[2]{#2\footnote{\url{#1}}} -$endif$ -$if(strikeout)$ -\usepackage[normalem]{ulem} -% avoid problems with \sout in headers with hyperref: -\pdfstringdefDisableCommands{\renewcommand{\sout}{}} -$endif$ -$if(indent)$ -$else$ -\IfFileExists{parskip.sty}{% -\usepackage{parskip} -}{% else -\setlength{\parindent}{0pt} -\setlength{\parskip}{6pt plus 2pt minus 1pt} -} -$endif$ -\setlength{\emergencystretch}{3em} % prevent overfull lines -\providecommand{\tightlist}{% - \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} -$if(numbersections)$ -\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} -$else$ -\setcounter{secnumdepth}{0} -$endif$ -$if(subparagraph)$ -$else$ -% Redefines (sub)paragraphs to behave more like sections -\ifx\paragraph\undefined\else -\let\oldparagraph\paragraph -\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} -\fi -\ifx\subparagraph\undefined\else -\let\oldsubparagraph\subparagraph -\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} -\fi -$endif$ -$if(dir)$ -\ifxetex - % load bidi as late as possible as it modifies e.g. graphicx - $if(latex-dir-rtl)$ - \usepackage[RTLdocument]{bidi} - $else$ - \usepackage{bidi} - $endif$ -\fi -\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex - \TeXXeTstate=1 - \newcommand{\RL}[1]{\beginR #1\endR} - \newcommand{\LR}[1]{\beginL #1\endL} - \newenvironment{RTL}{\beginR}{\endR} - \newenvironment{LTR}{\beginL}{\endL} -\fi -$endif$ -$for(header-includes)$ -$header-includes$ -$endfor$ - - -\title{OpenPGP Card Application} -\author{Cedric Mesnil cedric@ledger.fr} -\date{$date$} - - -\begin{document} - -\begin{titlepage} - \centering -% \includegraphics[width=0.15\textwidth]{example-image-1x1}\par\vspace{1cm} - {\scshape\LARGE OpenPGP Card Application \par} - {\scshape \LARGE User Guide \par} - \vspace{1cm} - -% {\scshape\Large Ledger SAS \par} - \vspace{1cm} - \begin{figure}[h] - \includegraphics{../common/LogoLedgerV.png} - \centering - \end{figure} - {\Large\itshape Cédric Mesnil (cedric@ledger.fr)\par} - \vfill - -% Bottom of the page - {\large \today\par} -\end{titlepage} - - - -$if(abstract)$ -\begin{abstract} -$abstract$ -\end{abstract} -$endif$ - -$for(include-before)$ -$include-before$ - -$endfor$ -$if(toc)$ -{ -$if(colorlinks)$ -\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$} -$endif$ -\setcounter{tocdepth}{$toc-depth$} -\tableofcontents -} -$endif$ -$if(lot)$ -\listoftables -$endif$ -$if(lof)$ -\listoffigures -$endif$ -$body$ - -$if(natbib)$ -$if(bibliography)$ -$if(biblio-title)$ -$if(book-class)$ -\renewcommand\bibname{$biblio-title$} -$else$ -\renewcommand\refname{$biblio-title$} -$endif$ -$endif$ -\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} - -$endif$ -$endif$ -$if(biblatex)$ -\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ - -$endif$ -$for(include-after)$ -$include-after$ - -$endfor$ -\end{document} diff --git a/doc/user/generate.sh b/doc/user/generate.sh deleted file mode 100755 index a511592..0000000 --- a/doc/user/generate.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -NAME=blue-app-openpgp-card - -rm -f ${NAME}.pdf - -OUTPUT_FORMAT=rst+smart - -pandoc -s --template=${NAME}.template -f ${OUTPUT_FORMAT} -V geometry:a4paper -V geometry:margin=1in -V fontsize=10pt -t latex --toc -N -o ${NAME}.pdf ${NAME}.rst diff --git a/doc/user/template.latex b/doc/user/template.latex new file mode 100644 index 0000000..c072c7a --- /dev/null +++ b/doc/user/template.latex @@ -0,0 +1,520 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor} +$endif$ +$if(dir)$ +$if(latex-dir-rtl)$ +\PassOptionsToPackage{RTLdocument}{bidi} +$endif$ +$endif$ +$if(CJKmainfont)$ +\PassOptionsToPackage{space}{xeCJK} +$endif$ +% +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(lang)$ + $babel-lang$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$if(beamer)$ + ignorenonframetext, +$if(handout)$ + handout, +$endif$ +$if(aspectratio)$ + aspectratio=$aspectratio$, +$endif$ +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ + \centering + \begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par + \end{beamercolorbox} +} +\setbeamertemplate{section page}{ + \centering + \begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par + \end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ + \centering + \begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par + \end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{pifont} +\usepackage{newunicodechar} +\newunicodechar{✓}{\ding{51}} +\newunicodechar{✗}{\ding{55}} +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifxetex + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifluatex + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifluatex + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + filecolor=$if(filecolor)$$filecolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + hidelinks, +$endif$ + pdfcreator={LaTeX via pandoc}} +\urlstyle{same} % disable monospaced font for URLs +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +$if(geometry)$ +$if(beamer)$ +\geometry{$for(geometry)$$geometry$$sep$,$endfor$} +$else$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$if(beamer)$ +\usepackage{caption} +% Make caption package work with longtable +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% Avoid problems with \sout in headers with hyperref +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +\ifxetex + % Load polyglossia as late as possible: uses bidi with RTL languages (e.g. Hebrew, Arabic) + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\else + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\fi +$endif$ +$if(dir)$ +\ifxetex + % Load bidi as late as possible as it modifies e.g. graphicx + \usepackage{bidi} +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(csl-refs)$ +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newenvironment{cslreferences}% + {$if(csl-hanging-indent)$\setlength{\parindent}{0pt}% + \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces$endif$}% + {\par} +$endif$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ +\author{$for(author)$$author$$sep$ \and $endfor$} +\date{$date$} +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + +\begin{document} + +\begin{titlepage} + \centering + {\scshape\Huge OpenPGP Card Application \par} + {\scshape \huge User Guide \par} + \vspace{1cm} + + {\scshape\LARGE Ledger SAS \par} + \vspace{2cm} + + \includegraphics{../LogoLedger.png} + + \vspace{1cm} + {\Large\itshape\url {https://github.com/LedgerHQ/app-openpgp}\par} + + \vfill + {\large \today\par} +\end{titlepage} + +$if(has-frontmatter)$ +\frontmatter +$endif$ +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$else$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks] +$if(toc-title)$ + \frametitle{$toc-title$} +$endif$ + \tableofcontents[hideallsubsections] +\end{frame} +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(has-chapters)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue +$endif$ + \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue + \printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} From 91cdd1f89022544cc88e52a9781ce407ca3aaf67 Mon Sep 17 00:00:00 2001 From: Sarah Gliner <105934250+sgliner-ledger@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:23:59 +0100 Subject: [PATCH 30/75] [auto] Update screenshot --- .github/PULL_REQUEST_TEMPLATE.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 58eb2e1..f2fb620 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,12 +1,8 @@ # Checklist - - - [ ] App update process has been followed - [ ] Target branch is `develop` - [ ] Application version has been bumped - + From a36e567524e02523c509b07c02cbbef233dea1be Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 22 Feb 2024 19:26:54 +0100 Subject: [PATCH 31/75] Re-align with latest Stax SDK update --- Makefile | 1 - src/gpg_ux_nbgl.c | 271 ---------------------------------------------- 2 files changed, 272 deletions(-) diff --git a/Makefile b/Makefile index b4d5d46..882daf7 100644 --- a/Makefile +++ b/Makefile @@ -122,7 +122,6 @@ DISABLE_STANDARD_WEBUSB = 1 DEFINES += CUSTOM_IO_APDU_BUFFER_SIZE=\(255+5+64\) DEFINES += HAVE_USB_CLASS_CCID DEFINES += HAVE_RSA -DEFINES += WAIT_NEXT_SDK ifeq ($(TARGET_NAME),TARGET_NANOS) DEFINES += HAVE_UX_LEGACY diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index e4aa689..c6c8436 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -823,276 +823,6 @@ enum { static void ui_menu_pinentry_cb(void); -#ifdef WAIT_NEXT_SDK -static void setPinCodeText(bool add) { - bool enableValidate, enableBackspace, enableDigits; - bool redrawKeypad = false; - uint8_t minLen; - nbgl_refresh_mode_t mode = BLACK_AND_WHITE_FAST_REFRESH; - - minLen = (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? GPG_MIN_PW3_LENGTH : GPG_MIN_PW1_LENGTH; - enableDigits = (G_gpg_vstate.pinLen < GPG_MAX_PW_LENGTH); - enableValidate = (G_gpg_vstate.pinLen >= minLen); - enableBackspace = (G_gpg_vstate.pinLen > 0); - if (add) { - if ((G_gpg_vstate.pinLen == minLen) || // activate "validate" button on keypad - (G_gpg_vstate.pinLen == GPG_MAX_PW_LENGTH) || // deactivate "digits" on keypad - (G_gpg_vstate.pinLen == 1)) { // activate "backspace" - redrawKeypad = true; - } - } else { // remove - if ((G_gpg_vstate.pinLen == 0) || // deactivate "backspace" button on keypad - (G_gpg_vstate.pinLen == (minLen - 1)) || // deactivate "validate" button on keypad - (G_gpg_vstate.pinLen == (GPG_MAX_PW_LENGTH - 1))) { // reactivate "digits" on keypad - redrawKeypad = true; - } - } - nbgl_layoutUpdateHiddenDigits(G_gpg_vstate.layoutCtx, - G_gpg_vstate.hiddenDigitsIndex, - G_gpg_vstate.pinLen); - if (redrawKeypad) { - nbgl_layoutUpdateKeypad(G_gpg_vstate.layoutCtx, - G_gpg_vstate.keypadIndex, - enableValidate, - enableBackspace, - enableDigits); - } - - if ((!add) && (G_gpg_vstate.pinLen == 0)) { - // Full refresh to fully clean the bullets when reaching 0 digits - mode = FULL_COLOR_REFRESH; - } - nbgl_refreshSpecialWithPostRefresh(mode, POST_REFRESH_FORCE_POWER_ON); -} - -static void validate_pin(void) { - unsigned int sw = SW_UNKNOWN; - unsigned int len1 = 0; - unsigned char* pin1 = NULL; - gpg_pin_t* pin = NULL; - - switch (G_gpg_vstate.io_ins) { - case INS_VERIFY: - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - sw = gpg_pin_check(pin, - G_gpg_vstate.io_p2, - G_gpg_vstate.ux_pinentry, - G_gpg_vstate.pinLen); - gpg_io_discard(1); - if (sw == SW_PIN_BLOCKED) { - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_info(PIN_LOCKED, EMPTY, ui_init, false); - break; - } else if (sw != SW_OK) { - snprintf(G_gpg_vstate.line, - sizeof(G_gpg_vstate.line), - "%d tries remaining", - pin->counter); - ui_info(WRONG_PIN, G_gpg_vstate.line, ui_menu_pinentry_cb, false); - break; - } - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - snprintf(G_gpg_vstate.line, - sizeof(G_gpg_vstate.line), - "%s PIN", - (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "ADMIN" : "USER"); - ui_info(G_gpg_vstate.line, "VERIFIED", ui_init, true); - break; - - case INS_CHANGE_REFERENCE_DATA: - switch (G_gpg_vstate.ux_step) { - case 0: - // Check Current pin code - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - sw = gpg_pin_check(pin, - G_gpg_vstate.io_p2, - G_gpg_vstate.ux_pinentry, - G_gpg_vstate.pinLen); - gpg_io_discard(1); - if (sw == SW_PIN_BLOCKED) { - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_info(PIN_LOCKED, EMPTY, ui_init, false); - break; - } else if (sw != SW_OK) { - snprintf(G_gpg_vstate.line, - sizeof(G_gpg_vstate.line), - " %d tries remaining", - pin->counter); - ui_info(WRONG_PIN, G_gpg_vstate.line, ui_menu_pinentry_cb, false); - break; - } - ui_menu_pinentry_display(++G_gpg_vstate.ux_step); - break; - case 1: - // Store the New pin codes - gpg_io_insert_u8(G_gpg_vstate.pinLen); - gpg_io_insert(G_gpg_vstate.ux_pinentry, G_gpg_vstate.pinLen); - ui_menu_pinentry_display(++G_gpg_vstate.ux_step); - break; - case 2: - // Compare the 2 pin codes (New + Confirm) - len1 = G_gpg_vstate.work.io_buffer[0]; - pin1 = G_gpg_vstate.work.io_buffer + 1; - if ((len1 != G_gpg_vstate.pinLen) || - (memcmp(pin1, G_gpg_vstate.ux_pinentry, G_gpg_vstate.pinLen) != 0)) { - gpg_io_discard(1); - ui_info(PIN_DIFFERS, EMPTY, ui_menu_pinentry_cb, false); - } else { - pin = gpg_pin_get_pin(G_gpg_vstate.io_p2); - sw = gpg_pin_set(pin, G_gpg_vstate.work.io_buffer + 1, G_gpg_vstate.pinLen); - gpg_io_discard(1); - gpg_io_insert_u16(sw); - gpg_io_do(IO_RETURN_AFTER_TX); - if (sw != SW_OK) { - ui_info("Process Error", EMPTY, ui_init, false); - } else { - snprintf(G_gpg_vstate.line, - sizeof(G_gpg_vstate.line), - "%s PIN", - (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "ADMIN" : "USER"); - ui_info(G_gpg_vstate.line, "CHANGED", ui_init, true); - } - } - break; - default: - break; - } - break; - - default: - break; - } -} - -static void keypad_cb(char touchedKey) { - switch (touchedKey) { - case BACKSPACE_KEY: - if (G_gpg_vstate.pinLen > 0) { - G_gpg_vstate.pinLen--; - G_gpg_vstate.ux_pinentry[G_gpg_vstate.pinLen] = 0; - } - setPinCodeText(false); - break; - - case VALIDATE_KEY: - // Gray out keyboard / buttons as a first user feedback - nbgl_layoutUpdateKeypad(G_gpg_vstate.layoutCtx, - G_gpg_vstate.keypadIndex, - false, - false, - true); - nbgl_refreshSpecialWithPostRefresh(BLACK_AND_WHITE_FAST_REFRESH, - POST_REFRESH_FORCE_POWER_ON); - - validate_pin(); - break; - - default: - if ((touchedKey >= 0x30) && (touchedKey < 0x40)) { - if (G_gpg_vstate.pinLen < GPG_MAX_PW_LENGTH) { - G_gpg_vstate.ux_pinentry[G_gpg_vstate.pinLen] = touchedKey; - G_gpg_vstate.pinLen++; - } - setPinCodeText(true); - } - break; - } -} - -static void pinentry_cb(int token, uint8_t index) { - UNUSED(index); - if (token == TOKEN_PIN_ENTRY_BACK) { - gpg_io_discard(0); - gpg_io_insert_u16(SW_CONDITIONS_NOT_SATISFIED); - gpg_io_do(IO_RETURN_AFTER_TX); - ui_init(); - } -} - -void ui_menu_pinentry_display(unsigned int value) { - nbgl_layoutDescription_t layoutDescription = {0}; - nbgl_layoutCenteredInfo_t centeredInfo = {0}; - int status = -1; - - // reset the pin buffer - memset(G_gpg_vstate.ux_pinentry, 0, sizeof(G_gpg_vstate.ux_pinentry)); - G_gpg_vstate.pinLen = 0; - - layoutDescription.onActionCallback = pinentry_cb; - layoutDescription.modal = false; - layoutDescription.withLeftBorder = false; - G_gpg_vstate.layoutCtx = nbgl_layoutGet(&layoutDescription); - - nbgl_layoutAddProgressIndicator(G_gpg_vstate.layoutCtx, - 0, - 0, - true, - TOKEN_PIN_ENTRY_BACK, - TUNE_TAP_CASUAL); - - memset(G_gpg_vstate.line, 0, sizeof(G_gpg_vstate.line)); - if (G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) { - switch (value) { - case 0: - // Default or initial case - memmove(G_gpg_vstate.line, "Current", 7); - break; - case 1: - memmove(G_gpg_vstate.line, "New", 3); - break; - case 2: - memmove(G_gpg_vstate.line, "Confirm", 7); - break; - default: - break; - } - G_gpg_vstate.ux_step = value; - } else { - memmove(G_gpg_vstate.line, "Enter", 5); - } - snprintf(G_gpg_vstate.menu, - sizeof(G_gpg_vstate.menu), - "%s %s PIN", - G_gpg_vstate.line, - (G_gpg_vstate.io_p2 == PIN_ID_PW3) ? "Admin" : "User"); - - // add description - centeredInfo.text1 = G_gpg_vstate.menu; - centeredInfo.style = LARGE_CASE_INFO; - centeredInfo.onTop = true; - nbgl_layoutAddCenteredInfo(G_gpg_vstate.layoutCtx, ¢eredInfo); - - // add keypad (Not shuffled pin) - status = nbgl_layoutAddKeypad(G_gpg_vstate.layoutCtx, keypad_cb, false); - if (status < 0) { - return; - } - G_gpg_vstate.keypadIndex = (unsigned int) status; - - // add hidden digits - GPG_MAX_PW_LENGTH (12) is not yet supported - status = nbgl_layoutAddHiddenDigits(G_gpg_vstate.layoutCtx, 10); - if (status < 0) { - return; - } - G_gpg_vstate.hiddenDigitsIndex = (unsigned int) status; - - nbgl_layoutDraw(G_gpg_vstate.layoutCtx); - nbgl_refreshSpecialWithPostRefresh(FULL_COLOR_CLEAN_REFRESH, POST_REFRESH_FORCE_POWER_ON); -} - -static void ui_menu_pinentry_cb(void) { - unsigned int value = 0; - - if ((G_gpg_vstate.io_ins == INS_CHANGE_REFERENCE_DATA) && (G_gpg_vstate.ux_step == 2)) { - // Current step is Change Password with PINs differ - value = 1; - } - ui_menu_pinentry_display(value); -} -#else static void validate_pin(const uint8_t* pinentry, uint8_t length) { unsigned int sw = SW_UNKNOWN; unsigned int len1 = 0; @@ -1250,7 +980,6 @@ static void ui_menu_pinentry_cb(void) { } ui_menu_pinentry_display(value); } -#endif /* ------------------------------ UIF CONFIRM UX ----------------------------- */ void uif_confirm_cb(bool confirm) { From 91f6692e4bcebe9b0eca84bb1cb67d92894b9f90 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 23 Feb 2024 11:53:57 +0100 Subject: [PATCH 32/75] Update version --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 882daf7..ba43dbc 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ APPNAME = OpenPGP # Application version APPVERSION_M = 2 APPVERSION_N = 0 -APPVERSION_P = 0 +APPVERSION_P = 1 APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" SPECVERSION:="3.3.1" From 9e7453e50ac522228836868f844e00eb62e02063 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 22 Feb 2024 19:27:49 +0100 Subject: [PATCH 33/75] Add more explanation on Seed mode usage --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 6b3474f..cee34ea 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,23 @@ Also, a backup/restore mechanism is provided. Please report to the [Documentatio > Warning: Without such configuration, an OS or App update will cause your private key to be lost!" +The following is a repeatable process that will generate the same keys and fingerprints +(even with different card serial numbers). + +1. Reset the OpenPGP App +1. Set Key Templates from the OpenPGP App menu, if needed +1. On computer, use `gpg` to edit the key with a fixed timestamp: + +```shell +gpg --faked-system-time 19990101T000000! --card-edit # note the exclamation mark to keep the time fixed +gpg> admin +gpg> generate +... # complete the wizard +``` + +While doing this, ensure that you use the same `--faked-system-time` and "Real Name" and "Email" +during the generation wizard to reproduce the same keys each time. + ### On screen reset The application can be reset as if it was fresh installed. In settings, choose reset and confirm. From 2969c0e1502703fdab9e9d3728689b3589ecac09 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 23 Feb 2024 09:37:51 +0100 Subject: [PATCH 34/75] Fix Historical Bytes Status Indicator value --- src/gpg_types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpg_types.h b/src/gpg_types.h index d79c073..9d09fb9 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -294,7 +294,7 @@ typedef struct gpg_v_state_s gpg_v_state_t; /* --- Identifiers --- */ -#define STATE_ACTIVATE 0x07 +#define STATE_ACTIVATE 0x05 #define STATE_TERMINATE 0x03 #define IO_OFFSET_END (unsigned int) -1 From 7d68daf254c4be77ffa8e7b3ae1c4710ab8e74d7 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 23 Feb 2024 09:39:12 +0100 Subject: [PATCH 35/75] Fix Historical Bytes buffer with correct padding --- src/gpg_data.c | 4 ++-- src/gpg_dispatch.c | 4 ++-- src/gpg_init.c | 13 +++++++++---- src/gpg_select.c | 2 +- src/gpg_types.h | 4 +++- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index fe6fc37..8915e13 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -80,7 +80,7 @@ int gpg_apdu_get_data(unsigned int ref) { break; case 0x5F52: /* Historical bytes */ - gpg_io_insert((const unsigned char *) N_gpg_pstate->histo, 15); + gpg_io_insert((const unsigned char *) N_gpg_pstate->histo, HISTO_LENGTH); break; case 0x7F66: /* Extended length information */ @@ -115,7 +115,7 @@ int gpg_apdu_get_data(unsigned int ref) { memmove(G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset - 6, G_gpg_vstate.kslot->serial, 4); - gpg_io_insert_tlv(0x5F52, 15, (const unsigned char *) N_gpg_pstate->histo); + gpg_io_insert_tlv(0x5F52, HISTO_LENGTH, (const unsigned char *) N_gpg_pstate->histo); gpg_io_insert_tlv(0x7F66, sizeof(C_ext_length), C_ext_length); gpg_io_mark(); diff --git a/src/gpg_dispatch.c b/src/gpg_dispatch.c index 74fe471..847fc20 100644 --- a/src/gpg_dispatch.c +++ b/src/gpg_dispatch.c @@ -254,7 +254,7 @@ int gpg_dispatch() { /* --- ACTIVATE/TERMINATE FILE --- */ case INS_ACTIVATE_FILE: gpg_io_discard(0); - if (N_gpg_pstate->histo[7] == STATE_TERMINATE) { + if (N_gpg_pstate->histo[HISTO_OFFSET_STATE] == STATE_TERMINATE) { gpg_install(STATE_ACTIVATE); } return SW_OK; @@ -272,7 +272,7 @@ int gpg_dispatch() { } /* Other commands allowed if not terminated */ - if (N_gpg_pstate->histo[7] != STATE_ACTIVATE) { + if (N_gpg_pstate->histo[HISTO_OFFSET_STATE] != STATE_ACTIVATE) { return SW_STATE_TERMINATED; } diff --git a/src/gpg_init.c b/src/gpg_init.c index 37c0e9c..43cbfd5 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -261,7 +261,7 @@ const unsigned char C_default_AID[] = { 0x00, 0x00}; -const unsigned char C_default_Histo[] = { +const unsigned char C_default_Histo[HISTO_LENGTH] = { 0x00, 0x31, 0xC5, // select method: by DF/partialDF; IO-file:readbinary; RFU??? @@ -269,6 +269,11 @@ const unsigned char C_default_Histo[] = { 0xC0, // select method: by DF/partialDF , 0x01, // data coding style: ontime/byte 0x80, // chaining + 0x00, // Padding zero bytes + 0x00, + 0x00, + 0x00, + 0x00, 0x7F, // zero state 0x90, 0x00}; @@ -408,9 +413,9 @@ void gpg_install(unsigned char app_state) { nvm_write((void *) (N_gpg_pstate), NULL, sizeof(gpg_nv_state_t)); // historical bytes - memmove(G_gpg_vstate.work.io_buffer, C_default_Histo, sizeof(C_default_Histo)); - G_gpg_vstate.work.io_buffer[7] = app_state; - nvm_write((void *) (N_gpg_pstate->histo), G_gpg_vstate.work.io_buffer, sizeof(C_default_Histo)); + memmove(G_gpg_vstate.work.io_buffer, C_default_Histo, HISTO_LENGTH); + G_gpg_vstate.work.io_buffer[HISTO_OFFSET_STATE] = app_state; + nvm_write((void *) (N_gpg_pstate->histo), G_gpg_vstate.work.io_buffer, HISTO_LENGTH); // AID memmove(G_gpg_vstate.work.io_buffer, C_default_AID, sizeof(C_default_AID)); diff --git a/src/gpg_select.c b/src/gpg_select.c index af68837..32b5207 100644 --- a/src/gpg_select.c +++ b/src/gpg_select.c @@ -51,7 +51,7 @@ int gpg_apdu_select() { } gpg_io_discard(0); - if (N_gpg_pstate->histo[7] != STATE_ACTIVATE) { + if (N_gpg_pstate->histo[HISTO_OFFSET_STATE] != STATE_ACTIVATE) { sw = SW_STATE_TERMINATED; } else { sw = SW_OK; diff --git a/src/gpg_types.h b/src/gpg_types.h index 9d09fb9..34a4ba4 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -41,6 +41,8 @@ #define GPG_MIN_PW1_LENGTH 6 #define GPG_MIN_PW3_LENGTH 8 +#define HISTO_LENGTH 15 +#define HISTO_OFFSET_STATE 12 // 3rd byte from last (buffer size is 15) #ifdef TARGET_NANOS #define GPG_KEYS_SLOTS 1 #else @@ -159,7 +161,7 @@ struct gpg_nv_state_s { /* 4F */ unsigned char AID[16]; /* 5F52 */ - unsigned char histo[15]; + unsigned char histo[HISTO_LENGTH]; /* C4 */ unsigned char PW_status[4]; From 285fbcfaf324d4284481a0692442c5a502bf2f31 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 23 Feb 2024 12:51:35 +0100 Subject: [PATCH 36/75] Allow verified PW1 or PW2 before changing pin mode --- src/gpg_ux_msg.c | 3 +-- src/gpg_ux_msg.h | 6 ++---- src/gpg_ux_nanos.c | 4 ++-- src/gpg_ux_nanox.c | 4 ++-- src/gpg_ux_nbgl.c | 17 +++++++++++------ 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/gpg_ux_msg.c b/src/gpg_ux_msg.c index 182d818..d1c3a2d 100644 --- a/src/gpg_ux_msg.c +++ b/src/gpg_ux_msg.c @@ -27,8 +27,7 @@ const char *const C_RIGHT_PIN = "PIN Correct"; const char *const C_PIN_CHANGED = "PIN changed"; const char *const C_PIN_LOCKED = "PIN locked"; const char *const C_PIN_DIFFERS = "2 PINs differs"; -const char *const C_PIN_USER_81 = "User PIN 0x81"; -const char *const C_PIN_USER_82 = "User PIN 0x82"; +const char *const C_PIN_USER = "User PIN"; const char *const C_PIN_ADMIN = "Admin PIN"; const char *const C_VERIFIED = "Verified"; diff --git a/src/gpg_ux_msg.h b/src/gpg_ux_msg.h index de81d81..a3e0a9f 100644 --- a/src/gpg_ux_msg.h +++ b/src/gpg_ux_msg.h @@ -30,8 +30,7 @@ extern const char *const C_RIGHT_PIN; extern const char *const C_PIN_CHANGED; extern const char *const C_PIN_LOCKED; extern const char *const C_PIN_DIFFERS; -extern const char *const C_PIN_USER_81; -extern const char *const C_PIN_USER_82; +extern const char *const C_PIN_USER; extern const char *const C_PIN_ADMIN; extern const char *const C_VERIFIED; @@ -57,8 +56,7 @@ extern const char *const C_EMPTY; #define PIN_CHANGED PICSTR(C_PIN_CHANGED) #define PIN_LOCKED PICSTR(C_PIN_LOCKED) #define PIN_DIFFERS PICSTR(C_PIN_DIFFERS) -#define PIN_USER_81 PICSTR(C_PIN_USER_81) -#define PIN_USER_82 PICSTR(C_PIN_USER_82) +#define PIN_USER PICSTR(C_PIN_USER) #define PIN_ADMIN PICSTR(C_PIN_ADMIN) #define VERIFIED PICSTR(C_VERIFIED) #define NOT_VERIFIED PICSTR(C_NOT_VERIFIED) diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 3ab355a..abfec68 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -830,8 +830,8 @@ void ui_menu_pinmode_action(unsigned int value) { value++; break; } - if (!gpg_pin_is_verified(PIN_ID_PW2)) { - ui_info(PIN_USER_82, NOT_VERIFIED, ui_menu_pinmode_display, 0); + if ((gpg_pin_is_verified(PIN_ID_PW1) == 0) && (gpg_pin_is_verified(PIN_ID_PW2) == 0)) { + ui_info(PIN_USER, NOT_VERIFIED, ui_menu_pinmode_display, 0); return; } G_gpg_vstate.pinmode = value; diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 790eb59..909f2b7 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -870,8 +870,8 @@ void ui_menu_pinmode_action(unsigned int value) { // Current selected mode break; } - if (!gpg_pin_is_verified(PIN_ID_PW2)) { - ui_info(PIN_USER_82, NOT_VERIFIED); + if ((gpg_pin_is_verified(PIN_ID_PW1) == 0) && (gpg_pin_is_verified(PIN_ID_PW2) == 0)) { + ui_info(PIN_USER, NOT_VERIFIED); return; } G_gpg_vstate.pinmode = value; diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index c6c8436..55055c9 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -499,24 +499,29 @@ void trust_cb(bool confirm) { static void pin_cb(int token, uint8_t index) { const char* err = NULL; - int pin = 0; switch (token) { case TOKEN_PIN_BACK: ui_menu_settings(); break; case TOKEN_PIN_SET: + if (G_gpg_vstate.pinmode == index) { + break; + } switch (index) { case PIN_MODE_SCREEN: case PIN_MODE_CONFIRM: - pin = PIN_ID_PW2; - err = PIN_USER_82; + if ((gpg_pin_is_verified(PIN_ID_PW1) == 0) && + (gpg_pin_is_verified(PIN_ID_PW2) == 0)) { + err = PIN_USER; + } break; case PIN_MODE_TRUST: - pin = PIN_ID_PW3; - err = PIN_ADMIN; + if (gpg_pin_is_verified(PIN_ID_PW3) == 0) { + err = PIN_ADMIN; + } break; } - if (!gpg_pin_is_verified(pin)) { + if (err != NULL) { ui_info(err, NOT_VERIFIED, ui_settings_pin, false); break; } From 4390142ffa9da91a55548e8af182929144e57c1d Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 26 Feb 2024 11:05:34 +0100 Subject: [PATCH 37/75] Fix EC templates on Stax --- src/gpg_ux_nbgl.c | 135 ++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 72 deletions(-) diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index 55055c9..bf21e71 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -280,82 +280,73 @@ static void template_key_cb(int token, uint8_t index) { uint32_t size = 0; uint8_t key_type = index + FIRST_USER_TOKEN; - switch (token) { - case TOKEN_TYPE_BACK: - break; - case TOKEN_TYPE_RSA2048: - case TOKEN_TYPE_RSA3072: - case TOKEN_TYPE_RSA4096: - case TOKEN_TYPE_SECP256K1: - case TOKEN_TYPE_Ed25519: - memset(&attributes, 0, sizeof(attributes)); - switch (key_type) { - case TOKEN_TYPE_RSA2048: - case TOKEN_TYPE_RSA3072: - case TOKEN_TYPE_RSA4096: - switch (key_type) { - case TOKEN_TYPE_RSA2048: - size = 2048; - break; - case TOKEN_TYPE_RSA3072: - size = 3072; - break; - case TOKEN_TYPE_RSA4096: - size = 4096; - break; - } - attributes.value[0] = KEY_ID_RSA; - U2BE_ENCODE(attributes.value, 1, size); - attributes.value[3] = 0x00; - attributes.value[4] = 0x20; - attributes.value[5] = 0x01; - attributes.length = 6; - oid_len = 6; - break; + if (token != TOKEN_TYPE_BACK) { + memset(&attributes, 0, sizeof(attributes)); + switch (key_type) { + case TOKEN_TYPE_RSA2048: + case TOKEN_TYPE_RSA3072: + case TOKEN_TYPE_RSA4096: + switch (key_type) { + case TOKEN_TYPE_RSA2048: + size = 2048; + break; + case TOKEN_TYPE_RSA3072: + size = 3072; + break; + case TOKEN_TYPE_RSA4096: + size = 4096; + break; + } + attributes.value[0] = KEY_ID_RSA; + U2BE_ENCODE(attributes.value, 1, size); + attributes.value[3] = 0x00; + attributes.value[4] = 0x20; + attributes.value[5] = 0x01; + attributes.length = 6; + oid_len = 6; + break; - case TOKEN_TYPE_SECP256K1: - if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { - attributes.value[0] = KEY_ID_ECDH; - } else { - attributes.value[0] = KEY_ID_ECDSA; - } - oid = gpg_curve2oid(CX_CURVE_SECP256R1, &oid_len); - memmove(attributes.value + 1, oid, sizeof(oid_len)); - attributes.length = 1 + oid_len; - break; + case TOKEN_TYPE_SECP256K1: + if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { + attributes.value[0] = KEY_ID_ECDH; + } else { + attributes.value[0] = KEY_ID_ECDSA; + } + oid = gpg_curve2oid(CX_CURVE_SECP256R1, &oid_len); + memmove(attributes.value + 1, oid, oid_len); + attributes.length = 1 + oid_len; + break; - case TOKEN_TYPE_Ed25519: - if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { - attributes.value[0] = KEY_ID_ECDH; - oid = gpg_curve2oid(CX_CURVE_Curve25519, &oid_len); - } else { - attributes.value[0] = KEY_ID_EDDSA; - oid = gpg_curve2oid(CX_CURVE_Ed25519, &oid_len); - } - memmove(attributes.value + 1, oid, sizeof(oid_len)); - attributes.length = 1 + oid_len; - break; - } + case TOKEN_TYPE_Ed25519: + if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { + attributes.value[0] = KEY_ID_ECDH; + oid = gpg_curve2oid(CX_CURVE_Curve25519, &oid_len); + } else { + attributes.value[0] = KEY_ID_EDDSA; + oid = gpg_curve2oid(CX_CURVE_Ed25519, &oid_len); + } + memmove(attributes.value + 1, oid, oid_len); + attributes.length = 1 + oid_len; + break; + } - switch (G_gpg_vstate.ux_key) { - case TOKEN_TEMPLATE_SIG: - dest = &G_gpg_vstate.kslot->sig; - break; - case TOKEN_TEMPLATE_DEC: - dest = &G_gpg_vstate.kslot->dec; - break; - case TOKEN_TEMPLATE_AUT: - dest = &G_gpg_vstate.kslot->aut; - break; - } + switch (G_gpg_vstate.ux_key) { + case TOKEN_TEMPLATE_SIG: + dest = &G_gpg_vstate.kslot->sig; + break; + case TOKEN_TEMPLATE_DEC: + dest = &G_gpg_vstate.kslot->dec; + break; + case TOKEN_TEMPLATE_AUT: + dest = &G_gpg_vstate.kslot->aut; + break; + } - if (dest && attributes.value[0] && - memcmp(&dest->attributes, &attributes, sizeof(attributes)) != 0) { - PRINTF("TEMPLATE NVM_WRITE!!!!!\n"); - nvm_write(dest, NULL, sizeof(gpg_key_t)); - nvm_write(&dest->attributes, &attributes, sizeof(attributes)); - } - break; + if (dest && attributes.value[0] && + memcmp(&dest->attributes, &attributes, sizeof(attributes)) != 0) { + nvm_write(dest, NULL, sizeof(gpg_key_t)); + nvm_write(&dest->attributes, &attributes, sizeof(attributes)); + } } ui_settings_template(); } From 00a23dd7ad16bcb106881190c6ff0ec05ffc0045 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 26 Feb 2024 16:07:19 +0100 Subject: [PATCH 38/75] Fix mypy on ragger tests --- tests/test_seed.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/tests/test_seed.py b/tests/test_seed.py index ff6cb60..cf15194 100644 --- a/tests/test_seed.py +++ b/tests/test_seed.py @@ -6,7 +6,6 @@ """ import sys import pytest -from Crypto.PublicKey import RSA, ECC from application_client.command_sender import CommandSender from application_client.app_def import Errors, DataObject, PassWord, PubkeyAlgo @@ -15,7 +14,7 @@ from utils import check_pincode, generate_key, get_key_attributes, KEY_TEMPLATES -def _gen_key(client: CommandSender, template: str) -> RSA.RsaKey | ECC.EccKey: +def _gen_key(client: CommandSender, template: str): # Verify PW3 (Admin) check_pincode(client, PassWord.PW3) @@ -31,15 +30,13 @@ def _gen_key(client: CommandSender, template: str) -> RSA.RsaKey | ECC.EccKey: # Read the SIG pub Key if key_algo == PubkeyAlgo.RSA: - pubkey: RSA.RsaKey = get_RSA_pub_key(client, DataObject.DO_SIG_KEY) - elif key_algo == PubkeyAlgo.ECDSA: - pubkey: ECC.EccKey = get_ECDSA_pub_key(client, DataObject.DO_SIG_KEY) - elif key_algo == PubkeyAlgo.EDDSA: - pubkey: ECC.EccKey = get_EDDSA_pub_key(client, DataObject.DO_SIG_KEY) - else: - raise ValueError - - return pubkey + return get_RSA_pub_key(client, DataObject.DO_SIG_KEY) + if key_algo == PubkeyAlgo.ECDSA: + return get_ECDSA_pub_key(client, DataObject.DO_SIG_KEY) + if key_algo == PubkeyAlgo.EDDSA: + return get_EDDSA_pub_key(client, DataObject.DO_SIG_KEY) + + raise ValueError @pytest.mark.parametrize( From f49c57442801b5f76c8e0e7a45c22b90fd0753dc Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Feb 2024 16:38:35 +0100 Subject: [PATCH 39/75] custo & formatting --- src/gpg_data.c | 23 +++++++++-------------- src/gpg_gen.c | 4 ---- src/gpg_init.c | 6 +++--- src/gpg_pso.c | 6 ++---- src/gpg_ux_nanox.c | 2 +- src/gpg_ux_nbgl.c | 1 - 6 files changed, 15 insertions(+), 27 deletions(-) diff --git a/src/gpg_data.c b/src/gpg_data.c index 8915e13..ad47c59 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -395,7 +395,6 @@ int gpg_apdu_put_data(unsigned int ref) { break; } - // --- RSA KEY --- if (keygpg->attributes.value[0] == KEY_ID_RSA) { unsigned int e = 0; unsigned char *p, *q, *pq; @@ -476,14 +475,13 @@ int gpg_apdu_put_data(unsigned int ref) { } sw = SW_OK; } - // --- ECC KEY --- else if ((keygpg->attributes.value[0] == KEY_ID_ECDH) || (keygpg->attributes.value[0] == KEY_ID_ECDSA) || (keygpg->attributes.value[0] == KEY_ID_EDDSA)) { unsigned int curve; curve = gpg_oid2curve(&keygpg->attributes.value[1], keygpg->attributes.length - 1); - if (curve == 0) { + if (curve == CX_CURVE_NONE) { sw = SW_WRONG_DATA; break; } @@ -801,8 +799,8 @@ static int gpg_init_keyenc(cx_aes_key_t *keyenc) { // cmd // resp TID API COMPAT len_pub len_priv priv int gpg_apdu_get_key_data(unsigned int ref) { - cx_aes_key_t keyenc; - gpg_key_t *keygpg; + cx_aes_key_t keyenc = {0}; + gpg_key_t *keygpg = NULL; unsigned int len = 0; cx_err_t error = CX_INTERNAL_ERROR; int sw = SW_UNKNOWN; @@ -832,7 +830,7 @@ int gpg_apdu_get_key_data(unsigned int ref) { // encrypted part switch (keygpg->attributes.value[0]) { - case KEY_ID_RSA: // RSA + case KEY_ID_RSA: // insert pubkey gpg_io_insert_u32(4); gpg_io_insert(keygpg->pub_key.rsa, 4); @@ -853,7 +851,7 @@ int gpg_apdu_get_key_data(unsigned int ref) { sw = SW_OK; break; - case KEY_ID_ECDH: // ECC + case KEY_ID_ECDH: case KEY_ID_ECDSA: case KEY_ID_EDDSA: // insert pubkey @@ -889,10 +887,9 @@ int gpg_apdu_get_key_data(unsigned int ref) { // cmd TID API COMPAT len_pub len_priv priv // resp - int gpg_apdu_put_key_data(unsigned int ref) { - cx_aes_key_t keyenc; - gpg_key_t *keygpg; - unsigned int len; - unsigned int offset; + cx_aes_key_t keyenc = {0}; + gpg_key_t *keygpg = NULL; + unsigned int len = 0; cx_err_t error = CX_INTERNAL_ERROR; int sw = SW_UNKNOWN; @@ -920,7 +917,6 @@ int gpg_apdu_put_key_data(unsigned int ref) { gpg_io_fetch_u32(); switch (keygpg->attributes.value[0]) { - // RSA case KEY_ID_RSA: // insert pubkey len = gpg_io_fetch_u32(); @@ -955,8 +951,7 @@ int gpg_apdu_put_key_data(unsigned int ref) { sw = SW_OK; break; - // ECC - case KEY_ID_ECDH: // ECC + case KEY_ID_ECDH: case KEY_ID_ECDSA: case KEY_ID_EDDSA: // insert pubkey diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 17f4864..5327cc3 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -304,7 +304,6 @@ int gpg_apdu_gen() { case GEN_ASYM_KEY_SEED: if (keygpg->attributes.value[0] == KEY_ID_RSA) { - // RSA sw = gpg_gen_rsa_kyey(keygpg, name); if (sw != SW_OK) { break; @@ -312,7 +311,6 @@ int gpg_apdu_gen() { } else if ((keygpg->attributes.value[0] == KEY_ID_ECDH) || (keygpg->attributes.value[0] == KEY_ID_ECDSA) || (keygpg->attributes.value[0] == KEY_ID_EDDSA)) { - // ECC sw = gpg_gen_ecc_kyey(keygpg, name); if (sw != SW_OK) { break; @@ -323,12 +321,10 @@ int gpg_apdu_gen() { // --- read pubkey --- case READ_ASYM_KEY: if (keygpg->attributes.value[0] == KEY_ID_RSA) { - // read RSA sw = gpg_read_rsa_kyey(keygpg); } else if ((keygpg->attributes.value[0] == KEY_ID_ECDH) || (keygpg->attributes.value[0] == KEY_ID_ECDSA) || (keygpg->attributes.value[0] == KEY_ID_EDDSA)) { - // read ECC sw = gpg_read_ecc_kyey(keygpg); } l = G_gpg_vstate.io_length; diff --git a/src/gpg_init.c b/src/gpg_init.c index 43cbfd5..1cd4185 100644 --- a/src/gpg_init.c +++ b/src/gpg_init.c @@ -56,7 +56,7 @@ const unsigned char C_OID_BRAINPOOL256T1[9] = { const unsigned char C_OID_BRAINPOOL256R1[9] = { 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x08 }; -//brainpool 284r1: 1.3.36.3.3.2.8.1.1.11 +//brainpool 384r1: 1.3.36.3.3.2.8.1.1.11 const unsigned char C_OID_BRAINPOOL384R1[9] = { 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0B }; @@ -66,7 +66,7 @@ const unsigned char C_OID_BRAINPOOL512R1[9] = { }; */ -// Ed25519/curve25519: 1.3.6.1.4.1.11591.15.1 +// "twisted" curve25519 for Ed25519: 1.3.6.1.4.1.11591.15.1 const unsigned char C_OID_Ed25519[9] = { 0x2B, 0x06, @@ -79,7 +79,7 @@ const unsigned char C_OID_Ed25519[9] = { 0x01, }; -// Ed25519/curve25519: 1.3.6.1.4.1.11591.15.1 +// "Montgomery" curve25519 for X25519: 1.3.6.1.4.1.11591.1.5.1 const unsigned char C_OID_cv25519[10] = { 0x2B, 0x06, diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 7d92b8f..7977b27 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -65,7 +65,6 @@ static void gpg_pso_reset_PW1() { } static int gpg_sign(gpg_key_t *sigkey) { - // --- RSA cx_err_t error = CX_INTERNAL_ERROR; if (sigkey->attributes.value[0] == KEY_ID_RSA) { cx_rsa_private_key_t *key = NULL; @@ -113,7 +112,6 @@ static int gpg_sign(gpg_key_t *sigkey) { gpg_pso_reset_PW1(); return SW_OK; } - // --- ECDSA/EdDSA if ((sigkey->attributes.value[0] == KEY_ID_ECDSA) || (sigkey->attributes.value[0] == KEY_ID_EDDSA)) { cx_ecfp_private_key_t *key; @@ -223,7 +221,7 @@ int gpg_apdu_pso() { // --- PSO:ENC --- case PSO_ENC: { unsigned int msg_len; - cx_aes_key_t *key; + cx_aes_key_t *key = NULL; key = &G_gpg_vstate.kslot->AES_dec; if (!(key->size != 16)) { return SW_CONDITIONS_NOT_SATISFIED; @@ -252,7 +250,7 @@ int gpg_apdu_pso() { switch (pad_byte) { // --- PSO:DEC:RSA case 0x00: { - cx_rsa_private_key_t *key; + cx_rsa_private_key_t *key = NULL; if (G_gpg_vstate.mse_dec->attributes.value[0] != KEY_ID_RSA) { return SW_CONDITIONS_NOT_SATISFIED; } diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 909f2b7..89751bc 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -590,7 +590,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { UNUSED(value); LV(attributes, GPG_KEY_ATTRIBUTES_LENGTH); gpg_key_t *dest = NULL; - const unsigned char *oid; + const unsigned char *oid = NULL; unsigned int oid_len; memset(&attributes, 0, sizeof(attributes)); diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index bf21e71..d0acb70 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -237,7 +237,6 @@ static uint32_t _getKeyType(const uint8_t key) { } switch (attributes[0]) { case KEY_ID_RSA: - // RSA tag = U2BE(attributes, 1); switch (tag) { case 2048: From aa2d992ffc945411d97bf930e792508273507c96 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Feb 2024 16:55:40 +0100 Subject: [PATCH 40/75] Update test tool with advanced expert mode option --- manual-tests/manual.sh | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/manual-tests/manual.sh b/manual-tests/manual.sh index d81eb33..d882da9 100755 --- a/manual-tests/manual.sh +++ b/manual-tests/manual.sh @@ -10,6 +10,7 @@ dirName=$(dirname "${exeName}") gnupg_home_dir="$(realpath "${dirName}/gnupg")" VERBOSE=false +EXPERT=false #=============================================================================== # @@ -23,7 +24,8 @@ help() { echo echo "Options:" echo - echo " -c : Requested command" + echo " -c : Requested command" + echo " -e : Expert mode mode" echo " -v : Verbose mode" echo " -h : Displays this help" echo @@ -32,10 +34,10 @@ help() { #=============================================================================== # -# kill_process - Kill running process, ensure clear next operation +# reset - Kill running process, ensure clear next operation # #=============================================================================== -kill_process() { +reset() { # Kill running process killall scdaemon gpg-agent 2>/dev/null } @@ -46,7 +48,7 @@ kill_process() { # #=============================================================================== init() { - kill_process + reset # Cleanup old gnupg home directory dir=$(basename "${gnupg_home_dir}") @@ -68,8 +70,11 @@ init() { # #=============================================================================== card() { + local expert_mode="" - gpg --homedir "${gnupg_home_dir}" --card-edit + [[ ${EXPERT} == true ]] && expert_mode="--expert" + + gpg --homedir "${gnupg_home_dir}" ${expert_mode} --card-edit } #=============================================================================== @@ -79,7 +84,8 @@ card() { #=============================================================================== encrypt() { local recipient="" - kill_process + local verbose_mode="" + reset rm -fr foo* echo CLEAR > foo.txt @@ -98,8 +104,9 @@ encrypt() { # #=============================================================================== decrypt() { + local verbose_mode="" - kill_process + reset [[ ${VERBOSE} == true ]] && verbose_mode="--verbose" @@ -121,8 +128,9 @@ decrypt() { # #=============================================================================== sign() { + local verbose_mode="" - kill_process + reset rm -fr foo* echo CLEAR > foo.txt @@ -137,8 +145,9 @@ sign() { # #=============================================================================== verify() { + local verbose_mode="" - kill_process + reset [[ ${VERBOSE} == true ]] && verbose_mode="--verbose" @@ -156,12 +165,12 @@ if (($# < 1)); then help fi -while getopts ":c:vh" opt; do +while getopts ":c:evh" opt; do case $opt in c) case ${OPTARG} in - init|card|encrypt|decrypt|sign|verify) + init|reset|card|encrypt|decrypt|sign|verify) CMD=${OPTARG} ;; *) @@ -171,6 +180,7 @@ while getopts ":c:vh" opt; do esac ;; + e) EXPERT=true ;; v) VERBOSE=true ;; h) help ;; From 7205e9dcb50b5d2ce7562f16729a1d90fc7f2a00 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Feb 2024 17:31:12 +0100 Subject: [PATCH 41/75] Update Version to 2.1.0 --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ba43dbc..8a1e45c 100644 --- a/Makefile +++ b/Makefile @@ -29,8 +29,8 @@ APPNAME = OpenPGP # Application version APPVERSION_M = 2 -APPVERSION_N = 0 -APPVERSION_P = 1 +APPVERSION_N = 1 +APPVERSION_P = 0 APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" SPECVERSION:="3.3.1" From 69532fde5a7ec96bdeb5b8724e03ecd2a8c0c1e4 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Feb 2024 16:40:43 +0100 Subject: [PATCH 42/75] fix nistp256 template --- src/gpg_ux_nanos.c | 2 +- src/gpg_ux_nanox.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index abfec68..55870f9 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -621,7 +621,7 @@ void ui_menu_tmpl_set_action(unsigned int value) { attributes.value[0] = KEY_ID_ECDSA; } oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); - memmove(attributes.value + 1, oid, sizeof(oid_len)); + memmove(attributes.value + 1, oid, oid_len); attributes.length = 1 + oid_len; break; diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index 89751bc..e2b9342 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -607,13 +607,16 @@ void ui_menu_tmpl_set_action(unsigned int value) { break; case CX_CURVE_SECP256R1: + oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); + if (oid == NULL) { + break; + } if (G_gpg_vstate.ux_key == 2) { attributes.value[0] = KEY_ID_ECDH; } else { attributes.value[0] = KEY_ID_ECDSA; } - oid = gpg_curve2oid(G_gpg_vstate.ux_type, &oid_len); - memmove(attributes.value + 1, oid, sizeof(oid_len)); + memmove(attributes.value + 1, oid, oid_len); attributes.length = 1 + oid_len; break; From f60feb09ab5748a770980715223a88f6bd7f510a Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Feb 2024 16:51:10 +0100 Subject: [PATCH 43/75] Disable RSA4096 - watchdog issue --- Makefile | 1 + README.md | 2 +- doc/user/app-openpgp.rst | 7 ++-- pytools/gpgapp/gpgcmd.py | 2 +- src/gpg_data.c | 73 ++++++++++++++++++++++++++++++++++++---- src/gpg_gen.c | 6 ++++ src/gpg_pso.c | 4 +++ src/gpg_types.h | 7 +++- src/gpg_ux_nanos.c | 7 +++- src/gpg_ux_nanox.c | 8 +++++ src/gpg_ux_nbgl.c | 12 +++++++ tests/test_seed.py | 2 +- tests/utils.py | 2 +- 13 files changed, 116 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 8a1e45c..0373f13 100644 --- a/Makefile +++ b/Makefile @@ -122,6 +122,7 @@ DISABLE_STANDARD_WEBUSB = 1 DEFINES += CUSTOM_IO_APDU_BUFFER_SIZE=\(255+5+64\) DEFINES += HAVE_USB_CLASS_CCID DEFINES += HAVE_RSA +# DEFINES += WITH_SUPPORT_RSA4096 ifeq ($(TARGET_NAME),TARGET_NANOS) DEFINES += HAVE_UX_LEGACY diff --git a/README.md b/README.md index cee34ea..afa9dfc 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This specification is available in *doc* directory and at attributes.value[0]) { case KEY_ID_RSA: + ksz = U2BE(G_gpg_vstate.mse_dec->attributes.value, 1) >> 3; + switch (ksz) { + case 2048 / 8: + key = (cx_rsa_private_key_t *) &keygpg->priv_key.rsa2048; + len = sizeof(cx_rsa_2048_private_key_t); + break; + case 3072 / 8: + key = (cx_rsa_private_key_t *) &keygpg->priv_key.rsa3072; + len = sizeof(cx_rsa_3072_private_key_t); + break; +#ifdef WITH_SUPPORT_RSA4096 + case 4096 / 8: + key = (cx_rsa_private_key_t *) &keygpg->priv_key.rsa4096; + len = sizeof(cx_rsa_4096_private_key_t); + break; +#endif + } + + if ((key == NULL) || (key->size != ksz)) { + return SW_CONDITIONS_NOT_SATISFIED; + } + // insert pubkey gpg_io_insert_u32(4); gpg_io_insert(keygpg->pub_key.rsa, 4); // insert privkey gpg_io_mark(); - len = GPG_IO_BUFFER_LENGTH - G_gpg_vstate.io_offset; CX_CHECK(cx_aes_no_throw(&keyenc, CX_ENCRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, - (unsigned char *) &keygpg->priv_key.rsa4096, - sizeof(cx_rsa_4096_private_key_t), + (unsigned char *) key, + len, G_gpg_vstate.work.io_buffer + G_gpg_vstate.io_offset, &len)); gpg_io_inserted(len); @@ -890,8 +915,11 @@ int gpg_apdu_put_key_data(unsigned int ref) { cx_aes_key_t keyenc = {0}; gpg_key_t *keygpg = NULL; unsigned int len = 0; + cx_rsa_private_key_t *key = NULL; + unsigned int offset = 0; cx_err_t error = CX_INTERNAL_ERROR; int sw = SW_UNKNOWN; + unsigned int ksz = 0; sw = gpg_init_keyenc(&keyenc); if (sw != SW_OK) { @@ -933,19 +961,50 @@ int gpg_apdu_put_key_data(unsigned int ref) { break; } offset = G_gpg_vstate.io_offset; + + ksz = U2BE(G_gpg_vstate.mse_dec->attributes.value, 1) >> 3; + switch (ksz) { + case 2048 / 8: + key = (cx_rsa_private_key_t *) &keygpg->priv_key.rsa2048; + len = sizeof(cx_rsa_2048_private_key_t); + break; + case 3072 / 8: + key = (cx_rsa_private_key_t *) &keygpg->priv_key.rsa3072; + len = sizeof(cx_rsa_3072_private_key_t); + break; +#ifdef WITH_SUPPORT_RSA4096 + case 4096 / 8: + key = (cx_rsa_private_key_t *) &keygpg->priv_key.rsa4096; + len = sizeof(cx_rsa_4096_private_key_t); + break; +#endif + } + + if ((key == NULL) || (key->size != ksz)) { + PRINTF("[DATA] - put_key_data: Wrong key len: %d / %d\n", ksz, key->size); + sw = SW_CONDITIONS_NOT_SATISFIED; + break; + } + if (len != GPG_IO_BUFFER_LENGTH) { + PRINTF("[DATA] - put_key_data: Wrong buffer len: %d / %d\n", len, GPG_IO_BUFFER_LENGTH); + sw = SW_CONDITIONS_NOT_SATISFIED; + break; + } + + PRINTF("[DATA] - put_key_data: key len: %d\n", len); gpg_io_discard(0); - len = GPG_IO_BUFFER_LENGTH; CX_CHECK(cx_aes_no_throw(&keyenc, CX_DECRYPT | CX_CHAIN_CBC | CX_PAD_ISO9797M2 | CX_LAST, G_gpg_vstate.work.io_buffer + offset, len, G_gpg_vstate.work.io_buffer, - &len)); - if (len != sizeof(cx_rsa_4096_private_key_t)) { + &ksz)); + if (len != ksz) { + PRINTF("[DATA] - put_key_data: Wrong aes output len: %d / %d\n", len, ksz); sw = SW_WRONG_DATA; break; } - nvm_write((unsigned char *) &keygpg->priv_key.rsa4096, + nvm_write((unsigned char *) key, G_gpg_vstate.work.io_buffer, len); sw = SW_OK; diff --git a/src/gpg_gen.c b/src/gpg_gen.c index 5327cc3..c3b8986 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -93,9 +93,11 @@ static int gpg_gen_rsa_kyey(gpg_key_t *keygpg, uint8_t *name) { case 3072 / 8: pkey_size = sizeof(cx_rsa_3072_private_key_t); break; +#ifdef WITH_SUPPORT_RSA4096 case 4096 / 8: pkey_size = sizeof(cx_rsa_4096_private_key_t); break; +#endif default: break; } @@ -164,12 +166,16 @@ static int gpg_read_rsa_kyey(gpg_key_t *keygpg) { } gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa3072.n); break; +#ifdef WITH_SUPPORT_RSA4096 case 4096 / 8: if (keygpg->priv_key.rsa4096.size == 0) { return SW_REFERENCED_DATA_NOT_FOUND; } gpg_io_insert_tlv(0x81, ksz, (unsigned char *) &keygpg->priv_key.rsa4096.n); break; +#endif + default: + return SW_REFERENCED_DATA_NOT_FOUND; } gpg_io_insert_tlv(0x82, 4, keygpg->pub_key.rsa); diff --git a/src/gpg_pso.c b/src/gpg_pso.c index 7977b27..ed4fea5 100644 --- a/src/gpg_pso.c +++ b/src/gpg_pso.c @@ -77,9 +77,11 @@ static int gpg_sign(gpg_key_t *sigkey) { case 3072 / 8: key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa3072; break; +#ifdef WITH_SUPPORT_RSA4096 case 4096 / 8: key = (cx_rsa_private_key_t *) &sigkey->priv_key.rsa4096; break; +#endif default: break; } @@ -263,9 +265,11 @@ int gpg_apdu_pso() { case 3072 / 8: key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa3072; break; +#ifdef WITH_SUPPORT_RSA4096 case 4096 / 8: key = (cx_rsa_private_key_t *) &G_gpg_vstate.mse_dec->priv_key.rsa4096; break; +#endif } if ((key == NULL) || (key->size != ksz)) { diff --git a/src/gpg_types.h b/src/gpg_types.h index 34a4ba4..41e0dd8 100644 --- a/src/gpg_types.h +++ b/src/gpg_types.h @@ -84,8 +84,9 @@ typedef struct gpg_key_s { cx_rsa_private_key_t rsa; cx_rsa_2048_private_key_t rsa2048; cx_rsa_3072_private_key_t rsa3072; +#ifdef WITH_SUPPORT_RSA4096 cx_rsa_4096_private_key_t rsa4096; - +#endif cx_ecfp_private_key_t ecfp; cx_ecfp_256_private_key_t ecfp256; cx_ecfp_384_private_key_t ecfp384; @@ -215,13 +216,17 @@ struct gpg_v_state_s { cx_rsa_public_key_t public; cx_rsa_2048_public_key_t public2048; cx_rsa_3072_public_key_t public3072; +#ifdef WITH_SUPPORT_RSA4096 cx_rsa_4096_public_key_t public4096; +#endif }; union { cx_rsa_private_key_t private; cx_rsa_2048_private_key_t private2048; cx_rsa_3072_private_key_t private3072; +#ifdef WITH_SUPPORT_RSA4096 cx_rsa_4096_private_key_t private4096; +#endif }; } rsa; diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index 55870f9..a5391b7 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -536,7 +536,9 @@ const ux_menu_entry_t ui_menu_tmpl_key[] = { const ux_menu_entry_t ui_menu_tmpl_type[] = { {NULL, ui_menu_tmpl_type_action, 2048, NULL, LABEL_RSA2048, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, 3072, NULL, LABEL_RSA3072, NULL, 0, 0}, +#ifdef WITH_SUPPORT_RSA4096 {NULL, ui_menu_tmpl_type_action, 4096, NULL, LABEL_RSA4096, NULL, 0, 0}, +#endif {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256R1, NULL, LABEL_NISTP256, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, CX_CURVE_Ed25519, NULL, LABEL_Ed25519, NULL, 0, 0}, {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, @@ -570,10 +572,11 @@ const bagl_element_t *ui_menu_template_predisplay(const ux_menu_entry_t *entry, case 3072: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA3072); break; +#ifdef WITH_SUPPORT_RSA4096 case 4096: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_RSA4096); break; - +#endif case CX_CURVE_SECP256R1: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_NISTP256); break; @@ -605,7 +608,9 @@ void ui_menu_tmpl_set_action(unsigned int value) { switch (G_gpg_vstate.ux_type) { case 2048: case 3072: +#ifdef WITH_SUPPORT_RSA4096 case 4096: +#endif attributes.value[0] = KEY_ID_RSA; U2BE_ENCODE(attributes.value, 1, G_gpg_vstate.ux_type); attributes.value[3] = 0x00; diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index e2b9342..bb9dd71 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -474,13 +474,17 @@ void tmpl_key_selector(unsigned int idx) { const char *const tmpl_type_getter_values[] = {LABEL_RSA2048, LABEL_RSA3072, +#ifdef WITH_SUPPORT_RSA4096 LABEL_RSA4096, +#endif LABEL_SECP256K1, LABEL_Ed25519}; const unsigned int tmpl_type_getter_values_map[] = {2048, 3072, +#ifdef WITH_SUPPORT_RSA4096 4096, +#endif CX_CURVE_SECP256R1, CX_CURVE_Ed25519}; @@ -567,9 +571,11 @@ void ui_menu_template_predisplay() { case 3072: snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA3072); break; +#ifdef WITH_SUPPORT_RSA4096 case 4096: snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_RSA4096); break; +#endif case CX_CURVE_SECP256R1: snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_SECP256K1); break; @@ -597,7 +603,9 @@ void ui_menu_tmpl_set_action(unsigned int value) { switch (G_gpg_vstate.ux_type) { case 2048: case 3072: +#ifdef WITH_SUPPORT_RSA4096 case 4096: +#endif attributes.value[0] = KEY_ID_RSA; U2BE_ENCODE(attributes.value, 1, G_gpg_vstate.ux_type); attributes.value[3] = 0x00; diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index d0acb70..a587fee 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -204,7 +204,9 @@ static const char* const keyNameTexts[] = {LABEL_SIG, LABEL_DEC, LABEL_AUT}; enum { TOKEN_TYPE_RSA2048 = FIRST_USER_TOKEN, TOKEN_TYPE_RSA3072, +#ifdef WITH_SUPPORT_RSA4096 TOKEN_TYPE_RSA4096, +#endif TOKEN_TYPE_SECP256K1, TOKEN_TYPE_Ed25519, TOKEN_TYPE_BACK @@ -212,7 +214,9 @@ enum { static const char* const keyTypeTexts[] = {LABEL_RSA2048, LABEL_RSA3072, +#ifdef WITH_SUPPORT_RSA4096 LABEL_RSA4096, +#endif LABEL_SECP256K1, LABEL_Ed25519}; @@ -245,9 +249,11 @@ static uint32_t _getKeyType(const uint8_t key) { case 3072: token = TOKEN_TYPE_RSA3072; break; +#ifdef WITH_SUPPORT_RSA4096 case 4096: token = TOKEN_TYPE_RSA4096; break; +#endif } break; case KEY_ID_ECDH: @@ -284,7 +290,9 @@ static void template_key_cb(int token, uint8_t index) { switch (key_type) { case TOKEN_TYPE_RSA2048: case TOKEN_TYPE_RSA3072: +#ifdef WITH_SUPPORT_RSA4096 case TOKEN_TYPE_RSA4096: +#endif switch (key_type) { case TOKEN_TYPE_RSA2048: size = 2048; @@ -292,9 +300,11 @@ static void template_key_cb(int token, uint8_t index) { case TOKEN_TYPE_RSA3072: size = 3072; break; +#ifdef WITH_SUPPORT_RSA4096 case TOKEN_TYPE_RSA4096: size = 4096; break; +#endif } attributes.value[0] = KEY_ID_RSA; U2BE_ENCODE(attributes.value, 1, size); @@ -394,9 +404,11 @@ static void ui_settings_template(void) { case TOKEN_TYPE_RSA3072: bar.subText = PIC(LABEL_RSA3072); break; +#ifdef WITH_SUPPORT_RSA4096 case TOKEN_TYPE_RSA4096: bar.subText = PIC(LABEL_RSA4096); break; +#endif case TOKEN_TYPE_SECP256K1: bar.subText = PIC(LABEL_SECP256K1); break; diff --git a/tests/test_seed.py b/tests/test_seed.py index cf15194..987bf67 100644 --- a/tests/test_seed.py +++ b/tests/test_seed.py @@ -44,7 +44,7 @@ def _gen_key(client: CommandSender, template: str): [ "rsa2048", pytest.param("rsa3072", marks=pytest.mark.skipif("--full" not in sys.argv, reason="skipping long test")), - pytest.param("rsa4096", marks=pytest.mark.skipif("--full" not in sys.argv, reason="skipping long test")), + # pytest.param("rsa4096", marks=pytest.mark.skipif("--full" not in sys.argv, reason="skipping long test")), "nistp256", # ECDSA "ed25519", # EdDSA # "cv25519", # ECDH, SDK returns CX_EC_INVALID_CURVE diff --git a/tests/utils.py b/tests/utils.py index b89303e..5d5e770 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -22,7 +22,7 @@ KEY_TEMPLATES = { "rsa2048" : "010800002001", "rsa3072" : "010C00002001", - "rsa4096" : "011000002001", + # "rsa4096" : "011000002001", Not supported yet "nistp256": "132A8648CE3D030107", "ed25519" : "162B06010401DA470F01", "cv25519" : "122B060104019755010501" From 29961974e140d68c69d530f47c70d2624739540f Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Feb 2024 16:54:23 +0100 Subject: [PATCH 44/75] Fix Supported curves --- doc/user/app-openpgp.rst | 6 ++--- src/gpg_data.c | 53 +++++++++++++++++++++++++++------------- src/gpg_gen.c | 14 +++++------ src/gpg_ux.h | 3 +-- src/gpg_ux_nanos.c | 4 +-- src/gpg_ux_nanox.c | 4 +-- src/gpg_ux_nbgl.c | 14 +++++------ 7 files changed, 58 insertions(+), 40 deletions(-) diff --git a/doc/user/app-openpgp.rst b/doc/user/app-openpgp.rst index cfd7339..73e1c96 100644 --- a/doc/user/app-openpgp.rst +++ b/doc/user/app-openpgp.rst @@ -51,9 +51,9 @@ This specification is available in doc directory at [G10CODE]_. The application supports: - RSA with key up to 3072 bits -- ECDSA with secp256k1, secp256r1, brainpool 256r1 and brainpool 256t1 curves +- ECDSA with secp256R1 - EDDSA with Ed25519 curve -- ECDH with secp256k1, secp256r1, brainpool 256r1, brainpool 256t1 and curve25519 curves +- ECDH with secp256R1 and curve25519 curves This release has known missing parts (see also [GPGADD]_): @@ -154,7 +154,7 @@ The full menu layout is: | Choose Type... | RSA 2048 | RSA 3072 - | NIST P256 + | SECP 256R1 | ED25519 | Set Template | Seed mode *ON/OFF* diff --git a/src/gpg_data.c b/src/gpg_data.c index a2ef9de..6b24683 100644 --- a/src/gpg_data.c +++ b/src/gpg_data.c @@ -231,6 +231,8 @@ int gpg_apdu_put_data(unsigned int ref) { void *pkey = NULL; cx_aes_key_t aes_key = {0}; cx_err_t error = CX_INTERNAL_ERROR; + unsigned int pkey_size = 0; + unsigned int ksz, curve; G_gpg_vstate.DO_current = ref; @@ -326,7 +328,7 @@ int gpg_apdu_put_data(unsigned int ref) { /* ----------------- Extended Header list -----------------*/ case 0x3FFF: { unsigned int len_e, len_p, len_q; - unsigned int endof, ksz, reset_cnt; + unsigned int endof, reset_cnt; gpg_key_t *keygpg = NULL; // fecth 4D gpg_io_fetch_tl(&t, &l); @@ -400,7 +402,6 @@ int gpg_apdu_put_data(unsigned int ref) { unsigned char *p, *q, *pq; cx_rsa_public_key_t *rsa_pub; cx_rsa_private_key_t *rsa_priv; - unsigned int pkey_size = 0; // check length ksz = U2BE(keygpg->attributes.value, 1) >> 3; rsa_pub = (cx_rsa_public_key_t *) &G_gpg_vstate.work.rsa.public; @@ -476,12 +477,9 @@ int gpg_apdu_put_data(unsigned int ref) { nvm_write(&G_gpg_vstate.kslot->sig_count, &reset_cnt, sizeof(unsigned int)); } sw = SW_OK; - } - else if ((keygpg->attributes.value[0] == KEY_ID_ECDH) || - (keygpg->attributes.value[0] == KEY_ID_ECDSA) || - (keygpg->attributes.value[0] == KEY_ID_EDDSA)) { - unsigned int curve; - + } else if ((keygpg->attributes.value[0] == KEY_ID_ECDH) || + (keygpg->attributes.value[0] == KEY_ID_ECDSA) || + (keygpg->attributes.value[0] == KEY_ID_EDDSA)) { curve = gpg_oid2curve(&keygpg->attributes.value[1], keygpg->attributes.length - 1); if (curve == CX_CURVE_NONE) { sw = SW_WRONG_DATA; @@ -637,9 +635,35 @@ int gpg_apdu_put_data(unsigned int ref) { sw = SW_WRONG_LENGTH; break; } - nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); - nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); - sw = SW_OK; + switch (G_gpg_vstate.work.io_buffer[0]) { + case KEY_ID_RSA: + ksz = U2BE(G_gpg_vstate.work.io_buffer, 1); + if ((ksz != 2048) && (ksz != 3072)) { + sw = SW_WRONG_DATA; + } else { + sw = SW_OK; + } + break; + case KEY_ID_ECDH: + case KEY_ID_ECDSA: + case KEY_ID_EDDSA: + curve = + gpg_oid2curve(G_gpg_vstate.work.io_buffer + 1, G_gpg_vstate.io_length - 1); + if (curve == CX_CURVE_NONE) { + sw = SW_WRONG_DATA; + } else { + sw = SW_OK; + } + break; + default: + sw = SW_WRONG_DATA; + break; + } + + if (sw == SW_OK) { + nvm_write(ptr_v, G_gpg_vstate.work.io_buffer, G_gpg_vstate.io_length); + nvm_write(ptr_l, &G_gpg_vstate.io_length, sizeof(unsigned int)); + } break; /* ----------------- PWS status ----------------- */ @@ -961,7 +985,6 @@ int gpg_apdu_put_key_data(unsigned int ref) { break; } offset = G_gpg_vstate.io_offset; - ksz = U2BE(G_gpg_vstate.mse_dec->attributes.value, 1) >> 3; switch (ksz) { case 2048 / 8: @@ -981,12 +1004,10 @@ int gpg_apdu_put_key_data(unsigned int ref) { } if ((key == NULL) || (key->size != ksz)) { - PRINTF("[DATA] - put_key_data: Wrong key len: %d / %d\n", ksz, key->size); sw = SW_CONDITIONS_NOT_SATISFIED; break; } if (len != GPG_IO_BUFFER_LENGTH) { - PRINTF("[DATA] - put_key_data: Wrong buffer len: %d / %d\n", len, GPG_IO_BUFFER_LENGTH); sw = SW_CONDITIONS_NOT_SATISFIED; break; } @@ -1004,9 +1025,7 @@ int gpg_apdu_put_key_data(unsigned int ref) { sw = SW_WRONG_DATA; break; } - nvm_write((unsigned char *) key, - G_gpg_vstate.work.io_buffer, - len); + nvm_write((unsigned char *) key, G_gpg_vstate.work.io_buffer, len); sw = SW_OK; break; diff --git a/src/gpg_gen.c b/src/gpg_gen.c index c3b8986..9c85e3f 100644 --- a/src/gpg_gen.c +++ b/src/gpg_gen.c @@ -230,7 +230,7 @@ static int gpg_read_ecc_kyey(gpg_key_t *keygpg) { uint32_t i, len; cx_err_t error = CX_INTERNAL_ERROR; - if (keygpg->pub_key.ecfp256.W_len == 0) { + if (keygpg->pub_key.ecfp.W_len == 0) { return SW_REFERENCED_DATA_NOT_FOUND; } gpg_io_discard(1); @@ -238,23 +238,23 @@ static int gpg_read_ecc_kyey(gpg_key_t *keygpg) { curve = gpg_oid2curve(keygpg->attributes.value + 1, keygpg->attributes.length - 1); if (curve == CX_CURVE_Ed25519) { memmove(G_gpg_vstate.work.io_buffer + 128, - keygpg->pub_key.ecfp256.W, - keygpg->pub_key.ecfp256.W_len); + keygpg->pub_key.ecfp.W, + keygpg->pub_key.ecfp.W_len); CX_CHECK(cx_edwards_compress_point_no_throw(CX_CURVE_Ed25519, G_gpg_vstate.work.io_buffer + 128, 65)); gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 129); // 129: discard 02 } else if (curve == CX_CURVE_Curve25519) { - len = keygpg->pub_key.ecfp256.W_len - 1; + len = keygpg->pub_key.ecfp.W_len - 1; for (i = 0; i <= len; i++) { - G_gpg_vstate.work.io_buffer[128 + i] = keygpg->pub_key.ecfp256.W[len - i]; + G_gpg_vstate.work.io_buffer[128 + i] = keygpg->pub_key.ecfp.W[len - i]; } gpg_io_insert_tlv(0x86, 32, G_gpg_vstate.work.io_buffer + 128); } else { gpg_io_insert_tlv(0x86, - keygpg->pub_key.ecfp256.W_len, - (unsigned char *) &keygpg->pub_key.ecfp256.W); + keygpg->pub_key.ecfp.W_len, + (unsigned char *) &keygpg->pub_key.ecfp.W); } return SW_OK; diff --git a/src/gpg_ux.h b/src/gpg_ux.h index 207643d..fc7a63d 100644 --- a/src/gpg_ux.h +++ b/src/gpg_ux.h @@ -29,8 +29,7 @@ #define LABEL_RSA2048 "RSA 2048" #define LABEL_RSA3072 "RSA 3072" #define LABEL_RSA4096 "RSA 4096" -#define LABEL_NISTP256 "NIST P256" -#define LABEL_SECP256K1 "SECP 256K1" +#define LABEL_SECP256R1 "SECP 256R1" #define LABEL_Ed25519 "Ed25519" void ui_CCID_reset(void); diff --git a/src/gpg_ux_nanos.c b/src/gpg_ux_nanos.c index a5391b7..9dbdc7f 100644 --- a/src/gpg_ux_nanos.c +++ b/src/gpg_ux_nanos.c @@ -539,7 +539,7 @@ const ux_menu_entry_t ui_menu_tmpl_type[] = { #ifdef WITH_SUPPORT_RSA4096 {NULL, ui_menu_tmpl_type_action, 4096, NULL, LABEL_RSA4096, NULL, 0, 0}, #endif - {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256R1, NULL, LABEL_NISTP256, NULL, 0, 0}, + {NULL, ui_menu_tmpl_type_action, CX_CURVE_SECP256R1, NULL, LABEL_SECP256R1, NULL, 0, 0}, {NULL, ui_menu_tmpl_type_action, CX_CURVE_Ed25519, NULL, LABEL_Ed25519, NULL, 0, 0}, {ui_menu_template, NULL, 0, &C_icon_back, "Back", NULL, 61, 40}, UX_MENU_END}; @@ -578,7 +578,7 @@ const bagl_element_t *ui_menu_template_predisplay(const ux_menu_entry_t *entry, break; #endif case CX_CURVE_SECP256R1: - snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_NISTP256); + snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_SECP256R1); break; case CX_CURVE_Ed25519: snprintf(G_gpg_vstate.menu, sizeof(G_gpg_vstate.menu), " %s", LABEL_Ed25519); diff --git a/src/gpg_ux_nanox.c b/src/gpg_ux_nanox.c index bb9dd71..efdaf45 100644 --- a/src/gpg_ux_nanox.c +++ b/src/gpg_ux_nanox.c @@ -477,7 +477,7 @@ const char *const tmpl_type_getter_values[] = {LABEL_RSA2048, #ifdef WITH_SUPPORT_RSA4096 LABEL_RSA4096, #endif - LABEL_SECP256K1, + LABEL_SECP256R1, LABEL_Ed25519}; const unsigned int tmpl_type_getter_values_map[] = {2048, @@ -577,7 +577,7 @@ void ui_menu_template_predisplay() { break; #endif case CX_CURVE_SECP256R1: - snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_SECP256K1); + snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_SECP256R1); break; case CX_CURVE_Ed25519: snprintf(KEY_TYPE, sizeof(KEY_TYPE), " %s", LABEL_Ed25519); diff --git a/src/gpg_ux_nbgl.c b/src/gpg_ux_nbgl.c index a587fee..b118995 100644 --- a/src/gpg_ux_nbgl.c +++ b/src/gpg_ux_nbgl.c @@ -207,7 +207,7 @@ enum { #ifdef WITH_SUPPORT_RSA4096 TOKEN_TYPE_RSA4096, #endif - TOKEN_TYPE_SECP256K1, + TOKEN_TYPE_SECP256R1, TOKEN_TYPE_Ed25519, TOKEN_TYPE_BACK }; @@ -217,7 +217,7 @@ static const char* const keyTypeTexts[] = {LABEL_RSA2048, #ifdef WITH_SUPPORT_RSA4096 LABEL_RSA4096, #endif - LABEL_SECP256K1, + LABEL_SECP256R1, LABEL_Ed25519}; static uint32_t _getKeyType(const uint8_t key) { @@ -260,7 +260,7 @@ static uint32_t _getKeyType(const uint8_t key) { tag = attributes[1]; switch (tag) { case 0x2A: - token = TOKEN_TYPE_SECP256K1; + token = TOKEN_TYPE_SECP256R1; break; case 0x2B: token = TOKEN_TYPE_Ed25519; @@ -268,7 +268,7 @@ static uint32_t _getKeyType(const uint8_t key) { } break; case KEY_ID_ECDSA: - token = TOKEN_TYPE_SECP256K1; + token = TOKEN_TYPE_SECP256R1; break; case KEY_ID_EDDSA: token = TOKEN_TYPE_Ed25519; @@ -315,7 +315,7 @@ static void template_key_cb(int token, uint8_t index) { oid_len = 6; break; - case TOKEN_TYPE_SECP256K1: + case TOKEN_TYPE_SECP256R1: if (G_gpg_vstate.ux_key == TOKEN_TEMPLATE_DEC) { attributes.value[0] = KEY_ID_ECDH; } else { @@ -409,8 +409,8 @@ static void ui_settings_template(void) { bar.subText = PIC(LABEL_RSA4096); break; #endif - case TOKEN_TYPE_SECP256K1: - bar.subText = PIC(LABEL_SECP256K1); + case TOKEN_TYPE_SECP256R1: + bar.subText = PIC(LABEL_SECP256R1); break; case TOKEN_TYPE_Ed25519: bar.subText = PIC(LABEL_Ed25519); From 913d7ece41c836d79f6586f9fa0591381c2539e3 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Feb 2024 17:46:20 +0100 Subject: [PATCH 45/75] Update snapshots --- .../nanos/test_menu_settings/00006.png | Bin 400 -> 401 bytes .../nanos/test_menu_settings/00007.png | Bin 421 -> 417 bytes .../nanos/test_menu_settings/00008.png | Bin 405 -> 321 bytes .../nanos/test_menu_settings/00009.png | Bin 426 -> 415 bytes .../nanos/test_menu_settings/00013.png | Bin 426 -> 415 bytes .../nanosp/test_menu_settings/00006.png | Bin 465 -> 475 bytes .../nanosp/test_menu_settings/00007.png | Bin 588 -> 604 bytes .../nanosp/test_menu_settings/00008.png | Bin 666 -> 601 bytes .../nanosp/test_menu_settings/00009.png | Bin 613 -> 484 bytes .../nanosp/test_menu_settings/00010.png | Bin 418 -> 376 bytes .../nanosp/test_menu_settings/00012.png | Bin 418 -> 376 bytes .../nanox/test_menu_settings/00006.png | Bin 465 -> 475 bytes .../nanox/test_menu_settings/00007.png | Bin 588 -> 604 bytes .../nanox/test_menu_settings/00008.png | Bin 666 -> 601 bytes .../nanox/test_menu_settings/00009.png | Bin 613 -> 484 bytes .../nanox/test_menu_settings/00010.png | Bin 418 -> 376 bytes .../nanox/test_menu_settings/00012.png | Bin 418 -> 376 bytes .../stax/test_menu_settings/00002.png | Bin 11072 -> 9595 bytes .../stax/test_menu_settings/00003.png | Bin 12007 -> 11641 bytes 19 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/snapshots/nanos/test_menu_settings/00006.png b/tests/snapshots/nanos/test_menu_settings/00006.png index 09d0875459c52a7ad014f61f79a99ee81cf3372f..5304bfcec7a225e759d65fa7af391ead86107357 100644 GIT binary patch delta 374 zcmV-+0g3*Q1CaxeB!5^*L_t(|ob8(34udcVh3hik|AD=57tJ~>aBLQZ#+)y^Fi7bF z^@meSNo3#p1MjT-0Z%V%7r}H$;+-||fn_cGR+bexRCK2Bz;5`Ue;{)dK%$qk%$HfJ zHl*6CPbou%8T2HC5JCtcgpkWv66Tbxme*1h)%}{ik{1fZ0e|+4b}X*|x(hWE4XS0v z1jpDpsU@CIiU=lKgm@XYJZZ3>-IF;x_RfIEI UZ%O2P@Bjb+07*qoM6N<$g5;#C2><{9 delta 373 zcmV-*0gC>S1CRrdB!5>)L_t(|ob8(34uc>Jh3hik|AD>OF33pj-(V_b+xfB!QwuCD zqCG&A$YYZi-d+9+JiTs352iyB_pE_;EGs=WTGq&+pd%GG6wMp`2Qo(jIC?tsc$ulH zO^Utv5H%&H(Gvgw0000008V2`7?YP;UP(o&`Za4MudAS+z<-`mj^!mlSD|L0gKU|7 z2G_B3Qb|0Y6fu}=5#nap@}xmIx+ilAb(IuFr#MXz}p5mivhE(##2eTECHtQJB;8tyBKeV-t^?h*mv8}3yq4=p TP0w5Q00000NkvXXu0mjfm8PoB diff --git a/tests/snapshots/nanos/test_menu_settings/00007.png b/tests/snapshots/nanos/test_menu_settings/00007.png index 5ff66d89ca3ec3b08715f30f7aef044d8c5926e6..706365e845100e6bf782d81199c997b5bde5c68d 100644 GIT binary patch delta 390 zcmV;10eSwV1EB+uB!6g0L_t(|ob8(34uc>Jg>jkh|G-{s7icwm8>FrmZS5H8LWr9U2r>eA2 zdoofw>mimM0RR910001BI7`qtWo^ZZUMhm5kyT`}T#}WP>VNrA%ku8{0xhHxwjM?X zNPS>SrJycZAY#?BX98CDK#gchDZfa9fI3ZS zo)uZnBLubPvMjg8Be$s*&)+>sgzH{Y{8(AOHXW delta 395 zcmV;60d)SM1Em9yB!6s4L_t(|ob8&;62c%1gsG$N|G*yfK#h?NDb0-Ln%x15CKAm|)llgY zxnBw;oc0oneQ1Hl52B!37=L_t(|ob8y)5`!QNMWIvw|ASrVf*A%A9?{a^;+&NeAh9=K zNkZ`F*yV#B8X7GVbfC_IJ=|12p21Aq{r$%t;`TgT+?*8`eEmZ8cXtvo$svq(&uPA1 zo>l%ORR9100001Uh>PQw)tRW0MCqisDwb>|(eh<~^ZgeVmh6}4U~EMk6k zRrThMV=Kar7Ul6iU9Ins+6nM~>9YTGw`o(Z)t2Gea-iFARS8JVMdutCKL{c>!;eoZ zR;Z=ze+WIV?b~Yt^4RJoZH0;Nlk((wGP0hkd0r$yj4jE5asN)ixj~)uRN-EE4ej4A stHx*7(B*#*03QGV00000007{|3Bn_Z=W7=21ONa407*qoM6N<$f|eGGKL7v# delta 378 zcmV-=0fqj-0+j=hB!65YKUPYx{^FuJ=YZhkF8Q--H}=d76U~MCazbkQz@V<+22r!tc;IwRqQW5~;Z% zr0+Kiea#X??sI>ehS=p>J4}5{`o~w0BufDR000000I-9wIMyc8&E>LD%mTvL49Ld(p|g%+n-5A5{j`P-kDt9r{9=1jK{Ia}zxNH3!MT Y7o_IVjRGCy+5i9m07*qoM6N<$g6yxe;Q#;t diff --git a/tests/snapshots/nanos/test_menu_settings/00009.png b/tests/snapshots/nanos/test_menu_settings/00009.png index b5ba692960d3fdc655789114f812a644638630f2..6dea62da1b0cfbf81a1d9b54f49c07f39958124a 100644 GIT binary patch delta 388 zcmV-~0ek+c1D^wsB!6Z}L_t(|ob8%P4#OY}MNQS*|G-(a3nWC0&5&Y@n*UZQW-1Pr z`GLrk&)FzU&;5m!I^sZ;PCEOs(Z(3L7 zpbOdQ91xDiLgXvR(#NtbD-ornRL3tFHI^cNpsbh^nFE;3 z(FdLH?-WL3-F$L~5TC>ThwQgE?WqQdD$lobZ iYwKjf_++OL(m>oGv8udi-3hyE4!PdQ1voBd%KksGTM-8ouEml1}9$os9Ld>ib zHKt5gF9I@#E`Sh{oKGR%1p#mhcaH!7008(e)|_rdG*m8id4H+>r1SVlNS+05LekVQ zG3*MCgl{5@;ZzbL@j${l-_WHtjO;)x`Zs*tJLWVa-(VTwX|YMrcz6^>dDDo{%t^r- z1}N|892;<_?+ExZ0w)2^bA0Avr~0vvue~Dc{b&Gcn`VP5y*4P5=zN@0p!rmZRb~MF zjhZlY$L$VZhJU$~`BcN$4ifsFM8pcXHW=aM&pb@~zQrBV7XbhO00000;1NvO54ays zjp9#_ShXY-s;5Y!N0O8>%G;3PaX&vrE3$893PEQS^qE8dwKMN^`uc5jl3kxkzHpBE uPOINE@yPU)H{il%ugSpasH&Rfk-pIr`yJ6|w4(q300{s|MNUMnLSTZeJid+q diff --git a/tests/snapshots/nanos/test_menu_settings/00013.png b/tests/snapshots/nanos/test_menu_settings/00013.png index b5ba692960d3fdc655789114f812a644638630f2..6dea62da1b0cfbf81a1d9b54f49c07f39958124a 100644 GIT binary patch delta 388 zcmV-~0ek+c1D^wsB!6Z}L_t(|ob8%P4#OY}MNQS*|G-(a3nWC0&5&Y@n*UZQW-1Pr z`GLrk&)FzU&;5m!I^sZ;PCEOs(Z(3L7 zpbOdQ91xDiLgXvR(#NtbD-ornRL3tFHI^cNpsbh^nFE;3 z(FdLH?-WL3-F$L~5TC>ThwQgE?WqQdD$lobZ iYwKjf_++OL(m>oGv8udi-3hyE4!PdQ1voBd%KksGTM-8ouEml1}9$os9Ld>ib zHKt5gF9I@#E`Sh{oKGR%1p#mhcaH!7008(e)|_rdG*m8id4H+>r1SVlNS+05LekVQ zG3*MCgl{5@;ZzbL@j${l-_WHtjO;)x`Zs*tJLWVa-(VTwX|YMrcz6^>dDDo{%t^r- z1}N|892;<_?+ExZ0w)2^bA0Avr~0vvue~Dc{b&Gcn`VP5y*4P5=zN@0p!rmZRb~MF zjhZlY$L$VZhJU$~`BcN$4ifsFM8pcXHW=aM&pb@~zQrBV7XbhO00000;1NvO54ays zjp9#_ShXY-s;5Y!N0O8>%G;3PaX&vrE3$893PEQS^qE8dwKMN^`uc5jl3kxkzHpBE uPOINE@yPU)H{il%ugSpasH&Rfk-pIr`yJ6|w4(q300{s|MNUMnLSTZeJid+q diff --git a/tests/snapshots/nanosp/test_menu_settings/00006.png b/tests/snapshots/nanosp/test_menu_settings/00006.png index 966544923f253da07575ab82c3c555f477647582..9fb6beadb148502fb73023363d1db5e2938f6230 100644 GIT binary patch delta 449 zcmV;y0Y3iG1KR_TB!8kwL_t(|obB3Ma)cldKv5=@ov{BUxtDxU(?!wHVq}`G@t!Z^ z@CXl48&d)R0000000000000000Km6+IoEd_haBgePk$;Wo0K|BoxrG~TcDl((|(-m zD@r@-mP@}B^~ols&Z1LFAx%bIj-B4Yo&i{*9;*08V;^e(^nW!m`tyH<>j9IAZ?ARt z<(!+=mAdu}fNrf`cI3R>DK|ULa|x0$sHZ}ddq5hDfy~XW`TmlYU(L8y8H0Md{BHR_ zPBo7=c7M%G|H;QH2Tj%6?g9GgML$#OgPM_deoc3~2LJ#70Kl8~en4XsiysC0?Kd)A zLN~n8yaPV^<$tRi{xqWhc1%K-FbV?OXFSCUM?X-|0k}FVOEBkjF_}s8EJvmLlN{IQ zjnYO3qr7|9pA;b+JqkGMEu@FFQgf{3yNHQn7!uyzwTLhq*tSAeF2``yjUQTkL3 z=gfBIX)*u+003CZbw9xP-fbpupXT1e>|*UQzxng5$vV)yo$OL1ZnEkoqjPvJN-Rjk r`D)XLYb>Z6k1Pjk8*i*j(UzA#Q)6<^Im)y000000NkvXXu0mjfiDK0} delta 439 zcmV;o0Z9Ja1JMJJB!8GmL_t(|obB3CZo?o9fMGiACfxr>xyv5VkY$5I6AD)Ie@_`D zuwY6O)06-J0000000000000000Prndi~Bo{qaNp+Pd_S!s-`_fR&cs#Ht5&?w4cTO z73DhRmDh18WTC2QPq8&?BkDxkj$eO)Jpq_PhAO^Z>|+JMet#!=e_m_c2CPnef33SO z=d7--^tC4d_G<02Q_KB9xjAqvm!KL0ITfPZ15zgjb#69|k5|3&cTb$F#6V7$-!1>g zDfM{ckJrfbAAGD@Ky|(C9$=qd>@%f3keqYJ*Ysug000000Qk3hKS1f_;(LjH|BcMH z&`fWrcfd!#e1A35pHBAQ&q>%8dP!ivWTjZ?=m!cKfOltQN#>j`CL?v8|78r02ej` h?)*I6{{i-={Q(n#ZNS2$X=VTb002ovPDHLkV1jNC&C&n> diff --git a/tests/snapshots/nanosp/test_menu_settings/00007.png b/tests/snapshots/nanosp/test_menu_settings/00007.png index 8d5bed78563ae987925d7ccc231ecda6f105a0ff..c4df69f427064c2b43299206eaf784f6d859c524 100644 GIT binary patch delta 579 zcmV-J0=)gq1l$CWB!44GL_t(|ob8-Za)clZhON_^aQ`EDmp;&;3?u=qChYF_J+a7w zCV=pVaoYd@00000007`q_zG7>Z>@2RzXqMeC=O@|alAF&-Qh;-!+V^MAFf`t-F-XTGBv&g8Dw zKY#9<<>zqrx4Urj3R$Yl2Rk5>&21Q^ToT91(3&%=sVJ6kKuxo(Z0t3&5-p==#xWng z3I@u}&jx7mnHz|H;vTieMlq zB_E@UD%MsUkbfnY6?|Zbpjxo(CG?zL-_19?*FQXc&|A%ztZkuG)3hhs)iQ6Vn739K z_g-%F@quVH(FbD0=0-fneJ{N4VxZ3Lh79V(iNh_qJ$2Jid+&kc`MgDo-KRgiYHv+^VFCOhbJ2_}e%z9FK=k+B300000ycm(+3n~m1e{F{~ z89dO=V?41h`^6Rm3^jjV`Zodqu`Ktgg2G+aS-hLC;(%VyF+R{?{87wVnIBb41W(26 R>B0a2002ovPDHLkV1o5A5p)0m delta 563 zcmV-30?hr~1k41GB!3f0L_t(|ob8)YlEWYfK(m?N#QPt~yX=QEuB$+7nu2NH`?Ba@ z0%{e>wgCVD000000Km8K6WDjoxt3E(qr4NgKMxys5>1cM^7CmOP|K~bs}-vZ4P*P9 z^L(d1>`@*2qs^gMR&>BS#-nKclv0@!3p&Pw+#pufax2$Vjeq5HLT4UP9T&>b8{fZ- z&HD3j^|yy`_ZPC%kPmi1p_tn+O05#-%Aqx9c2iL-;eeKITiMxbW+z%_&x~WfdK(G= z00000F$CNPXx9K*l^xs{RT+8=dB|}r%mL#mR5Y~VEm5aYwi`zsiT}dUff2z#Qc6BX z7o%8PbwCNZtbgDGBM7Qpmfa$rGsbtz1Mlq*Palj{GZt$*P^!hWC;Qcems8E#Mi}=o z-00&2(Q2X(#2cFn@tpT#;C&Y_>f9d4pxvA}Jd)d6cO6CUg2Zw`+?I@YDNk)fH)*NS zrXTC#1M?N@Yx(hR z1SjW?ORyNEYp*L_8R=pkyeN0$_TLB0=l&Zx?tv_kp8m@B0W0VJ&#;68T26c)Afjbm zZ2yAy51=$3UB!3`DL_t(|ob8)kc7z}dMyaPeasNx|Ui!c}Gz}2L3_@)0eR41Y z2KoEKq_mGOLGxC*mg&8$>g(4M7xTHR;LLfRsrCNnd3yX_?&f?9gY?_ow*5*rH$W!4 z+i*&`)$A*m-joKRyq|(JfTXy%bPnmSrtj1vrT2Im#%T!v0Dk}g05Fe_y~WF&t=g|P z6FnO-nb_PyEB)hN@521jn9_6X+>ER|DJwZPmJKOv1B`x^S-!p;Orj}q`%00000J6IGC zP;z`T3}8t1%73!X*2rYkQr=y#L0hpC?!Al=KT&2zgdpFwcgvTVtH)O=bU#|qc3p6k zA!*2Od6OS{LhMm~T*_g0)Zo6iRf=>^^sbpJ`N?dRxSLBkChCLuhkrdcK7waeSk-n#Kt>L}YOzsE z|NeKbI&yK#d{xNr+S}I)^5JXH60S000000002+XZQvZV*w6LeK~6Y O0000F1DMX4t{@&1?8z4U__m7<4*gC$LK&ldp< zvA{B1k+hb__kdVL=`mkxil^^o2J_15xO1LolkWdKPmkTHw6|kaXn)OZ*N-H506N{= zhEb?Ud{!>4IaVlT{Z?cEM##kUaE$g6Z8u#)PmgC{oHYRe0Dk}g003YgU%B0nJKJf$ zDrR~%Vq>Pbg`V_}kKTp(rLjrRv0F2m^5jHvB=!wj*#TIcm0iBRbSBl5xO_H-1e(JI zRr5csf*QIdB;bKh{|XO86&Ey_TddI8)nf(gw+c@HXEh|i7nDw+A1hG+0000006+%O z@c=CVpcVP|Q-5MO!I|IkHf1?d1lNDah@;-%IXtWBYt+uv2+!w5k^Bxox-OW@)27!Z z%0VA4<*)z@`BMv%y>B>*wTY_uF1WbczxgqK2pa?LwYBrl8{GnV9`PPU*R&Th?>KJ` zt~CaXfq1Lp7#OpXpZfRoo8sulFEAPW#lKAjZI&z2ynoKpN{Kg~b(>SaX#p9&L=k2E zDY4YDxIERopI8I{00000000jV8V@k`x1NLiP1+^#?VH^!KkPN7#a{jco`bR4DP7|d zUgYdZYdlyIu5vb%h@5?whaLk6JsT>XPwt7mH*feQ(er!|qm%LY3cAFOmS`8+3Hz!T zqFvCvNqT4N__ybBg&<(LcfhJe-t;8tV-WWa5Z(Qh+0C)~V$fE%&YuhLC=~zz00000 z06a`;b~h`ThTo&S4s zP{0l9u7MTV>TC>m)$O+2Y0cWO>N>5(_}tsQh?G)f6o^vFWZWm6=Xv$zl*Bvsc3*Yj z9v*O6)nkU}ONKi@t0Pfwjy6&{YTfbD45uGrT@e5P004g9M}K5z`VFh@s;@%2aCn&2 z=54cnn=`L(f7MJP%*x6+RrIdOj;xBo>A5VqplajQx25aQT+lEdd2Ouy@Xm87+v6o} z0NRIdn>CxMdmFxXXeYl;k_<_7HuN^_Y}Io1zLr?F<{^Tm`wn;-kvG%&uU!xe#oYnJ zTfQs2!twOsV1NC@d^$Y<00000AwuT^G$+^Jy*kb0{U@{h{scp?6sd^YHHU2kyUc;E z+m#I0=hkDk=YoDx5lPlcim_04Ra4n~-vL+jcb%?Yi9R23J&D$3lagFjmP49rf7cjH zJ`nU=g8%Tb`VwRAbBjZ-Jx+3ForPz$e5Lz44t*Y(XGCS!{y$)CgRe>P|A00Y-IPFk zfVe-0h9ypSk|6p3000000000000000008(`z5qw0O6~eV+7JK$002ovPDHLkV1k2M B;}-w` delta 589 zcmV-T0-s3`H}Z*@^pKl6#pC&dH=9iLolg_T8@* z5HLZ67bKd>CNQ)3w@eRe^L}{O2DOdhcW(1Uw5}^zhFI4%Y4;@Cwzal`l<_Qcn`e}{ z%>s?9TC8Aws_+E#uqXK8ke2GLrpl9WXKdpBLI3~&00000xPPCYiEYcRuiOfm`=iXp zRh8-YVqOY;=U&W|dQ3s0CB|BXQuG30E^ccuRkWa!6cKjbprQkg4$L#w_r&mFOcvuz z9gSWmYqoEb*v^b}Q}i~|hcVd!=Ys+2^$>W7(<@BD4{g9s!os zDt))LvdBL-`M?`o$y?oxMAECi=FMY)^grh5XY{v*F^DuI)$ea4Be$6;L6%C1KOLAzxuc29Rn{p!%&RycI1-wCK7uo#m8s%@ys@Nj z0;3o{VY7U7{LQuEpJoEy1)=L5a0000000000 b0DKI8?#}C?XsV@)00000NkvXXu0mjf=d>4N diff --git a/tests/snapshots/nanosp/test_menu_settings/00010.png b/tests/snapshots/nanosp/test_menu_settings/00010.png index 909ec4ffffa3780f00059d6e808091031020ef2d..2aa394d95f58df2507c3f3cbdb267ce58c47c4b9 100644 GIT binary patch delta 349 zcmZ3){DWzNO1-_Oi(^Q|oVPb}`I;4Y8WPjXgx}YzyxSz7(z2yy=87#p?EZ(O&AN6d z;Wh&T9MHAf%)Ek2vBUa!p-<h;sJ-TJ z-ODdgmb|(1Z!fXu$c%V=VEGTNy`>rXYH`c&RvvBL{@de@rd*)U`-;o%g5jyhKc(lb zU`VPu`CYa7Z`i`)(SEflD;OT1Je7UfIlJP&a^ZA4gR=&l3wCg|{JVcyk7Frg zQ|fI71UR4^x0pRZ#3?}a_db5flm6U_H)ckhy#IpHq{CS8x5K|s<0Wzdt(z#s!H z=K65$+Vh;sJ-TJ z-ODdgmb|(1Z!fXu$c%V=VEGTNy`>rXYH`c&RvvBL{@de@rd*)U`-;o%g5jyhKc(lb zU`VPu`CYa7Z`i`)(SEflD;OT1Je7UfIlJP&a^ZA4gR=&l3wCg|{JVcyk7Frg zQ|fI71UR4^x0pRZ#3?}a_db5flm6U_H)ckhy#IpHq{CS8x5K|s<0Wzdt(z#s!H z=K65$+Vj9IAZ?ARt z<(!+=mAdu}fNrf`cI3R>DK|ULa|x0$sHZ}ddq5hDfy~XW`TmlYU(L8y8H0Md{BHR_ zPBo7=c7M%G|H;QH2Tj%6?g9GgML$#OgPM_deoc3~2LJ#70Kl8~en4XsiysC0?Kd)A zLN~n8yaPV^<$tRi{xqWhc1%K-FbV?OXFSCUM?X-|0k}FVOEBkjF_}s8EJvmLlN{IQ zjnYO3qr7|9pA;b+JqkGMEu@FFQgf{3yNHQn7!uyzwTLhq*tSAeF2``yjUQTkL3 z=gfBIX)*u+003CZbw9xP-fbpupXT1e>|*UQzxng5$vV)yo$OL1ZnEkoqjPvJN-Rjk r`D)XLYb>Z6k1Pjk8*i*j(UzA#Q)6<^Im)y000000NkvXXu0mjfiDK0} delta 439 zcmV;o0Z9Ja1JMJJB!8GmL_t(|obB3CZo?o9fMGiACfxr>xyv5VkY$5I6AD)Ie@_`D zuwY6O)06-J0000000000000000Prndi~Bo{qaNp+Pd_S!s-`_fR&cs#Ht5&?w4cTO z73DhRmDh18WTC2QPq8&?BkDxkj$eO)Jpq_PhAO^Z>|+JMet#!=e_m_c2CPnef33SO z=d7--^tC4d_G<02Q_KB9xjAqvm!KL0ITfPZ15zgjb#69|k5|3&cTb$F#6V7$-!1>g zDfM{ckJrfbAAGD@Ky|(C9$=qd>@%f3keqYJ*Ysug000000Qk3hKS1f_;(LjH|BcMH z&`fWrcfd!#e1A35pHBAQ&q>%8dP!ivWTjZ?=m!cKfOltQN#>j`CL?v8|78r02ej` h?)*I6{{i-={Q(n#ZNS2$X=VTb002ovPDHLkV1jNC&C&n> diff --git a/tests/snapshots/nanox/test_menu_settings/00007.png b/tests/snapshots/nanox/test_menu_settings/00007.png index 8d5bed78563ae987925d7ccc231ecda6f105a0ff..c4df69f427064c2b43299206eaf784f6d859c524 100644 GIT binary patch delta 579 zcmV-J0=)gq1l$CWB!44GL_t(|ob8-Za)clZhON_^aQ`EDmp;&;3?u=qChYF_J+a7w zCV=pVaoYd@00000007`q_zG7>Z>@2RzXqMeC=O@|alAF&-Qh;-!+V^MAFf`t-F-XTGBv&g8Dw zKY#9<<>zqrx4Urj3R$Yl2Rk5>&21Q^ToT91(3&%=sVJ6kKuxo(Z0t3&5-p==#xWng z3I@u}&jx7mnHz|H;vTieMlq zB_E@UD%MsUkbfnY6?|Zbpjxo(CG?zL-_19?*FQXc&|A%ztZkuG)3hhs)iQ6Vn739K z_g-%F@quVH(FbD0=0-fneJ{N4VxZ3Lh79V(iNh_qJ$2Jid+&kc`MgDo-KRgiYHv+^VFCOhbJ2_}e%z9FK=k+B300000ycm(+3n~m1e{F{~ z89dO=V?41h`^6Rm3^jjV`Zodqu`Ktgg2G+aS-hLC;(%VyF+R{?{87wVnIBb41W(26 R>B0a2002ovPDHLkV1o5A5p)0m delta 563 zcmV-30?hr~1k41GB!3f0L_t(|ob8)YlEWYfK(m?N#QPt~yX=QEuB$+7nu2NH`?Ba@ z0%{e>wgCVD000000Km8K6WDjoxt3E(qr4NgKMxys5>1cM^7CmOP|K~bs}-vZ4P*P9 z^L(d1>`@*2qs^gMR&>BS#-nKclv0@!3p&Pw+#pufax2$Vjeq5HLT4UP9T&>b8{fZ- z&HD3j^|yy`_ZPC%kPmi1p_tn+O05#-%Aqx9c2iL-;eeKITiMxbW+z%_&x~WfdK(G= z00000F$CNPXx9K*l^xs{RT+8=dB|}r%mL#mR5Y~VEm5aYwi`zsiT}dUff2z#Qc6BX z7o%8PbwCNZtbgDGBM7Qpmfa$rGsbtz1Mlq*Palj{GZt$*P^!hWC;Qcems8E#Mi}=o z-00&2(Q2X(#2cFn@tpT#;C&Y_>f9d4pxvA}Jd)d6cO6CUg2Zw`+?I@YDNk)fH)*NS zrXTC#1M?N@Yx(hR z1SjW?ORyNEYp*L_8R=pkyeN0$_TLB0=l&Zx?tv_kp8m@B0W0VJ&#;68T26c)Afjbm zZ2yAy51=$3UB!3`DL_t(|ob8)kc7z}dMyaPeasNx|Ui!c}Gz}2L3_@)0eR41Y z2KoEKq_mGOLGxC*mg&8$>g(4M7xTHR;LLfRsrCNnd3yX_?&f?9gY?_ow*5*rH$W!4 z+i*&`)$A*m-joKRyq|(JfTXy%bPnmSrtj1vrT2Im#%T!v0Dk}g05Fe_y~WF&t=g|P z6FnO-nb_PyEB)hN@521jn9_6X+>ER|DJwZPmJKOv1B`x^S-!p;Orj}q`%00000J6IGC zP;z`T3}8t1%73!X*2rYkQr=y#L0hpC?!Al=KT&2zgdpFwcgvTVtH)O=bU#|qc3p6k zA!*2Od6OS{LhMm~T*_g0)Zo6iRf=>^^sbpJ`N?dRxSLBkChCLuhkrdcK7waeSk-n#Kt>L}YOzsE z|NeKbI&yK#d{xNr+S}I)^5JXH60S000000002+XZQvZV*w6LeK~6Y O0000F1DMX4t{@&1?8z4U__m7<4*gC$LK&ldp< zvA{B1k+hb__kdVL=`mkxil^^o2J_15xO1LolkWdKPmkTHw6|kaXn)OZ*N-H506N{= zhEb?Ud{!>4IaVlT{Z?cEM##kUaE$g6Z8u#)PmgC{oHYRe0Dk}g003YgU%B0nJKJf$ zDrR~%Vq>Pbg`V_}kKTp(rLjrRv0F2m^5jHvB=!wj*#TIcm0iBRbSBl5xO_H-1e(JI zRr5csf*QIdB;bKh{|XO86&Ey_TddI8)nf(gw+c@HXEh|i7nDw+A1hG+0000006+%O z@c=CVpcVP|Q-5MO!I|IkHf1?d1lNDah@;-%IXtWBYt+uv2+!w5k^Bxox-OW@)27!Z z%0VA4<*)z@`BMv%y>B>*wTY_uF1WbczxgqK2pa?LwYBrl8{GnV9`PPU*R&Th?>KJ` zt~CaXfq1Lp7#OpXpZfRoo8sulFEAPW#lKAjZI&z2ynoKpN{Kg~b(>SaX#p9&L=k2E zDY4YDxIERopI8I{00000000jV8V@k`x1NLiP1+^#?VH^!KkPN7#a{jco`bR4DP7|d zUgYdZYdlyIu5vb%h@5?whaLk6JsT>XPwt7mH*feQ(er!|qm%LY3cAFOmS`8+3Hz!T zqFvCvNqT4N__ybBg&<(LcfhJe-t;8tV-WWa5Z(Qh+0C)~V$fE%&YuhLC=~zz00000 z06a`;b~h`ThTo&S4s zP{0l9u7MTV>TC>m)$O+2Y0cWO>N>5(_}tsQh?G)f6o^vFWZWm6=Xv$zl*Bvsc3*Yj z9v*O6)nkU}ONKi@t0Pfwjy6&{YTfbD45uGrT@e5P004g9M}K5z`VFh@s;@%2aCn&2 z=54cnn=`L(f7MJP%*x6+RrIdOj;xBo>A5VqplajQx25aQT+lEdd2Ouy@Xm87+v6o} z0NRIdn>CxMdmFxXXeYl;k_<_7HuN^_Y}Io1zLr?F<{^Tm`wn;-kvG%&uU!xe#oYnJ zTfQs2!twOsV1NC@d^$Y<00000AwuT^G$+^Jy*kb0{U@{h{scp?6sd^YHHU2kyUc;E z+m#I0=hkDk=YoDx5lPlcim_04Ra4n~-vL+jcb%?Yi9R23J&D$3lagFjmP49rf7cjH zJ`nU=g8%Tb`VwRAbBjZ-Jx+3ForPz$e5Lz44t*Y(XGCS!{y$)CgRe>P|A00Y-IPFk zfVe-0h9ypSk|6p3000000000000000008(`z5qw0O6~eV+7JK$002ovPDHLkV1k2M B;}-w` delta 589 zcmV-T0-s3`H}Z*@^pKl6#pC&dH=9iLolg_T8@* z5HLZ67bKd>CNQ)3w@eRe^L}{O2DOdhcW(1Uw5}^zhFI4%Y4;@Cwzal`l<_Qcn`e}{ z%>s?9TC8Aws_+E#uqXK8ke2GLrpl9WXKdpBLI3~&00000xPPCYiEYcRuiOfm`=iXp zRh8-YVqOY;=U&W|dQ3s0CB|BXQuG30E^ccuRkWa!6cKjbprQkg4$L#w_r&mFOcvuz z9gSWmYqoEb*v^b}Q}i~|hcVd!=Ys+2^$>W7(<@BD4{g9s!os zDt))LvdBL-`M?`o$y?oxMAECi=FMY)^grh5XY{v*F^DuI)$ea4Be$6;L6%C1KOLAzxuc29Rn{p!%&RycI1-wCK7uo#m8s%@ys@Nj z0;3o{VY7U7{LQuEpJoEy1)=L5a0000000000 b0DKI8?#}C?XsV@)00000NkvXXu0mjf=d>4N diff --git a/tests/snapshots/nanox/test_menu_settings/00010.png b/tests/snapshots/nanox/test_menu_settings/00010.png index 909ec4ffffa3780f00059d6e808091031020ef2d..2aa394d95f58df2507c3f3cbdb267ce58c47c4b9 100644 GIT binary patch delta 349 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 V!BIM-@_4`jGrxZ2^(C*z{{u{{fNB5$ literal 11072 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 nnfm{)_{UFh{@?{d=W%?Oy&5;}VG( diff --git a/tests/snapshots/stax/test_menu_settings/00003.png b/tests/snapshots/stax/test_menu_settings/00003.png index 9487c4fde5f74b548525f221e0efa56e3950629d..f27f09321e43196ee0108227c222537772fc0622 100644 GIT binary patch literal 11641 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 Wjx)=zA2?DCGBL8eUU$_!;lBY@&*}02 literal 12007 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